要讓用戶端機器成功連接 Oracle 資料庫,核心在於「安裝適當軟體」與「進行正確配置」兩大階段。除了 Java 可使用 JDBC Thin 模式直連外,一般用戶端皆需安裝 Oracle Client 軟體(含 Oracle Net 通訊元件)。若該機器已安裝 Oracle Database,則已內建 Client,無需重複安裝。
sqlnet.ora:NAMES.DIRECTORY_PATH = (TNSNAMES, ...)
# NAMES.DEFAULT_DOMAIN = DB_DOMAIN
tnsnames.ora(網路服務名定義)。lsnrctl start [listener_name]
lsnrctl status [listener_name]
-- Oracle 9i/10g/11g/12c/19c
sqlplus "/ as sysdba"
SQL> startup
-- Oracle 8i (舊版)
svrmgrl
SVRMGR> connect internal
SVRMGR> startup
檔案位置:
Windows: ...\network\admin\tnsnames.ora
Linux/Unix: .../network/admin/tnsnames.ora
範例:假設伺服器主機名 testserver,服務名 orcl.testserver.com,監聽埠 1521。
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = testserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.testserver.com)
)
)
hosts 檔加入解析。listener.ora 設定一致,可用 lsnrctl status 查看。show parameter service_name 取得。sqlplus system/manager@TEST
原因:tnsnames.ora 中找不到指定的網路服務名,或 sqlnet.ora 設定了 NAMES.DEFAULT_DOMAIN 導致自動附加網域名稱找不到對應項目。
解決方法:
tnsnames.ora 服務名拼寫正確(建議大小寫一致)。sqlnet.ora 有 NAMES.DEFAULT_DOMAIN,請註解掉(加 #)。tnsnames.ora,在伺服器端測試連線。若伺服器端可連、用戶端不行,則為網路問題。原因:tnsnames.ora 中的 SERVICE_NAME 與伺服器端實際服務名不符。
解決:修正 tnsnames.ora 中的 SERVICE_NAME 參數。
當執行 sqlplus user/pwd@net_service_name 時:
sqlnet.ora 的 NAMES.DEFAULT_DOMAIN(若存在)。TEST → TEST.SERVER.COM)。tnsnames.ora 尋找完整服務名。因此,若不需網域補綴,務必註解或移除 NAMES.DEFAULT_DOMAIN。
sqlnet.ora 無誤設 NAMES.DEFAULT_DOMAIN 干擾。tnsnames.ora 服務名、HOST、PORT、SERVICE_NAME 全數正確。ping 通資料庫主機名/IP。依循上述步驟,即能系統化排除 Oracle 連線問題,建立穩定可靠的資料庫存取環境。