ora12514 Oracle监听自动注册问题
listener.ora 配置如下:
QUOTE:
--------------------------------------------------------------------------------
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.119.128)(PORT = 1521))
    )
  )ADR_BASE_LISTENER = /u01/app/oracle
--------------------------------------------------------------------------------
客户端的tnsname 如下
QUOTE:
--------------------------------------------------------------------------------
119.128.ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.119.128)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL.VM.COM)
    )
  )
--------------------------------------------------------------------------------
结果连接时提示ora-12514,监听程序无法识别连接描述符中请求的信息。而将配置listener.ora增加如下监听列表后可以正常连接:
QUOTE:
--------------------------------------------------------------------------------
SID_LIST_LISTENER=
   (SID_LIST=
        (SID_DESC=
                        #BEQUEATH CONFIG
          (GLOBAL_DBNAME=orcl.vm.com)
          (SID_NAME=orcl)
          (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1/)
                        #PRESPAWN CONFIG
         (PRESPAWN_MAX=20)
          (PRESPAWN_LIST=
           (PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))
         )
        )
       )
--------------------------------------------------------------------------------
我的疑惑是,监听不是有自动注册功的吗?不加应该也是可以才对呀。
(服务端我是先起监听程序,再启动数据库的)。求大侠指教 谢谢。
补充一点,在没有加监听列表前,lsnrctl 运行status一直是这种状态:
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.119.128)(PORT=1521)))
The listener supports no services
The command completed successfully虽然我是先起监听,后起数据库的。

解决方案 »

  1.   

    1、监听器动态注册由PMON进程来完成,一般来说,启动数据时如果监听已经启动,则启动时会自动注册服务。
    2、如果先启动数据库,后启动监听器,则可能稍后等待PMON进程自动注册。
    3、如果想即时注册,可在sqlplus中使用命令:alter system register;
    4、你在SID_LIST_LISTENER增加服务描述这种方式属于静态注册了。
      

  2.   

    2楼说的很全面,按照2楼的alter system register一次应该就可以了.
      

  3.   

    原因是这样的:在未加(GLOBAL_DBNAME=orcl.vm.com) 前,你查看下 监听的状态  lsnrctl status ,里面列出的 service name 必然是 orcl ,很不幸的是,你客户端指定的  (SERVICE_NAME = ORCL.VM.COM),自然无法识别,当你在监听中加入后,自然双方对应起来了.