【監聽】手工配置tnsnames.ora檔案注意事項——謹慎處理空格

secooler發表於2010-12-17
有關資料庫連線串的配置基本上有兩種方法:一種是使用圖形化工具netmgr;另外一種是手工直接編輯修改網路配置檔案tnsnames.ora。
這兩種配置方法各有利弊。netmgr工具配置方法因為需要啟動圖形化介面,因此受環境的限制比較多,優點是使用netmgr配置的資訊不容易出現錯誤;手工配置tnsnames.ora適合經驗豐富的DBA使用,優點是完全可以在命令列中完成,快速高效,缺點是容易出錯。

本文給出一個手工配置tnsnames.ora極易出錯的一個案例:謹慎處理空格!

1.標準的tnsnames.ora內容
ora10g@secdb /home/oracle$ vi $ORACLE_HOME/network/admin/tnsnames.ora
……
ORA10G =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora10g)
    )
  )
……

標準的配置以精美的縮排展示了連線串的配置,很容易閱讀。
建議以此為模板去配置其他的連線串。

2.其他形式的配置
1)無縮排形式
ORA10G =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
 (CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = ora10g)
 )
)

上面這種書寫形式沒有縮排,因此可閱讀性就大大地降低了。不過這種形式是可行的。
這裡需要提醒的是:連線串名需要頂頭書寫,資料庫連線串定義中除首尾括號外不允許其他內容頂頭書寫!(後面會有錯誤例子)

2)一行搞定一切
ORA10G=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=secdb)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ora10g)))

這是最精簡的一種配置,但是缺點非常顯然:很難快速的理清語法關係。這種配置方法可整合在指令碼中,達到快速編輯測試環境下的tnsnames.ora配置檔案的目的。

3.謹慎處理空格
上文中“無縮排形式”中已經給出了配置規律:連線串名需要頂頭書寫,資料庫連線串定義中除首尾括號外不允許其他內容頂頭書寫!
例如下面的配置是不可行的。

ORA10G =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
 (CONNECT_DATA =
(SERVER = DEDICATED)
 (SERVICE_NAME = ora10g)
 )
)

注意上面倒數第三行頂頭書寫是不被允許的!
依此類推,下面的這些書寫格式亦是非法。
ORA10G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
 (CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = ora10g)
 )
)

ORA10G =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
(CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = ora10g)
 )
)

ORA10G =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
 (CONNECT_DATA =
 (SERVER = DEDICATED)
(SERVICE_NAME = ora10g)
 )
)

ORA10G =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
 (CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = ora10g)
)
)

此時連線資料庫時的報錯資訊如下:
ora10g@secdb /home/oracle$ sqlplus sec/sec@ora10g

SQL*Plus: Release 10.2.0.3.0 - Production on Fri Dec 17 21:10:16 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


Enter user-name:

4.小結
如果條件允許的情況下可以使用netmgr工具配置資料庫連線串,這樣可以規避因手工編寫配置檔案帶來的錯誤。對於經驗豐富的朋友建議採用手工方式來配置,畢竟這樣更加的透明和高效。

Good luck.

secooler
10.12.17

-- The End --

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

相關文章