今天在windows server 2012上安装了一个oracle 11g的数据库,可是安装 完成之后发如今个人机器上访问数据库出现错误,ora-12541:TNS:无监听程序。sql
后来查询了不少资料,加上借鉴博客园师兄的博客,我知道了问题的所在,今天拿出来分享一下:数据库
具体操做步骤以下:windows
1.下载plsql,安装.服务器
2.下载Instant Client,点击下载,下载第一个basic就好了,下载完解压缩,以放到主win7 d盘根目录为例:d:\instantclient_11_2网络
3.在d:\instantclient_11_2新建tnsnames.ora,用记事本编辑.oracle
4.到server 2012的oracle安装目录找到 …\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora,打开,好比数据库实例是orcl,找到以下代码,拷贝到本机d:\instantclient_11_2\tnsnames.ora里app
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\tnsnames.ora,plsql经过这个找到orcl链接字符串工具
6.添加一个环境变量NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK测试
7.打开PLSQL,不用登录,工具-首选项-ORACLE-链接: 勾选检查链接 Oracle主目录: d:\instantclient_11_2 OCI库: d:\instantclient_11_2\oci.dllcode
通过以上几步以后,重启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.修改..\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora SID_NAME = CLRExtProc 改成 SID_NAME = orcl orcl是实例名
HOST = localhost 改成 HOST = 192.168.1.111
3.修改..\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.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正确的映射了