• plsql远程访问数据库 解决ora-12541:TNS:无监听程序


    今天在windows server 2012上安装了一个oracle 11g的数据库,但是安装 完成以后发现在我的机器上访问数据库出现错误,ora-12541:TNS:无监听程序。

    后来查询了很多资料,加上借鉴博客园师兄的博客,我知道了问题的所在,今天拿出来分享一下:

    具体操作步骤如下:

    1.下载plsql,安装.

    2.下载Instant Client,点击下载,下载第一个basic就行了,下载完解压缩,以放到主win7 d盘根目录为例:d:instantclient_11_2

    3.在d:instantclient_11_2新建tnsnames.ora,用记事本编辑.

    4.到server 2012的oracle安装目录找到 …appadminproduct11.2.0dbhome_1NETWORKADMIN nsnames.ora,打开,比如数据库实例是orcl,找到如下代码,拷贝到本机d:instantclient_11_2 nsnames.ora
    ORCL =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = server 2012 IP)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = orcl)
    )
    )

    5.添加一个环境变量,名为TNS_ADMIN,值为tnsnames.ora文件所在路径d:instantclient_11_2 nsnames.ora,plsql通过这个找到orcl连接字符串

    6.添加一个环境变量NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK

    7.打开PLSQL,不用登陆,工具-首选项-ORACLE-连接:
    勾选检查连接
    Oracle主目录: d:instantclient_11_2
    OCI库: d:instantclient_11_2oci.dll

    经过以上几步之后,重启PLSQL,问题来了,报错:ora-12541:TNS:无监听程序. ping是可以ping得通的,server 的监听也开着.经过不懈的努力,多次试验终于解决了:

    1网络连接IPV4设置静态IP
    IP地址:192.168.1.111 (111可修改成自己的 1-255)
    子网掩码:255.255.255.0
    默认风头:192.168.1.1
    首选DNS服务器:192.168.1.1
    修改完记得主win7上 ping 192.168.1.111 ping得通再继续往后.

    2.修改..appadminproduct11.2.0dbhome_1NETWORKADMINlistener.ora
    SID_NAME = CLRExtProc 改为 SID_NAME = orcl orcl是实例名
    HOST = localhost 改为 HOST = 192.168.1.111

    3.修改..appadminproduct11.2.0dbhome_1NETWORKADMIN nsnames.ora
    两处 HOST = localhost 改为 HOST = 192.168.1.111
    SID = CLRExtProc 改为 SID = orcl

    好了,重启oracle,监听,主win7上的plsql就可以远程连接虚拟机上的数据库了.

    下面供大家参考:

    排查问题:在服务端机器上
    1.首先检查监听程序是否能正常启动,开始,运行 cmd--->lsnrctl start,检查监听是否是在正常运行,如果正常运行,会提示:TNS-01106: 使用名称LISTENER的监听程序已经启动。如果没有运行,用上面的命令启动监听程序。
    2.还在命令提示行里用 tnsping 服务名 ,来检查tnsnames.ora服务配置是否正确。正确的提示例如:
      已使用 TNSNAMES 适配器来解析别名
      Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
      (HOST = 192.168.0.6)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = 服务名)))
      OK (50 毫秒)
    命令1: tnsping orcl (ping 本地的orcl,)
    结果:已使用 TNSNAMES 适配器来解析别名
      尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 152
      1)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl1)))
      OK (0 毫秒)
      其中:(HOST = localhost) 监听器是这么解析的
    命令2:tnsping 159.156.1.207/orcl1(加上本地ip来ping本地实例)
      结果:已使用 EZCONNECT 适配器来解析别名
      尝试连接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl1))(ADDRESS=(PROTOCOL=TCP)
      (HOST=159.156.1.207)(PORT=1521)))
      TNS-12541: TNS: 无监听程序
      其中:(HOST=159.156.1.207)监听器是这么解析的
    错误就在这里了,按常理来说,localhost和159.156.1.207(本机IP)应该是同样可行的,但是oracle监听器解析时就是没能正确通过。
    解决办法:先是尝试修改监听器配置文件:tnsnames.ora中的配置,但是均告失败
    最后,打开Oracle 自己的工具:Net Configuration Assistant 将原来的监听器重新配置一遍,走流程不修改,直到完成。重新启动监听器,测试加ip来ping实例,正常通过
    结果:已使用 EZCONNECT 适配器来解析别名
    尝试连接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl1))(ADDRESS=(PROTOCOL=TCP)
    (HOST=159.156.1.207)(PORT=1521)))
    OK (0 毫秒)
    结论:成功解决了数据库远程连接问题,问题原因我猜想是ORACLE的监听器没能正确的映射本机IP和loaclhost,导致报错,通过重新配置监听器,就将IP和localhost正确的映射了

  • 相关阅读:
    无法删除文件提示找不到指定文件导致文件无法删除的解决方法
    c++多线程编程(三)
    c++多线程编程(二)
    c++多线程编程(一)
    面试中的C++常见问题
    展示组件(Presentational component)和容器组件(Container component)之间有何不同
    如果你创建了类似于下面的 Twitter 元素,那么它相关的类定义是啥样子的?
    React 中 refs 的作用是什么?
    typescript 类(类的定义、继承、修饰符、抽象类)
    typescript 接口 interface
  • 原文地址:https://www.cnblogs.com/wq920/p/3298447.html
Copyright © 2020-2023  润新知