oracle ora-12154问题总结

oracle ora-12154问题总结在使用oracle时,经常会遇到ora-12154问题,但一直没总结,解决办法过段时间就忘,再遇到问题只能再去找解决办法。今天,把目前了解到的内容汇总记录,方便以后查找。

大家好,又见面了,我是你们的朋友全栈君。

在使用oracle时,经常会遇到ora-12154问题,但一直没总结,解决办法过段时间就忘,再遇到问题只能再去找解决办法。今天,把目前了解到的内容汇总记录,方便以后查找。

一、监听器介绍

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.2.0\dbhome_1)  
      (PROGRAM = extproc)  
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\root\product.2.0\dbhome_1\bin\oraclr11.dll")
    )  
    (SID_DESC =      #实例2
      (GLOBAL_DBNAME = orcl)  
      (ORACLE_HOME = C:\app\root\product.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.2.0\dbhome_1)  
      (PROGRAM = extproc)  
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\root\product.2.0\dbhome_1\bin\oraclr11.dll")
    )  
    (SID_DESC =      #实例2
      (GLOBAL_DBNAME = orcl2)  
      (ORACLE_HOME = C:\app\root\product.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、修改配置文件时,要先关闭监听服务,修改完成后再打开。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161526.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JSF简单介绍

    JSF简单介绍

  • console.log详解

    console.log详解console.log方法用于在控制台输出信息。它可以接受一个或多个参数,将它们连接起来输出。console.log(‘HelloWorld’)//HelloWorldconsole.log(‘a’,’b’,’c’)//abcconsole.log方法会自动在每次输出的结尾,添加换行符。console.log(1);console.log(2);conso…

  • .NET软件工程师网络在线培训就业课程「建议收藏」

    .NET软件工程师网络在线培训就业课程「建议收藏」.NET软件工程师网络在线培训就业课程课程讲师:北风.NET专职讲师团队 课程分类:套餐适合人群:高级课时数量:2000课时用到技术:MVC5,EF6,BootStrap,HTML5,JqueryMobile,VS,.NET,ASP.NET 北风团队精心打造的42个经典案例,囊括了企业常见项目开发90%的典型应用 1、典型登录

  • 归一化函数mapminmax的讨论

    归一化函数mapminmax的讨论一、基本用法[y,ps]=mapminmax(x,ymin,ymax)   %这里如果不指定ymin,ymax,则ymin默认为-1,ymax默认为1。mapminmax(data)        默认归一化范围为[-1,1],且对每一行做归一化。一定记住是对行进行归一化!!!二、归一化的讨论参考:http://www.ilovematlab

  • echarts饼图中间文字,固定,改成自己想要的值

    echarts饼图中间文字,固定,改成自己想要的值我们都知道饼图中间的文字可能会随着,各种业务的需求,饼图中间的文字都需要或者不需要,那么就需要实现了,其实很简单第一步先把这个地方的true改成false第二部加入这个方法,在text中页自己想要展示的就行了最后的效果……

    2022年10月22日
  • 【嵌入式】C语言中volatile关键字

    【嵌入式】C语言中volatile关键字00.目录文章目录00.目录01.volatile概述02.volatile应用场景03.volatile应用示例04.嵌入式系统中应用05.volatile官方说明volatile06.附录01.volatile概述volatile是C语言中的一个关键字。将变量定义为volatile就表示告诉编译器这个变量可能会被竟想不到地改变,在这种情况下,编译器就不会去假设这个变量的值了,及优化器在用到这个变量是必须每次重新读取他的值。02.volatile应用场景在程序中,volati

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号