5、關於tnsname.ora檔案的配置

yyycxhtx發表於2007-07-31
客戶端連線oracle資料庫,需要配置的檔案包括,sqlnet.ora和tnsname.ora.tnsname.ora就是起一個“資料庫網路服務名”解析的功能[@more@]

先來一個tnsnames.ora檔案的樣板:

test=

(DEscriptON=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521)

)

(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)

)

)

現解釋如下:

test:為網路服務名(net service name),也叫資料庫別名。

SERVICE_NAME:該引數是 Oracle8i 新引進的。在8i以前,我們用 SID 來表示標識資料庫的一個例項,但是在 Oracle 的並行環境中,一個資料庫對應多個例項,這樣就需要多個網路服務名,設定繁瑣。為了方便並行環境中的設定,引進了 Service_name 引數,該引數對應一個資料庫,而不是一個例項,而且該引數有許多其它的好處。該引數的預設值為 Db_name. Db_domain,即等於 Global_name。一個資料庫可以對應多個 Service_name,以便實現更靈活的配置。該引數與 SID 沒有直接關係,即不必 Service name 必須與 SID 一樣。

sql*plus 執行基本機理:

在使用者輸入 sqlplus system/manager@test 後,sqlplus 程式會自動到 sqlnet.ora 檔案中找 NAMES.DEFAULT_DOMAIN 引數,假如該引數存在,則將該引數中的值取出,加到網路服務名的後面,即此例中你的輸入由 sqlplus system/manager@test 自動變為 sqlplus system/manager@test.server.com ,然後再到 tnsnames.ora 檔案中找 test.server.com 網路服務名,這當然找不到了,因為該檔案中只有 test 網路服務名,所以報錯。解決的辦法就是將 sqlnet.ora 檔案中的 NAMES.DEFAULT_DOMAIN 引數註釋掉即可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如 NAMES.DEFAULT_DOMAIN 引數不存在,則 sqlplus 程式會直接到 tnsnames.ora 檔案中找 test 網路服務名,然後取出其中的 host,port,tcp,service_name,利用這些資訊將連線請求傳送到正確的資料庫伺服器上。

另外原則上 tnsnames.ora 中的配置不區分大小寫,但是我的確遇到區分大小寫的情況,所以最好將使用的網路服務與 tnsnames.ora 中配置的完全一樣。
ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descrīptor.該錯誤表示能在 tnsnames.ora 中找到網路服務名,但是在 tnsnames.ora 中指定的 SERVICE_NAME 與伺服器端的 SERVICE_NAME 不一致。解決的辦法是修改 tnsnames.ora 中的 SERVICE_NAME。

可以看到,能否連線資料庫,和sqlnet.ora中的names.default_引數有很大關係。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/248644/viewspace-929673/,如需轉載,請註明出處,否則將追究法律責任。

相關文章