新年后第一天,就接到同事的一个邮件,问题是在抽取数据时提示TNS不存在,在2月7号还可以,之后就连不上了,请求帮忙解决。刚过来上班头一蒙,如何查起呢,慢慢地就思路整出来了,一步一步解决。
首先从他邮件上的那个用户A1入手,在A库上去提取B库上的数据,但因没有他提供的用户帐号密码,只能从另外一个用户A2入手,查询下all_db_links表中db_link去找出host,再到host上去查看是否TNS有开启来。
A库的数据库版本是10.2.0.3.0
B库的数据库版本是10.2.0.4.0
1、在A库上,用另一个用户A2上去查看下,发现没有邮件上提供的db_link,原因是提供的db_link是A1私有的的链接,不允许别的用户查看。迅速进入A库主机上用SYS用户进行查看,还是发现没该db_link链,应该用dba_db_links就可以了。
USER_DB_LINKS describes the database links owned by the current user. This view does not display the OWNER column.
ALL_DB_LINKS describes the database links accessible to the current user.
DBA_DB_LINKS describes all database links in the database.
常用习惯ALL_DB_LINKS就是所有的用户,这是个误区,实际上就包括当前用户及一些定义类型为public的数据链。
2、查出后,在A库上查看tnsping下是否能ping通?ping不通后,可发现IP地址是192.168.11.165 与B库上的IP地址是192.168.11.168不相同,但是SID是相同的。纳闷了一下,在B库上,用lsnrctl status 命令查看又是显示没有监听程序,no listener ,应该是命令后面要加查看的实例名如lsnrctl status sid 。再查PS下,发现在2月7号早上9点多有重新加载或重启过TNS,造成了TNS上的IP只变成了168上,用命令netstat -n | grep 1521 | more ,而在A库上只是指向165上。实际上165与168是同一台机器,只是一个是浮动IP。
1、listener.ora配置文件中指定用户名的问题。
2、165与168是同一台机器,
3、将A库上tnsnames.ora中数据库链指向165更改为168就可以了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15242702/viewspace-754137/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15242702/viewspace-754137/