SQL Server 整合於 Windows 作業系統,Client 元件內建;Oracle 則需在客戶端獨立安裝 Oracle Net 通訊軟體(包含於 Oracle Client 中)。例外:Java 使用 JDBC Thin Driver 可免裝 Client。若機器已安裝 Oracle Database,則自帶 Client 元件,無需重複安裝。
SQL Server 固定監聽埠 1433 且不建議修改,造成「無監聽埠」錯覺;Oracle 將監聽埠(預設 1521)暴露於設定檔,允許彈性調整,但客戶端與伺服器端設定必須一致。
sqlnet.ora:NAMES.DIRECTORY_PATH = (TNSNAMES, ...)NAMES.DEFAULT_DOMAIN = DB_DOMAIN(通常註解或刪除此參數)。tnsnames.ora(核心步驟,詳見下文)。lsnrctl start [listener_name],lsnrctl status 驗證。sqlplus "/ as sysdba" → startupsvrmgrl → connect internal → startup檔案位置:%ORACLE_HOME%\network\admin\tnsnames.ora (Windows) 或 $ORACLE_HOME/network/admin/tnsnames.ora (Unix)。
範例:主機 testserver,服務名 orcl.testserver.com,埠 1521,定義網路服務名 test:
test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = testserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.testserver.com)
)
)
關鍵參數說明:
PROTOCOL:通常為 TCP,無需修改。HOST:資料庫監聽所在主機名或 IP,客戶端需 ping 通,否則修改 hosts 檔。PORT:必須與伺服器端 listener.ora 或 lsnrctl status 顯示的埠一致。SERVICE_NAME:伺服器端 show parameter service_name 查看。sqlplus system/manager@testsqlnet.ora 設定 NAMES.DEFAULT_DOMAIN = testserver.com,實際連線會自動附加尾碼變成 test.testserver.com,導致找不到服務名。解決:註解該參數,或在 tnsnames.ora 中直接使用完整名稱。tnsnames.ora 或同步設定 NAMES.DEFAULT_DOMAIN。將客戶端 tnsnames.ora 內容複製到伺服器端同檔案,於伺服器本機測試 sqlplus system/manager@test。若成功 → 網路問題;若失敗 → 服務名配置或伺服器端問題。
| 錯誤碼 | 原因 | 解決 |
|---|---|---|
| ORA-12154 / TNS-12154 | 服務名不存在於 tnsnames.ora,或 DEFAULT_DOMAIN 導致名稱不符 | 檢查服務名拼寫、註解 DEFAULT_DOMAIN |
| ORA-12514 | tnsnames.ora 中 SERVICE_NAME 與伺服器端不符 | 修正 SERVICE_NAME |
DB_NAME.DB_DOMAIN,建議作為資料庫全域識別。