tnsnames.ora配置小結

listener.ora tnsnames.orasqlnet.ora3個文件是關係oracle網絡配置的3個主要文件,其中listener.ora是和數據庫服務器端 相關,而tnsnames.orasqlnet.ora2個文件不僅僅關係到服務器端,主要的還是和客戶端關係緊密。
檢查客戶端oracle網絡的時候可以先檢查sqlnet.ora文件:

# SQLNET.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/sqlnet.ora
# Generated by Oracle configuration tools.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)

##NAMES.DEFAULT_DOMAIN = us.oracle.com

上面的sqlnet.ora文件說明:
SQLNET.AUTHENTICATION_SERVICES= (NTS)——
這個表示採用os認證,在數據庫服務器上,可以利用sqlplus “/ as sysdba”。一般這個配置在windows上是ok的,在unix環境下可能會有問題,一般在unix下可以去掉這個配置。

NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)——表示將首先利用tnsnames進行解析;如果tnsnames解析不到,將使用hostname解析;如果hostname解析不 到,將採用onames進行解析。

被註釋掉的NAMES.DEFAULT_DOMAIN = us.oracle.com——表示採用默認的domain nameus.oracle.com,在tnsnames.ora中如果配置對應的解析,如果原來的別名oralocal,那麼,當啓用這個參數後,在 tnsnames中的配置要改成oralocal.us.oracle.com。在使用tnsping時或者sqlplus登錄時,只需寫前面的別名,系 統會自動加上後面的domain name來進行解析。

檢查完畢sqlnet.ora,一般都會發現是使用tnsname來解析別名的,那麼,tnsnames.ora中可以有哪些配置種類呢?

# TNSNAMES.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/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節點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了,這個時候會發生tnsping能通,但是 sqlplus連接不上的奇怪情況。報錯ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor。這個時候查錯的時候,需要檢查對應的service_name
2)如果遠程數據庫是rac,而且本地客戶端端遠程數據庫處於不同的網段,通過公網鏈接,rac對外的ip映射只有一個,即只映射到一個節點。請注意在 客戶端配置tnsnames的時候按照單機的情況來配置。呵呵,dba不僅僅要學習oracle,瞭解一些網絡的知識,特別是自己系統的網絡架構,也是需 要的。

 

發佈了23 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章