RAC Archive log写入错误的节点

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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

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

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

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

测试环境

1
2
3
4
5
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[oracle@nascds14 ~]$ ls -l /u01/app/ database /dbs/ 
-rw-r ----- 1 oracle oinstall 9897472 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 9897472 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    <<<<<<<<<<<<<<node2的日志,产生在node1上
[oracle@nascds14 ~]$  date
Mon  Dec   1 09:56:01 CST 2014
$ sqlplus /  as  sysdba
Connected  to :
Oracle  Database  10g Enterprise Edition Release 10.2.0.5.0 - Production 
SQL> 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---

1
2
3
4
5
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---

1
SQL>  alter  system archive log  current ;

---node1---

1
2
3
4
5
6
7
8
9
10
[oracle@node111g archive_log]$ ls -al 2*
  
-rw ------- 1 oracle asmadmin 148992 12月 19 11:22 2_176_864642458.dbf
-rw ------- 1 oracle asmadmin 1024 12月 19 11:22 2_177_864642458.dbf <<<<<<<<<<<<<<node2的日志,产生在node1上
 
---node2---
[oracle@node211g archive_log]$ ls -ctrl
-rw ------- 1 oracle asmadmin 1024 12月 19 10:44 2_173_864642458.dbf
-rw ------- 1 oracle asmadmin 1872896 12月 19 11:18 2_174_864642458.dbf
-rw ------- 1 oracle asmadmin 15360 12月 19 11:18 2_175_864642458.dbf

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

spacer.gifwKiom1STq-bQ0-pjAA3qlGN7Y9w173.jpg


情景2

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

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

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

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

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

1
2
3
4
5
6
7
8
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生成结果

1
2
3
4
5
[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_864642458.dbf
-rw ------- 1 oracle asmadmin 1024 12月 19 10:37 2_131_864642458.dbf

node2查看archive log生成结果

1
2
3
4
5
6
7
8
9
10
11
12
[oracle@node211g archive_log]$ ls -ctrl
  
-rw ------- 1 oracle asmadmin 1024 12月 19 10:32 2_101_864642458.dbf
-rw ------- 1 oracle asmadmin 1024 12月 19 10:32 2_102_864642458.dbf
-rw ------- 1 oracle asmadmin 1024 12月 19 10:32 2_104_864642458.dbf <<<<<<<<<<<<<<archive log 103产生在node1上
-rw ------- 1 oracle asmadmin 269824 12月 19 10:33 2_105_864642458.dbf
-rw ------- 1 oracle asmadmin 5120 12月 19 10:33 2_106_864642458.dbf
......
-rw ------- 1 oracle asmadmin 1024 12月 19 10:37 2_129_864642458.dbf
-rw ------- 1 oracle asmadmin 1024 12月 19 10:37 2_130_864642458.dbf
-rw ------- 1 oracle asmadmin 1024 12月 19 10:37 2_132_864642458.dbf <<<<<<<<<<<<<<archive log 131
-rw ------- 1 oracle asmadmin 1024 12月 19 10:37 2_133_864642458.dbf

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

spacer.gif

wKioL1STrK2Qdn3fAA3qlGN7Y9w211.jpg


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











本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/1591689,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
8月前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之在DataWorks中设置了一个任务节点的调度时间,并将其发布到生产环境,但到了指定时间(例如17:30)却没有产生运行实例和相关日志如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
116 0
|
8月前
rac 节点驱逐
rac 节点驱逐
54 0
|
5月前
|
Oracle 关系型数据库
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
|
6月前
|
Oracle 关系型数据库
Log Archive Destinations to a Group
oracle 归档日志路径配置
40 1
|
6月前
PolarDB-SCC使用问题之线性Lamport时间戳如何保证强一致性
PolarDB-SCC使用问题之线性Lamport时间戳如何保证强一致性
|
canal 负载均衡 关系型数据库
Flink CDC如何获得增量binlog,可能是跟canal一样,伪装成从节点获取日志?
Flink CDC如何获得增量binlog,可能是跟canal一样,伪装成从节点获取日志?
173 1
|
Oracle 关系型数据库 数据库
RAC中,控制文件的快照文件必须能够被所有节点的数据实例访问到 ORA-00245
RMAN在使用控制文件备份的时候,备份开始点需要最新的检查点信息以及文件头信息。
120 0
|
CDN
CDN诊断工具与日志的作用——如何利用诊断工具进行问题分析(查看定位到的是否是cdn节点)
CDN诊断工具与日志的作用——如何利用诊断工具进行问题分析(查看定位到的是否是cdn节点)自制脑图
186 0
CDN诊断工具与日志的作用——如何利用诊断工具进行问题分析(查看定位到的是否是cdn节点)
|
Arthas 监控 Java
一个迷惑性很高的生产故障-Elasticsearch日志rotate导致节点CPU激增
Elasticsearch CPU很高的场景很常见,优化读写以及扩容即可解决问题。 如果只有一个节点CPU高,那可能的情况就比较多了,节点机器异常?读写不均匀?GC过高?forcemerge? 这里描述一个极具迷惑性的case。
538 0
一个迷惑性很高的生产故障-Elasticsearch日志rotate导致节点CPU激增
|
Oracle 关系型数据库
oracle rac 添加节点常用命令
rac 添加节点常用命令
98 0