oracle RAC在某节点对部分表执行DML时遭遇TNS-12154报错

来源:互联网 发布:电脑主题壁纸软件 编辑:程序博客网 时间:2024/05/21 23:00

最近应用系统接到用户报障,称对某几张表执行插入操作时报错TNS-12154:无法解析当前的服务名。现将排查过程记录如下,供大家讨论:

现象:

红帽6.4上的oracle 11g 三节点RAC,其中在节点3上对表A执行DML时报错TNS-12154:无法解析当前的服务名,对表A查询正常。在节点1和节点2执行DML正常。

分析:

检查集群状态正常,数据库alter日志无报错,数据库的其他表在任一节点执行DML都正常。根据TNS报错,推测是存在DBLINK导致的解析失败。检查插入的表名,确认是具有唯一对象名的一张普通表。尝试使用create table a-test as select * from a复制该表,发现对表a-test可以正常执行DML,同时,在尝试使用alter table a rename to a-bak重命名表a时,报错ORA-26563,表示有物化视图日志基于该表创建。联想到TNS的报错是跟dblink有关,而物化视图可以建立远程表,可能在与远程数据库通信时TNS服务名解析失败导致,于是检查三个节点的tnsnames.ora文件,发现节点1和节点2有一条信息是节点3的文件里没有的,抱着尝试的想法在节点3的tnsnames.ora文件里添加上这条记录后,DML执行正常。

处理:

在节点3的tnsnames.ora文件里添加上节点1和节点2文件里的记录,故障解决。

问题:

虽然问题解决了,但是逻辑并没有理清,因为要修改的表是一张普通表,不存在dblink,如果是基于该表的物化视图,且是基于on commit更新的,那么也只可能影响物化视图的更新,不会限制表的更新。同时,从重命名该表的报错ORA-26563来看,存在物化视图日志基于该表,但是查询物化视图日志信息时,并没有基于该表的物化视图日志。后续还需要测试其他情况来分析,在此仅为问题记录,并为出现该问题时提供一个思路。

阅读全文
0 0
原创粉丝点击