
检查监听服务是否启动,如果已经启动的话,修改监听文件
在oracle服务器Oracle安装目录(我的在E:\Oracle10g下,每个人的不一样,根据自己的情况查找)Network/admin目录下找到listenerora 我的如下图所示
# listenerora Network Configuration File:E:\Oracle10g\network\admin\listenerora
# Generated by Oracle configuration tools
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\Oracle10g)
(PROGRAM = extproc)
)
----添加部分开始
(SID_DESC=
(GLOBAL_DBNAME= ORCL)
(ORACLE_HOME= E:\Oracle10g)
(SID_NAME= ORCL)
)
-----添加部分结束
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = onest)(PORT = 1521))
)
)
ORCL为监听的实例名。
然后重启监听再试试
先看看 lsnrctl status 的输出信息 Services Summary Service PLSExtProc has instance(s) Instance PLSExtProc status UNKNOWN has handler(s) for this service Service catadb has instance(s) Instance catadb status UNKNOWN has handler(s) for this service Instance catadb status READY has handler(s) for this service Service catadbXDB has instance(s) Instance catadb status READY has handler(s) for this service The mand pleted successfully
这里提出两个问题 输出中显示的这些 service 是在哪里定义的? 为什么一个 service 会有两个 instance?
先来看第二个问题 从oracle 版本后 在listener ora文件中没有为数据库预先定义条目的时候 instance 和 listener 可以自动的互相发现 但是习惯上在listener ora文件中为每个数据库定义一个SID_DESC条目以便在需要的时候使用 这就使服务 catadb 有两个实例: 一个状态是 UNKNOWN 的实例 是在 listener ora 文件中静态定义 另一个状态是 READY 的实例是当数据库启动时 PMON进程自动把数据库注册到监听器 在数据库启动后每一分钟注册一次 在使用OEM等工具时需要有监听的静态定义
再来看看这些服务是怎么定义的 oracle有三种监听方式
Database
提供对数据库实例的网络访问
PLSExtProc
PL/SQL 包访问 *** 作系统可执行程序的方法
Executable
提供对 *** 作系统可执行程序的网络访问
lishixinzhi/Article/program/Oracle/201311/16556
9i以后都有动态监听了哦,不需要在listenerora里配置sid了,只要实例是open的,都会自动注册到监听,用lsnrctl status看一下就知道了,service开头的,后面就是你的服务,下面会有一、二行就是你的sid了,它的status是READY的,另外如果实例不能自动注册,再看一下local_listener的设置是不是有问题,它的值应该是(ADDRESS = (PROTOCOL = TCP)(HOST =ccc)(PORT = 1521))
listenerora文件中存放了客户机与服务器连接所需要的监听地址,以及服务器启动监听进程时的信息。
一个完整的listenerora文件样式如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = sun62)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/ORACLE/product/817)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ora817huaweicom)
(ORACLE_HOME = /opt/ORACLE/product/817)
(SID_NAME = ora817)
)
)
其中,LISTENER是服务器中监听进程的名称;PROTOCOL表明所使用的网络协议,若是TCP/IP协议,则该值必须为“TCP”;HOST表示服务器的网络地址;PORT指TCP/IP协议在主机中所占用端口号,ORACLE缺省使用1521,是在安装ORACLE数据库时定义的,在安装时可以改变,安装完成后不能改变此值;SID_NAME指服务器上运行的ORACLE数据库名称,该值应与bash_profile文件中的环境变量ORACLE_SID相同(一般情况下此文件为缺省值“PLSExtProc”);ORACLE_HOME是指ORACLE数据库的主目录,该值也应与 bash_profile文件中的环境变量ORACLE_HOME相同。
还有什么疑问吗
以上就是关于求助:数据库ORA-12514:TNS:listener does not.错误全部的内容,包括:求助:数据库ORA-12514:TNS:listener does not.错误、理解oracle的“lsnrctlstatus”、oracle报10505错误,listener.ora中没有sid怎么办啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)