我尽量描述清楚。
我手动创建了一个数据库ORCL。想配置监听。我只是配置了tnsnames.ora文件。网上还说要配置Listener.ora文件(我不知道怎么配置,也就没有改)这是Listener。ora# listener.ora Network Configuration File: F:\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 = F:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )
  )LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 20090921-1615)(PORT = 1521))
    )
  )
这个是tnsnames.ora# tnsnames.ora Network Configuration File: F:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 20090921-1615)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )
PRACTICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 20090921-1615)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PRACTICE)
    )
  )YUYU =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 20090921-1615)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = yuyu)
    )
  )EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )。
当我lsnrctl start ORCL时C:\Documents and Settings\Administrator>lsnrctl start ORCLLSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 01-4月 -2010 17:37:17Copyright (c) 1991, 2005, Oracle.  All rights reserved.TNS-01106: 使用名称LISTENER的监听程序已经启动C:\Documents and Settings\Administrator>当我lsnrctl status时C:\Documents and Settings\Administrator>lsnrctl statusLSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 01-4月 -2010 17:38:13Copyright (c) 1991, 2005, Oracle.  All rights reserved.正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
启动日期                  01-4月 -2010 16:57:52
正常运行时间              0 天 0 小时 40 分 20 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          F:\oracle\product\10.2.0\db_1\network\admin\listener.ora
监听程序日志文件          F:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=20090921-1615)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "PRACTICEXDB" 包含 1 个例程。
  例程 "practice", 状态 READY, 包含此服务的 1 个处理程序...
服务 "PRACTICE_XPT" 包含 1 个例程。
  例程 "practice", 状态 READY, 包含此服务的 1 个处理程序...
服务 "practice" 包含 1 个例程。
  例程 "practice", 状态 READY, 包含此服务的 1 个处理程序...
服务 "yuyu" 包含 1 个例程。
  例程 "yuyu", 状态 READY, 包含此服务的 1 个处理程序...
服务 "yuyuXDB" 包含 1 个例程。
  例程 "yuyu", 状态 READY, 包含此服务的 1 个处理程序...
服务 "yuyu_XPT" 包含 1 个例程。
  例程 "yuyu", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
只有之前的两个数据库ready,ORCL没有ready!!!
现在我不知道这个情况是不是有问题了。如果错了,怎么办呢?
不知道排版什么样啊

