场景
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服务了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论