天天看点

RAC Archive log写入错误的节点

     由于多个客户几次问到,RAC环境中,node2的归档日志,写入到node1的archive路径中。

这个问题导致一些客户在使用OGG的情况下,有时无法正确读取日志的问题。

     那是什么原因导致的这个问题呢?

     对此,进行查找和测试。发现了下面的情况会导致archive log没有记录到正确的节点位置。

测试环境

情况1

在node2 instance关闭的情况下,node1上执行alter system archive log current;

会将node2的archive log写入到node1的路径

-----------10.2.0.5版本测试--------------

注:nascds14是节点1,nascds15是节点2

-----------11.2.0.4版本测试--------------

node2 instance关闭,日志产生结果

同样会将node2的archive log写入到node1的路径

---node2---

---node1---

 下面是测试结果截图,同时开启4个窗口

RAC Archive log写入错误的节点

情景2

如果node2正常运行情况下,是不是也会出现日志写入到node1的情况呢?

经过多次测试,alter system archive log current; 

node1和node2都是正常的将各自的archive log写入到各自正确的位置。

这时考虑,如果给node2点运行压力呢?

在node2上运行下面脚本,让node2处于高CPU运行状态

在CPU使用率超过90%的情况下,在node1上多次执行alter system archive log current; 

就会出现node2的归档,写入node1的路径的情况

node1查看archive log生成结果

node2查看archive log生成结果

同时开启4个窗口,开始测试

RAC Archive log写入错误的节点

   总结,首先要先了解 alter system switch logfile;和alter system archive log current;的区别。

主要的区别在于:

ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换;

而ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例执行日志切换。

所以在使用ALTER SYSTEM SWITCH LOGFILE的情况下,就不会遇到archive写错节点的问题。

RAC中archive log写错节点的问题,在使用日志挖掘的应用的时候,可能会遇到问题,如OGG。

这里,我们可以理解为,这是一个oracle expected behaviour。

那么,我们需要考虑下面几种情况来规避这个问题

1. 和应用的开发人员讨论,是不是一定要使用ALTER SYSTEM ARCHIVE LOG CURRENT。

2. 让两个节点的log_archive_dest_*是可以互相访问的,这样在日志挖掘的情况下,control file会告诉你去×××到需要的日志,并且可以读取,就不会报错。

3. 将RAC中的多个节点的归档路径设置为相同的共享路径下,也就没有这些问题了。