场景
oracle服务安装在windows本地,oracle客户端在虚拟机中,使用虚拟机连接windows的oracle数据库。
问题1:使用虚拟机telnet我本地oracle1521端口,不通
解决思路:
关闭虚拟机linux防火墙(这个方法有点粗暴,建议在只需要修改防火墙的端口允许通过即可)
# 1:查看防火状态 systemctl status firewalld service iptables status # 2:暂时关闭防火墙 systemctl stop firewalld service iptables stop # 3:永久关闭防火墙 systemctl disable firewalld chkconfig iptables off # 4:重启防火墙 systemctl enable firewalld service iptables restart # 5:永久关闭后重启 chkconfig iptables on
防火墙配置规则 端口 允许得端口
# 查看已打开的端口 netstat -anp # 添加允许的端口 firewall-cmd --add-port=1521/tcp --permanent # 若移除端口 firewall-cmd --permanent --remove-port=1521/tcp # 策略修改完成,请重启: systemctl restart firewalld
添加windows防火墙对1521的入站允许规则

问题2:使用sqlplus登录报错,ora-12514: tns: 监听程序当前无法识别连接描述符中请求的服务
解决思路:关键字监听程序
查看监听服务状态
# 关闭监听服务 lsnrctl stop # 启动监听服务 lsnrctl start # 查看监听服务状态 lsnrctl stat
查看监听服务如果出现下列问题

说明监听服务没有启动
去启动oracle监听服务,监听服务有两个,这里只做单监听讲,随便启动一个即可。

再通过lsnrctl stat查看监听服务,如果出现下图情况

只看到一个服务名"clrextproc"启动了,而我们想要的是orcl服务名
这是需要修改listener.ora 文件
修改listener.ora 文件
文件路径,我本地的路径是:d:\app\niaobulashi\product\11.2.0\dbhome_1\network\admin
需要添加以下红色部分代码,将服务名为orcl添加到监听配置文件中

贴出来如下:
sid_list_listener =
(sid_list =
(sid_desc =
(sid_name = clrextproc)
(oracle_home = d:\app\niaobulashi\product\11.2.0\dbhome_1)
(program = extproc)
(envs = "extproc_dlls=only:d:\app\niaobulashi\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(sid_desc=
(sid_name = orcl)
(oracle_home = d:\app\niaobulashi\product\11.2.0\dbhome_1)
(program = extproc)
(envs = "extproc_dlls=only:d:\app\niaobulashi\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
listener =
(description =
(address = (protocol = tcp)(host = desktop-nndncei)(port = 1521))
)
adr_base_listener = d:\app\niaobulashi再查看监听服务状态,可以看到orcl有了

修改tnsname.ora的host为本地主机名
oraclr_connection_data =
(description =
(address_list =
(address = (protocol = ipc)(key = extproc1521))
)
(connect_data =
(sid = clrextproc)
(presentation = ro)
)
)
listener_orcl =
(address = (protocol = tcp)(host = desktop-nndncei)(port = 1521))
orcl =
(description =
(address_list =
(address = (protocol = tcp)(host = desktop-nndncei)(port = 1521))
)
(connect_data =
(service_name = orcl)
)
)最后使用虚拟机就可以正常连接本地oracle服务了

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论