执行
lsnctl status命令
显示一个服务包含两个例程,一个ready 一个unknown 而且 oracle 电脑重启之后使用服务名连接总是连接不上请教 

解决方案 »

  1.   

    先看看 lsnrctl status 的输出信息:    Services Summary...
        Service "PLSExtProc" has 1 instance(s).
        Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this
        service...
        Service "catadb" has 2 instance(s).
        Instance "catadb", status UNKNOWN, has 1 handler(s) for this
        service...
        Instance "catadb", status READY, has 1 handler(s) for this service...
        Service "catadbXDB" has 1 instance(s).
        Instance "catadb", status READY, has 1 handler(s) for this service...
        The command completed successfully
        这里提出两个问题:    1. 输出中显示的这些 service 是在哪里定义的?
        2. 为什么一个 service 会有两个 instance?    先来看第二个问题。从oracle 8.1 版本后,在listener.ora文件中没有为数据库预先定义条目的时候,instance 和 listener 可以自动的互相发现。但是习惯上在listener.ora文件中为每个数据库定义一个SID_DESC条目以便在需要的时候使用。这就使服务“catadb”有两个实例:     一个状态是 UNKNOWN 的实例 是在 listener.ora 文件中静态定义;另一个状态是 READY 的实例是当数据库启动时 PMON进程自动把数据库注册到监听器。在数据库启动后每一分钟注册一次。在使用OEM等工具时需要有监听的静态定义。    再来看看这些服务是怎么定义的。oracle有三种监听方式:Database 
     提供对数据库实例的网络访问
     
    PLSExtProc 
     PL/SQL 包访问操作系统可执行程序的方法
     
    Executable 
     提供对操作系统可执行程序的网络访问
         Service "PLSExtProc" 是在 listener.ora 文件中为数据库实例缺省配置的,允许PL/SQL包访问外部程序;
        Service "catadb" 也是在 listener.ora 文件中配置,是每个数据库连接使用的标准模式;
        Service "catadbXDB" 是Oracle 9i以后版本创建数据库时默认包含的XML DB特性,提供http、ftp等服务,在初始化文spfile(或pfile)中定义;
      

  2.   

    数据库启动了?
    启动命令CMD输入:
    1:sqlplus /nolog
    2:connect / as sysdba
    3:startup服务启动了?开始》运行》services.msc
    找到以Oracle开头的服务
    其他服务都可以类似的启动或者关闭
      

  3.   

    PLSExtProc是你在listener里注册的静态监听cabdb你也在listener进行了注册,所以上面一个unkonow是静态注册的一个instance
    下面的一个cabdb是PMON动态注册上去的一个instance,由于是动态注册的,所以status是ready下面cabxDB是数据库实例启动以后XDB自动注册的一个instance。你的问题是什么,连接不上,提示什么错误,这里unkonw和ready并不影响监听的,不过是监听的模式不一样而已。如果是连接不上,你最好把错误提示,和你的连接命令写上来。如果是用类似 sqlplus / as sysdba这样的方式进行本地连接的话,是不会通过监听建立连接的,要通过tnsname这样的方式才行。