| 文件 | 端 | 核心參數 |
|---|---|---|
| sqlnet.ora | 雙端 | NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT)、NAMES.DEFAULT_DOMAIN |
| tnsnames.ora | 客戶端 | 網絡服務名 → (HOST, PORT, SERVICE_NAME) |
| listener.ora | 服務端 | LISTENER 定義、SID_LIST_LISTENER 靜態註冊 |
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = testserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.testserver.com)
)
)
關鍵點:HOST 需在客戶端可 ping 通;PORT 必須與 listener.ora 一致;SERVICE_NAME 需與服務端 SHOW PARAMETER service_name 一致。
若 sqlnet.ora 含 NAMES.DEFAULT_DOMAIN = server.com,客戶端輸入 @test 會被自動改寫為 @test.server.com,導致 tnsnames.ora 找不到別名。
解決:註釋掉 NAMES.DEFAULT_DOMAIN 或在 tnsnames.ora 中使用全稱 test.server.com。
| 錯誤 | 含義 | 排查 |
|---|---|---|
| TNS-12154 / ORA-12154 | 解析服務名失敗 | tnsnames.ora 缺別名、DEFAULT_DOMAIN 干擾、大小寫不匹配 |
| ORA-12514 | Listener 無法解析 SERVICE_NAME | tnsnames.ora 中 SERVICE_NAME 與 listener 註冊的不一致 |
| ORA-12541 | 無監聽程序 | Listener 未啟動、端口/防火牆阻斷、HOST/IP 錯誤 |
| ORA-12505 | SID 不識別 | 使用 SID 連接但實例未動態註冊,改用 SERVICE_NAME 或靜態註冊 SID_LIST |
lsnrctl status 確認服務已註冊;tnsping 別名 驗證解析;sqlplus user/pwd@別名 完整連接;