解决方案 »

  1.   

    在listener.ora中增加红字部分。
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = F:\oracle\product\10.2.0\db_1)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = ORCL)
          (ORACLE_HOME = F:\oracle\product\10.2.0\db_1)
          (SID_NAME = ORCL)
        )
      )LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 20090921-1615)(PORT = 1521))
        )
      )
      

  2.   

    谢谢法师。我已经OK了。刚刚从图书馆回来,也找见了怎么改了。只是,我看的匆忙,还希望解释一下,为什么Listener.ora里面没有之前的自动创建的2个数据库,而是SID_NAME = PLSExtProc。而手动创建的数据库ORCL不能被PLSExtProc给识别吗?
      

  3.   

    你先打开
    F:\oracle\product\10.2.0\db_1\network\admin\listener.ora
    看看里边有没有配置SID_NAME=ORCL的监听,如果没有的话,加上去。
      

  4.   

    然后
    C:> lsnrctl stop
    C:> lsnrctl start
      

  5.   

    谢谢。我这里已经OK了。
    我想知道:为什么Listener.ora里面没有之前的自动创建的2个数据库,而是SID_NAME = PLSExtProc。而手动创建的数据库ORCL不能被PLSExtProc给识别吗?
      

  6.   

    Oracle 数据库监听配置
    http://blog.csdn.net/tianlesoftware/archive/2009/11/25/4861572.aspx------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    DBA1 群:62697716(满); DBA2 群:62697977
      

  7.   

    lsnrctl start ORCL 这个命令是错误的这里没有配置ORCL的监听,所以你这样启动肯定是错的。不过你这里提示的是
    TNS-01106: 使用名称LISTENER的监听程序已经启动,而不是提示ORCL监听找不到的错,是因为已经启动了一个监听,也就是你配置的LISTENER这个监听。在一个机器上一个ORACLE_HOME只能启动一个监听。所以提示的是你描述中的错误。
    对tns的错误,首先就查看lsnrctl status是很正确的思考方法。如你给出的结果,你的status理没有orcl这个service的注册信息,所以tnsname里连接到orcl的,当然就会报出service unknown的错误。practice" 
    "yuyu" 
    这两个服务时ready的,所以可以通过tnsname进行连接,不过这里描述不对,这里他们不是数据库,而是数据库里的两个实例。一般来说,如果你的listener不做特别的使用(比如修改端口,配置多个IP,或者静态注册),默认的配置就可以了9i或者以上版本,是支持动态register实例的,有人说要修改listener是要往里面加入一些静态注册的部分,而你这里明显不需要,所以可以不修改listner文件。 你只要保证你的数据库可以启动到mount状态,PMON会register你的实例到监听上,你可以打开你的listener.log进行观察。这里你确认你的orcl的实例是启动的。就可以了。有关tns的错误,如果了解了监听和动态注册的机理,基本上你就可以排查大部分的tns错误了。这个可以在我的blog里找到相应的文章。
      

  8.   

    PLSExtProc是调用外部过程用的,如果没用到可不配置
      

  9.   


    学习学习。listener一般默认是动态监听的,因此你创建的数据库并不需要加入到listener中去。你需要确认你的ORCL实例是否已经启动。没有的话,建议先启动ORCL实例,然后再重新启动监听就可以了。
      

  10.   


    描述的不够准确listener一般默认是动态监听的
    listener是没有动态监听这样的说法的,动态,静态指的是注册的方式。如果是大家说习惯动态监听,静态监听了,所以倒觉得习惯了。  动态注册9i和10g的PMON进程会周期性的做register的,你可以观察你的log
    不需要加入到listener
    这里如果是满足到动态注册能够成功的情况下,可以不要加,如果我们是默认的安装数据库的,安装以后也没有做过其他的配置改动,那么在其上建立的实例就满足能动态注册成功的要求,那么就可以不修改这个listener文件了。
      

  11.   

    现在是我的ORCL可以到mount状态。但是4月1好的Listener.log没有和ORCL有关的部分。我找到了3月31号的。相关部分
    31-3月 -2010 23:11:38 * (CONNECT_DATA=(SERVICE_NAME=oral)(CID=(PROGRAM=F:\oracle\product\10.2.0\db_1\jdk\jre\bin\java.exe)(HOST=20090921-1615)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.32.3.10)(PORT=2554)) * establish * oral * 12514
    TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
    31-3月 -2010 23:44:16 * service_register * orcl * 0
      

  12.   

    现在 lsnrctl status服务摘要..
    服务 "ORCL" 包含 1 个例程。
      例程 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "PLSExtProc" 包含 1 个例程。
      例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "PRACTICEXDB" 包含 1 个例程。
      例程 "practice", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "PRACTICE_XPT" 包含 1 个例程。
      例程 "practice", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "practice" 包含 1 个例程。
      例程 "practice", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "yuyu" 包含 1 个例程。
      例程 "yuyu", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "yuyuXDB" 包含 1 个例程。
      例程 "yuyu", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "yuyu_XPT" 包含 1 个例程。
      例程 "yuyu", 状态 READY, 包含此服务的 1 个处理程序...
    命令执行成功
    ORCL的状态是unknown。这个有什么关系吗?
    还有今天的Listener.log也没有和ORCL有关的。
      

  13.   

    直接打开Net Manager 在那里面配应该就可以了吧。
      

  14.   

    受教了。多谢指点。ORCL的状态是unknown。这个有什么关系吗?
    状态UNKNOWN值是静态注册的设置。
    这是监听器用来表明它不知道关于该实例的任何信息的方式,只有当客户发出连接请求时,它才检查该实例是否存在。
      

  15.   


    对的unknow是静态注册的service的状态。由于是静态的,所以并不知道实例的状态,因此为unknow的。