oracle ora-12154问题总结
2017-04-03 12:29
316 查看
在使用oracle时,经常会遇到ora-12154问题,但一直没总结,解决办法过段时间就忘,再遇到问题只能再去找解决办法。今天,把目前了解到的内容汇总记录,方便以后查找。
监听器直接面向用户,也就是客户端程序。监听器启动时,负责打开监听端口,等待客户端连接。当有客户端连接时,在专用服务器连接模式下,创建专用服务器进程,用来处理和响应用户请求;而在共享服务器连接模式下,将监听到的用户请求转发调度器,再由调试器调度共享服务器进程处理。以前一直以为oracle服务器中一个实例对应一个监听器,最近才刚知道oracle服务器可以创建多个数据库实例,这多个实例可以使用同一个监听器。这样一来,数据库实例进程只负责维护管理数据库,并不参与和客户端的通信。
2、listener.ora文件
监听器在服务器中对应的配置文件叫listener.ora,在...\dbhome\network\admin\目录下,格式如下。SID_LIST_LISTENER表示名为LISTENER的监听器内注册的实例列表,里面包含所注册的实例信息,全局名称和sid名称;LISTENER表示监听器,里面包含该监听器所支持的协议及地址。监听器创建可以直接修改listener.ora文件,也可以通过oracle自带的配置工具创建。给监听器注册实例可以通过修改该文件静态注册,也可以动态注册(可查看相关资料)。
在命令行中输入lsnrctl命令,进入lsnrctl命令行,输入help可以查看支持的命令。常用的包括status,start <xxx>和stop <xxx>等。其中,status可以查看当前服务器中监听器的状态,start可以启动特定监听器,stop可以关闭特定监听器,不加参数指启动或关闭所有监听器。
2、连接的数据库实例没有在监听器中注册
检查listener.ora文件,看SID_LIST_LISTENER内有无所连接的实例。如果没有,补上。
3、监听器的IP配置为localhost
在oracle服务器端,检查tnsnames.ora和listener.ora文件(一般情况下oracle服务器不需要tnsnames.ora文件,在多服务器做数据共享时才需要。网上查的,未确认过),将监听器和实例中的localhost改为IP地址。
在使用netmanager工具来配置时,比较容易出现这些问题。
4、tnsnames.ora和listener.ora中实例名不一致
这种情况可能出现在为了解决12541问题,而多次删除或创建监听器导致。在修改监听器时,最好先用lsnrctl stop命令关闭所有监听服务。
5、客户端配置问题,检查客户端的tnsnames.ora文件
这类问题是在搜索解决方法时发现的,本人并没有遇到过。症状多发生在使用plsql或其他客户端工具时,没有配置oracle主目录导致未找到tnsnames.ora文件或该文件本身有问题(文件中的实例名前不能有空格)。
附tnsnames.ora文件格式
2、检查服务器端,首先通过lsnrctl status命令查看监听服务有没启动,状态有无问题;
3、如服务已启动且状态正确,检查服务器端配置文件,包括listener.ora和tnsnames.ora;
4、修改配置文件时,要先关闭监听服务,修改完成后再打开。
一、监听器介绍
1、概念监听器直接面向用户,也就是客户端程序。监听器启动时,负责打开监听端口,等待客户端连接。当有客户端连接时,在专用服务器连接模式下,创建专用服务器进程,用来处理和响应用户请求;而在共享服务器连接模式下,将监听到的用户请求转发调度器,再由调试器调度共享服务器进程处理。以前一直以为oracle服务器中一个实例对应一个监听器,最近才刚知道oracle服务器可以创建多个数据库实例,这多个实例可以使用同一个监听器。这样一来,数据库实例进程只负责维护管理数据库,并不参与和客户端的通信。
2、listener.ora文件
监听器在服务器中对应的配置文件叫listener.ora,在...\dbhome\network\admin\目录下,格式如下。SID_LIST_LISTENER表示名为LISTENER的监听器内注册的实例列表,里面包含所注册的实例信息,全局名称和sid名称;LISTENER表示监听器,里面包含该监听器所支持的协议及地址。监听器创建可以直接修改listener.ora文件,也可以通过oracle自带的配置工具创建。给监听器注册实例可以通过修改该文件静态注册,也可以动态注册(可查看相关资料)。
SID_LIST_LISTENER = #监听器LISTENER服务的实例列表 (SID_LIST = (SID_DESC = #实例1 (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\app\root\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\app\root\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC = #实例2 (GLOBAL_DBNAME = orcl) (ORACLE_HOME = C:\app\root\product\11.2.0\dbhome_1) (SID_NAME = orcl) ) ) LISTENER = #监听器LISTENER (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = # 监听器协议及地址 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) ) ) ) SID_LIST_LISTENER2 = #监听器LISTENER2服务的实例列表 (SID_LIST = (SID_DESC = #实例1 (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\app\root\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\app\root\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC = #实例2 (GLOBAL_DBNAME = orcl2) (ORACLE_HOME = C:\app\root\product\11.2.0\dbhome_1) (SID_NAME = orcl2) ) ) LISTENER2 = #监听器LISTENER2 (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = # 监听器协议及地址 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1522)) ) ) )3、监听器常用命令
在命令行中输入lsnrctl命令,进入lsnrctl命令行,输入help可以查看支持的命令。常用的包括status,start <xxx>和stop <xxx>等。其中,status可以查看当前服务器中监听器的状态,start可以启动特定监听器,stop可以关闭特定监听器,不加参数指启动或关闭所有监听器。
二、问题原因
1、监听服务未启动,通过lsnrctl status命令查看监听服务有没启动2、连接的数据库实例没有在监听器中注册
检查listener.ora文件,看SID_LIST_LISTENER内有无所连接的实例。如果没有,补上。
3、监听器的IP配置为localhost
在oracle服务器端,检查tnsnames.ora和listener.ora文件(一般情况下oracle服务器不需要tnsnames.ora文件,在多服务器做数据共享时才需要。网上查的,未确认过),将监听器和实例中的localhost改为IP地址。
在使用netmanager工具来配置时,比较容易出现这些问题。
4、tnsnames.ora和listener.ora中实例名不一致
这种情况可能出现在为了解决12541问题,而多次删除或创建监听器导致。在修改监听器时,最好先用lsnrctl stop命令关闭所有监听服务。
5、客户端配置问题,检查客户端的tnsnames.ora文件
这类问题是在搜索解决方法时发现的,本人并没有遇到过。症状多发生在使用plsql或其他客户端工具时,没有配置oracle主目录导致未找到tnsnames.ora文件或该文件本身有问题(文件中的实例名前不能有空格)。
附tnsnames.ora文件格式
orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100 )(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
三、解决思路
1、先确认客户端连接配置没有问题,特别是服务名。如果使用plsql之类工具,检查oracle主目录和oci路径配置是否正确;2、检查服务器端,首先通过lsnrctl status命令查看监听服务有没启动,状态有无问题;
3、如服务已启动且状态正确,检查服务器端配置文件,包括listener.ora和tnsnames.ora;
4、修改配置文件时,要先关闭监听服务,修改完成后再打开。
相关文章推荐
- Oracle 客户端连接服务器常见问题之--------ORA-12154: TNS: could not resolve service name
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! _转载
- oracle 客户端安装问题 ORA-12154: TNS: 无法解析指定的连接标识符
- .Net下使用System.Data.OracleClient出现“ORA-12154问题“TNS: 无法处理服务名”问题的解决
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- plsql连接oracle 的ORA-12154 TNS无法解析指定的连接标识符问题
- win7x64 连接oracle 客户端 vs 2010调试 提示“ORA-12154: TNS: 无法解析指定的连接标识符 ”ORA-06413 问题(转)
- PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决
- 转:开荒者Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- Oracle 客户端连接服务器常见问题之--------ORA-12154: TNS: could not resolve service name .
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! 我同事遇到的问题。 用户名/
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!
- 与虚拟机Oracle连接出现ora-12154问题的解决
- plsql连oracle服务器时,ORA-12154的奇怪问题
- Oracle 连接问题 ORA-12154: TNS: 无法解析指定的连接标识符(来源:Internet)
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决!