配置静态监听解决ORA-12514错误的案例(二)

2014-11-24 12:27:21 · 作者: · 浏览: 1
ction Start Date 08-OCT-2014 09:41:41 Uptime 0 days 2 hr. 48 min. 11 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora Listener Log File /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=std)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0))) Services Summary... Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... Service "std" has 1 instance(s). Instance "prd", status READY, has 1 handler(s) for this service... Service "std_XPT" has 1 instance(s). Instance "prd", status READY, has 1 handler(s) for this service... The command completed successfully
--查看备库远程归档路径 SQL> set lin 130 pages 130 SQL> col error for a20
SQL> select dest_id,error,status from v$archive_dest;
DEST_ID ERROR STATUS ---------- -------------------- --------- 1 VALID 2 VALID 3 INACTIVE 4 INACTIVE 5 INACTIVE 6 INACTIVE 7 INACTIVE 8 INACTIVE 9 INACTIVE 10 INACTIVE 11 VALID
--备库tnsping测试网络服务器名是否正常 SQL> !tnsping prd
TNS Ping Utility for Linux: Version 10.2.0.5.0 - Production on 08-OCT-2014 12:39:40
Copyright (c) 1997, 2010, Oracle. All rights reserved.
Used parameter files:

Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = prd)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prd))) OK (20 msec)
SQL> !tnsping std
TNS Ping Utility for Linux: Version 10.2.0.5.0 - Production on 08-OCT-2014 12:39:44
Copyright (c) 1997, 2010, Oracle. All rights reserved.
Used parameter files:

Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = std)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prd))) OK (10 msec)
tnsping测试下来也都是通的,这就比较奇怪了,但是ORA-12514错误很明显是指监听方面的问题,导致服务名无法解析,由于主备库采用的是同一个实例名,因此两边的instance_name用的都是prd,乍一看好像很正常,但是解析确实出现了问题,那么怎么办呢?
之前仅仅只是给服务器配置了一个动态监听,内容如下:
--主库监听listener.ora # listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora # Generated by Oracle configuration tools.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = prd)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) )
--主库监听listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora # Generated by Oracle configuration tools.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = std)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) )
可以看到,区别仅仅是主机名不同而已,一个是prd,另一个是std,静态监听并未配置,即SID_LIST_LISTENER这一项里面的栏目,那么现在为主备库都配置一个监听。静态监听可以用netmgr配置,这里为了方便,不再进入图形界面执行该命令,而是直接通过修改listener.ora文件来达到目的,其效果是一样的,在原来的listener.ora文件中的SID_LIST_LISTENER中添加如下内容(红色部分):
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = prd) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (SID_NAME = prd) ) (SID_DESC =