tnsping命令對tnsname.ora檔案的使用

路途中的人2012發表於2015-10-11

先寫結論,tnsping命令只識別到tnsname.ora檔案中的ip和埠號,而對之後的service_name或者sid不進行識別,因此tnsping能ping通並不意味著sqlplus 一定能登入。

測試:

本機IP:172.16.4.183

tnsname檔案內容:

DRB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.137)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (sid = drb)
    )
  )

由於172.16.4.137的監聽起著,嘗試tnsping drb

[oracle@dbra admin]$ tnsping drb

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 10-APR-2012 16:05:21

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

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.137)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (sid = drb)))
OK (10 msec)

由於本來就已知137這個IP並不是想要的資料庫所在ip,但是對tnsping能通產生疑惑

sqlplus登入:

[oracle@dbra admin]$ sqlplus as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Apr 10 16:05:42 2012

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

ERROR:
ORA-12505: TNS:listener does not currently know of SID given in connect
descriptor


Enter user-name:

172.16.4.137上的監聽狀態如下:

C:\Users\Administrator>lsnrctl status

LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 10-4月 -2012 16:0
7:09

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=VQBDTC9FC795994)(PORT=1521)
))
LISTENER 的 STATUS
------------------------
別名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 - Produ
ction
啟動日期                  10-4月 -2012 09:00:03
正常執行時間              0 天 7 小時 7 分 7 秒
跟蹤級別                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
監聽程式引數檔案          F:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
監聽程式日誌檔案          F:\oracle\product\10.2.0\db_1\network\log\listener.log

監聽端點概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=VQBDTC9FC795994)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
  例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "mangdb" 包含 1 個例程。
  例程 "mangdb", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "mangdbXDB" 包含 1 個例程。
  例程 "mangdb", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "mangdb_XPT" 包含 1 個例程。
  例程 "mangdb", 狀態 READY, 包含此服務的 1 個處理程式...
命令執行成功
 
可見,並不存在drb的例項。
修改本機tnsname.ora檔案,註釋相關行
DRB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.137)(PORT = 1521))
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (sid = drb)
#    )
  )
[oracle@dbra admin]$ tnsping drb
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 10-APR-2012 16:09:30
Copyright (c) 1997, 2005, Oracle.  All rights reserved.
Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.137)(PORT = 1521)))
OK (10 msec)
 
因此可以得出結論,只要相關監聽正常,tnsping對tnsname.ora檔案中的相關IP和埠號配置符合監聽要求,即能ping通。

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

相關文章