2007-12-17 02:00 關於Windows Oracle「ORA-12154 TNS:could not resolve service name.」抄寫錯誤的處理
1. 發生狀況:在資料庫(Server:Oracle 10g / Windows)進行抄寫時,出現「ORA-12154:TNS:could not resolve service name(TNS:無法解析指定的連線 ID)」錯誤訊息。
且重新Create DB Link,也確認過DB Link所指向的Oracle SID 在 tnsping 部份正常,仍無法讓Oracle DB正常進行抄寫動作。
2.說明:
TNS 無法解析Server端 SID 時,就會出現該狀況。不過,這回比較像是所建立好的DB Link無法讓client端解析到server端。
一般create DB Link的時候,多用server端的SID代表即可。當碰到用SID無法正確解析到server端時,可能要用到如下的解決方法告訴DB Server端的正確IP位址。
備註:
一般create DB Link語法如下:
CREATE DATABASE LINK dblink_name CONNECT TO user IDENTIFIED BY password USING '(SID)';
3.可能原因:
目前原因還待確認......
4.解決:
(1)在Client端登入Oracle後,先Drop原本的DB Link。
Syntax:
DROP [PUBLIC] DATABASE LINK link_name
Ex:
SQL> DROP DATABASE LINK lktest;
(2)重新建立DB Link,不過,在 connect_string 的地方,指定 Service name和它的IP Address。
Syntax:
CREATE DATABASE LINK linkname
CONNECT TO user IDENTIFIED BY password
USING '(description=(address=(protocol=TCP) (host=xxx.xxx.xxx.xxx)(port=1521))(connect_data=(sid=sidname)))'
[ 其實,這段 connect_string 所用到的語法,和在 tnsnames.ora 檔案中所用到的語法結構相當類似。只不過,在 connect_string 中全用小寫,且不斷行,才不會造成另外一個錯誤──指定的IP Address無效 ]
Ex:
SQL> CREATE DATABASE LINK lktest CONNECT TO testuser IDENTIFIED BY testpassword USING '(desc
ription=(address=(protocol=TCP) (host=192.168.0.1)(port=1521))(connect_data=(si
d=testdb)))';
其中:
「192.168.0.1」為「testdb」 Server的 IP,登入帳號為「testuser」,密碼為「testpassword」。






