【LISTENER】因 tnsnames.ora配置檔案配置問題導致ORA-12154錯誤排查一例

secooler發表於2010-09-13
這是一個有關手工配置tnsnames.ora不當,導致服務名不可用的一個問題案例。提醒大家在手工配置的過程中注意其中的細節。

1.錯誤資訊如下
當使用secooler這個服務名連線資料庫的時候,收到如下錯誤
-bash-3.00$ sqlplus sec/sec@secooler

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 13 23:11:00 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

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


Enter user-name:

2.檢查Oracle的監聽配置檔案tnsnames.ora
$ vi tnsnames.ora
……
secooler=
 (DESCRIPTION=
 (ADDRESS=(PROTOCOL=tcp)(HOST=secdb)(PORT=1521))
(CONNECT_DATA=
 (SERVICE_NAME=secooler)))
……

問題就處在在配置secooler服務名的時候存在一行內容沒有留有空格(上面第四行的資訊"(CONNECT_DATA="前面沒有留有空格)。

3.處理問題
僅需將第四行前增加一個空格即可解決問題。

4.關於tnsnames.ora配置檔案的寫法
在手工配置tnsnames.ora檔案的時候,最容易出現的就是語法和格式上的問題。針對具體的一個服務名的配置只允許開始服務名頂頭書寫。
即便是整個服務名內容均寫在一行也是沒有問題的。例如secooler服務名按照如下方法進行配置。
secooler=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=secooler)))

測試服務名secooler的可用性
-bash-3.00$ sqlplus sec/sec@secooler

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 13 23:14:10 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

5.小結
文中提到的問題與Oracle解析tnsnames檔案有關。如果大家習慣使用netca來配置服務名,那將會很少遇到因為tnsnames.ora格式上的問題。不過netca這種圖形化介面工具在某些條件下不便於使用(如僅允許使用命令列介面完成維護任務)。因此,建議大家對tnsnames.ora檔案格式有充分的瞭解,避免不必要的麻煩。

Good luck.

secooler
10.09.13

-- The End --

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

相關文章