视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
RACArchivelog写入错误的节点
2020-11-09 16:15:45 责编:小采
文档


由于多个客户几次问到,RAC环境中,node2的归档日志,写入到node1的archive路径中。 这个问题导致一些客户在使用OGG的情况下,有时无法正确读取日志的问题。 那是什么原因导致的这个问题呢? 对此,进行查找和测试。发现了下面的情况会导致archive log没有记

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

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

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

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

测试环境

Linux + 11.2.0.4 RAC
node1
 ALTER SYSTEM SET log_archive_dest_1='location=/home/oracle/archive_log/ valid_for=(all_logfiles,all_roles)' sid='orcl1' scope=spfile; 
 node2
 ALTER SYSTEM SET log_archive_dest_1='location=/home/oracle/archive_log/ valid_for=(all_logfiles,all_roles)' sid='orcl2' scope=spfile;


情况1


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

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

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

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

[oracle@nascds14 ~]$ ls -l /u01/app/database/dbs/ 
-rw-r----- 1 oracle oinstall 97472 Dec 1 09:47 arch1_66_827745338.dbf
-rw-r----- 1 oracle oinstall 2048 Dec 1 09:47 arch1_67_827745338.dbf
-rw-r----- 1 oracle oinstall 1024 Dec 1 09:50 arch1_68_827745338.dbf
[oracle@nascds14 ~]$ sqlplus / as sysdba
SQL> alter system archive log current;
System altered.
[oracle@nascds14 ~]$ ls -l /u01/app/database/dbs/ 
-rw-r----- 1 oracle oinstall 97472 Dec 1 09:47 arch1_66_827745338.dbf
-rw-r----- 1 oracle oinstall 2048 Dec 1 09:47 arch1_67_827745338.dbf
-rw-r----- 1 oracle oinstall 1024 Dec 1 09:50 arch1_68_827745338.dbf
-rw-r----- 1 oracle oinstall 11776 Dec 1 09:55 arch1_69_827745338.dbf
-rw-r----- 1 oracle oinstall 128512 Dec 1 09:55 arch2_101_827745338.dbf <<<<<<<<<<<<< shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@nascds15 ~]$ ls -l /u01/app/database/dbs/ 
-rw-r----- 1 oracle oinstall 6144 Dec 1 09:50 arch2_100_827745338.dbf
-rw-r----- 1 oracle oinstall 17412608 Dec 1 09:46 arch2_98_827745338.dbf
-rw-r----- 1 oracle oinstall 1536 Dec 1 09:47 arch2_99_827745338.dbf 
[oracle@nascds15 ~]$ ls -l /u01/app/database/dbs/ 
-rw-r----- 1 oracle oinstall 6144 Dec 1 09:50 arch2_100_827745338.dbf
-rw-r----- 1 oracle oinstall 17412608 Dec 1 09:46 arch2_98_827745338.dbf
-rw-r----- 1 oracle oinstall 1536 Dec 1 09:47 arch2_99_827745338.dbf


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

node2 instance关闭,日志产生结果

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

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

---node2---

SQL> create table test1 as select * from dba_users;
create table test1 as select * from dba_users;
SQL> shutdown abort 
shutdown abort
ORACLE instance shut down.

---node1---

SQL> alter system archive log current;

---node1---

[oracle@node111g archive_log]$ ls -al 2*
 
-rw------- 1 oracle asmadmin 1492 12月 19 11:22 2_176_82458.dbf
-rw------- 1 oracle asmadmin 1024 12月 19 11:22 2_177_82458.dbf <<<<<<<<<<<<<

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


情景2

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

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

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

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

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

DECLARE
n NUMBER;
BEGIN
WHILE (TRUE)
LOOP
n:= dbms_random.random();
END LOOP;
END;

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

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

node1查看archive log生成结果

[oracle@node111g archive_log]$ pwd
/home/oracle/archive_log 
[oracle@node111g archive_log]$ ls -al 2*
-rw------- 1 oracle asmadmin 1024 12月 19 10:32 2_103_82458.dbf
-rw------- 1 oracle asmadmin 1024 12月 19 10:37 2_131_82458.dbf

node2查看archive log生成结果

[oracle@node211g archive_log]$ ls -ctrl
 
-rw------- 1 oracle asmadmin 1024 12月 19 10:32 2_101_82458.dbf
-rw------- 1 oracle asmadmin 1024 12月 19 10:32 2_102_82458.dbf
-rw------- 1 oracle asmadmin 1024 12月 19 10:32 2_104_82458.dbf <<<<<<<<<<<<<

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


总结,首先要先了解 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中的多个节点的归档路径设置为相同的共享路径下,也就没有这些问题了。





下载本文
显示全文
专题