連線資料庫報錯 ORA-12514

xz43發表於2011-03-02
前幾天重新安裝了資料庫伺服器,在伺服器上使用都一切正常。然後在我的客戶端配置一個tns服務名,透過sqlplus命令來連線,確報錯:
C:\Documents and Settings\myname>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 3月 1 18:41:06 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-12514: TNS: 監聽程式當前無法識別連線描述符中請求的服務
 
檢視伺服器端的 listener.ora ,內容如下:
# listener.ora Network Configuration File: /usr/app/oracle/product/10.2/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /usr/app/oracle/product/10.2/db_1)
      (PROGRAM = extproc)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = oraclesvr)(PORT = 1521))
    )
  )

SQL> show parameter service_name
NAME                                TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
service_names                       string
orcl
沒有發現問題,再看客戶端的 tnsnames.ora ,如下:
 
ORCL118 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.118)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
也沒發現問題了,客戶端刪除再重建了幾次“本地net服務名配置”,沒有任何作用。對比了tnsnames檔案中其他的連線,配置資訊幾乎完全一致,其他連線確可以正常連線。
 
然後我透過 tnsping 來ping資料庫伺服器Ip和埠:
 
C:\Documents and Settings\myname>tnsping 192.168.0.118
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-3月 -2011 11:00:
Copyright (c) 1997, 2005, Oracle.  All rights reserved.
已使用的引數檔案:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
已使用 EZCONNECT 介面卡來解析別名
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=192.168.0.118))(ADDRESS=(PRO
TNS-12560: TNS: 協議介面卡錯誤
 
C:\Documents and Settings\myname>tnsping orcl118
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-3月 -2011 11:18:
Copyright (c) 1997, 2005, Oracle.  All rights reserved.
已使用的引數檔案:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

已使用 TNSNAMES 介面卡來解析別名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192
TNS-12560: TNS: 協議介面卡錯誤
 
看來tnsping都不行,肯定就不要指望連線使用了。
 
再用 telnet 看看能不能連線這個IP的1521埠。
C:\Documents and Settings\myname>telnet 192.168.0.118 1521
正在連線到192.168.0.118 ...不能開啟到主機的連線, 在埠 1521: 連線失敗
 
進一步證實,應該就是1521埠問題了。
 
透過 netca 介面方式刪除伺服器端的監聽,重新配置監聽,重啟機器。關閉伺服器端的防火牆後,重啟監聽和資料庫,再透過sqlplus連線成功。
伺服器端:
$ lsnrctl stop
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 02-3æ -2011 14:15:46
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
The command completed successfully
$ which lsnrctl   檢視使用的命令位置,在此沒作用
/usr/app/oracle/product/10.2/db_1/bin/lsnrctl
$ lsnrctl start 啟動監聽
$ lsnrctl status 檢視監聽狀態
 
客戶端:
C:\Documents and Settings\myname>sqlplus as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 3月 2 15:47:50 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
 
若資料庫的服務沒有啟動,遠端連線還是會報錯:
C:\Documents and Settings\myname>sqlplus as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 3月 2 18:18:14 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-12514: TNS: 監聽程式當前無法識別連線描述符中請求的服務

請輸入使用者名稱:
 
要想在不啟動資料庫服務的時候能連線上,就需要修改資料庫伺服器端的監聽配置檔案 listener.ora,在裡面增加以下段(加粗)
$ cat listener.ora
# listener.ora Network Configuration File: /usr/app/oracle/product/10.2/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /usr/app/oracle/product/10.2/db_1)
      (PROGRAM = extproc)
    )
   (SID_DESC =
     (GLOBAL_DBNAME = orcl)
     (ORACLE_HOME = /usr/app/oracle/product/10.2/db_1)
     (SID_NAME = orcl)
   )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oraclesvr)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
重啟監聽後,再連線。
C:\Documents and Settings\myname>sqlplus as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 3月 2 18:23:48 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線到空閒例程。
SQL>
 
 
附錄:
 
linux下啟動和關閉防火牆
 

1) 重啟後生效
開啟: chkconfig iptables on
關閉: chkconfig iptables off

2) 即時生效,重啟後失效
開啟: service iptables start
關閉: service iptables stop

需要說明的是對於Linux下的其它服務都可以用以上命令執行開啟和關閉操作。

在開啟了防火牆時,做如下設定,開啟相關埠,
修改/etc/sysconfig/iptables 檔案,新增以下內容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

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

相關文章