標籤:
.錯誤碼 ORA-12154
相信作為ORACLE資料庫的開發人員沒有少碰到“ORA-12154: TNS: 無法解析指定的串連標識符”,今天我也又碰到了類似的情況,將我的解決方案進行小結,希望能對碰到同樣問題的友人們提供協助。
問題情境描述:
伺服器端版本:oracle 10.2.0.10
用戶端版本:oracle 10.2.0.10
用戶端開發工具:PL/SQL Developer
通過用戶端來串連伺服器,其主要檔案就是通過用戶端的tnsnames.ora來配置,在原檔案的基礎上增加:
SID別名 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_IP)(PORT = 1521))
)
(CONNECT_DATA =
(SID = SID_NAME)
)
)
例:
dev_db =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.10.5)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ora10)
)
)
通過PL/SQL Developer串連dev_db時,報“ORA-12154: TNS: 無法解析指定的串連標識符”。(這個問題以前也碰到過,但解決方案不太一樣,因具體的問題不太一樣。)
我將自己知道的一些解決方案說一下:
1.先檢查伺服器端的監聽服務是否開啟,如果沒有開啟請啟動其監聽
用戶端:tnsping <tns_name>
伺服器Linux下:
#>lsnrctl status 查看監聽狀態
#>lsnrctl start 啟動監聽
2.通過Sql Plus串連一下試試,如果Sql Plus串連能成功,那就說明你的tnsnames.ora內容有錯誤
我的問題就在別名dev_db前面有一個空格,這個可以通過文字編輯器(Edit Plus,UE等)來查看是否有空格,只要有空格那就肯定是不行的,而且如果那段內容是出現在檔案的中間的話,將導致該檔案裡所有相應的串連別名都不成功,如果是在最後面就只有其自身串連別名不能成功,其他串連別名還是能串連成功。(註:我的tnsnames.ora配置了多個資料庫執行個體的串連,所有才有多個串連別名。)
如:
空格dev_db =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.10.5)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ora10)
)
)
3.如果確保你的tnsnames.ora內容沒有錯誤,那請將%ORACLE_HOME%\product\10.2.0\db_1\NETWORK\ADMIN目錄下的所有檔案刪了,然後重新串連,一般就能解決了。
說明一下:那個目錄裡的檔案是在你建立串連的時候動態產生的,不要怕刪了會有問題
4.進入PLSQL Developer的主介面,在登入介面選擇取消即不登入進入主介面,然後選擇菜單Tools(工具)-Preferences(喜好設定),在設定視窗中,選擇Oracle-Connection(串連),對應設定視窗中,找到Oracle Home(Oracle主目錄),選擇你本地所安裝用戶端的版本,儲存設定,然後重新啟動PLSQL Developer,這時就可以正常登入了。
2:用戶端oracle環境變數配置
配置ORACLE_HOME=D:\ProgramFiles\oracle -設定oracle安裝路徑
配置TNS_ADMIN=D:\ProgramFiles\oracle
配置NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 設定為中文字元集
修改path,增加;%ORACLE_HOME%內容
ORACLE.錯誤碼 ORA-12154 及Oracle用戶端免安裝版的設定