解决方法(Linux下配置):
再开个终端,编辑oracle的监听配置文件listener.ora,把host = localhost的localhost改为具体的主机ip,保存
$ vi $ORACLE_HOME/network/admin/listener
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
然后重新加载监听程序
# lsnrctl reload
重新更改登录测试,ok
备注:如果还不行,退出netca,再次打开,重新配置监听,然后配置网络服务名
解决办法(Windows下配置):
步骤1:如下图,sqlplus登陆系统,然后输入命令“show parameter service_names”,查看服务名是否正确
步骤2:服务名正确的情况下,找到oracle安装目录下的lisnter.ora,修改文件,如下图
如下图找到
(SID_DESC =
………
)
在其后添加
(SID_DESC =
(GLOABLE_DBNAME = myorcl)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = myorcl)
)
说明:
ORACLE_HOME给出服务器上Oracle可执行程序的位置
GLOBAL_DBNAME标识全局数据库名称。本项应该与当前Oracle服务的init.ora文件中的SERVICE_NAMES项一致
SID_NAME 含有用于本Oracle实例的Oracle SID的名称
步骤3.保存listener.ora文件,命令行下输入“lsnrctl stop”,停止监听,然后输入lsnrctl start启动监听
附:监听器的停止,启动,查看命令(不分window、Linux\Unix)
lsnrctl stop [listenername]#停止监听
lsnrctl start [listenername]#开启监听
lsnrctl status [listenername]#查看监听器状态
lsnrctl reload [listenername]#重启监听器
说明:默认情况可以不指定监听器名称,reload命令会重新读取listener.ora的内容,这个命令让用户不停止监听器的情况下,改变监听器的配置。但是对于sqlnet.ora的修改考虑一下情况:
1.如果之前sqlnet.ora没有被当前的监听器使用,这时必须关闭然后重启监听!
2.如果之前正在使用sqlnet.ora,那么lsnrctl reload是比较快的方式。当前已经建立的连接不会收到影响,动态监听服务完成的非常快,也几乎不受影响
情形二:如下图,提示“invalid username/password;logon denied……”
解决方法:更改登陆,输入正确的用户名和密码
情形三:如下图,提示“无监听程序……”
解决办法:
先配置监听程序,如果配置都没错,那么尝试在cmd命令行下先停止监听,再启动监听lsnrctl stop,lsnrctl start
第10步:如下图,配置成功的情况下,点击“下一步”
第11步:如下图,默认,点击“下一步”
第12步:如下图,选择“否”[如不需要的话],点击“下一步”
第13步:点击“下一步”
第14步:点击“完成”
注:本地网络服务名配置对应的配置文件为tnsnames.ora,Linux下查看,类似如下
[laiyu@localhost ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl11g)
)
)
说明:
ORACL11G:”网络服务名”,可自定义替换,配置时一般采用默认的SERVICE_NAME
HOST:Oracle服务器所在主机地址、主机名、localhost等
SERVICE_NAME:oracle服务名(通常为全局数据库名),即Oracle实例名
操作3-服务端配置-查看网络或网络管理
第一步:
Windows下,如图,打开“配置和移植工具-》Net Manger”
Unix、Linux下,如下,输入命令netmgr
$ netmgr
第二步:检查监听配置是否正确
第三步:检查服务命名是否正确,并测试
选中服务,点击左边的测试按钮,然后点击弹出界面的测试
结果说明
情形一:如下图,可能出现提示“监听程序当前无法识别连接描述符中请求的服务”
解决办法:连接类型设置成了共享服务器,把连接类型改成“数据库默认设置”或者“专用服务器”即可
操作3-客户端配置
参考文档“Oracle 11g即时客户端在windows下的配置”
备注:
linux下远程oracle主机,发现主机内部都可以测试通过,外面也可以ping通oracle主机,但是总是提示tns超时连接,关闭防火墙也不行,咋办?
解决方法:
1.停止防火墙
[root@localhost ~]# service iptables stop
2.编辑防火墙配置文件
[root@localhost ~]# vim /etc/sysconfig/iptables
在文件中添加红色选框的内容
然后保存配置文件
3.重启防火墙:
[root@localhost ~]# service iptables restart
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
因为我们是配置在配置文件中的,重启后仍然生效,否则如下操作保存配置,以便linux重启后依然有效
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
好了,可以连接上了了