上面的sqlnet.ora文件說明:
SQLNET.AUTHENTICATION_SERVICES= (NTS)——這個表示采用os認(rèn)證,在數(shù)據(jù)庫服務(wù)器上,可以利用sqlplus “/ as sysdba”。一般這個配置在windows上是ok的,在unix環(huán)境下可能會有問題,一般在unix下可以去掉這個配置。
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)——表示將首先利用tnsnames進行解析;如果tnsnames解析不到,將使用hostname解析;如果hostname解析不 到,將采用onames進行解析。
被注釋掉的NAMES.DEFAULT_DOMAIN = us.oracle.com——表示采用默認(rèn)的domain name為us.oracle.com,在tnsnames.ora中如果配置對應(yīng)的解析,如果原來的別名oralocal,那么,當(dāng)啟用這個參數(shù)后,在 tnsnames中的配置要改成oralocal.us.oracle.com。在使用tnsping時或者sqlplus登錄時,只需寫前面的別名,系 統(tǒng)會自動加上后面的domain name來進行解析。
檢查完畢sqlnet.ora,一般都會發(fā)現(xiàn)是使用tnsname來解析別名的,那么,tnsnames.ora中可以有哪些配置種類呢?
# Generated by Oracle configuration tools.
###### 一般的配置 ##################################
ORALOCAL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oralocal)
)
)
###### 這樣也行,用SID=oralocal ###########################
ORALOCAL_2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = oralocal)
)
###### RAC的配置(3節(jié)點rac) ###############################
ORALOCAL =
(DESCRIPTION =
(load_balance = yes)
(failover = on)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(SERVER = DEDICATED)
(failover_mode=(type=select)(method=basic)(retries=20)(delay=20))
)
)
ORALOCAL_NODE1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(INSTANCE_NAME = oralocal_node1)
)
)
ORALOCAL_NODE2=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(INSTANCE_NAME = oralocal_node2)
)
)
ORALOCAL_NODE3 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(INSTANCE_NAME = oralocal_node3)
)
)
)
###### DATA GUARD配置(primary庫和standby庫都需要配置)##############
standby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER=DEDICATED)
(SERVICE_NAME = oralocal)
)
)
primary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER=DEDICATED)
(SERVICE_NAME = oralocal)
)
)
另外需要注意的2點情況:
(1)如果tnsnames中的service_name配置錯誤,配置成了instance_name了,這個時候會發(fā)生tnsping能通,但是 sqlplus連接不上的奇怪情況。報錯ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor。這個時候查錯的時候,需要檢查對應(yīng)的service_name。
(2)如果遠程數(shù)據(jù)庫是rac,而且本地客戶端端遠程數(shù)據(jù)庫處于不同的網(wǎng)段,通過公網(wǎng)鏈接,rac對外的ip映射只有一個,即只映射到一個節(jié)點。請注意在 客戶端配置tnsnames的時候按照單機的情況來配置。呵呵,dba不僅僅要學(xué)習(xí)oracle,了解一些網(wǎng)絡(luò)的知識,特別是自己系統(tǒng)的網(wǎng)絡(luò)架構(gòu),也是需 要的。