今天测试RAC环境归档的时候意外发现了这个问题,在11g的RAC环境中,如果数据库处于ARCHIVELOG模式,如果一个节点关闭,则另外的节点自动完成关闭节点的日志切换,并将ARCHIVELOG归档到本地节点。
检查数据库信息:
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
test1
SQL> select instance_name from gv$instance;
INSTANCE_NAME
----------------
test1
test2
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Solaris: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
显然这是一个两节点11g的RAC环境,下面检查归档设置:
SQL> select name, log_mode from v$database;
NAME LOG_MODE
------------------------------------------------------------ ------------
TEST ARCHIVELOG
SQL> select inst_id, name, value
2 from gv$parameter
3 where name = 'log_archive_dest_1';
INST_ID NAME VALUE
---------- ----------------------- ------------------------------------------------
1 log_archive_dest_1 LOCATION=/data/oracle/oradata/test/archivelog
2 log_archive_dest_1 LOCATION=/data/oracle/oradata/test/archivelog
检查当前的日志信息和归档信息:
SQL> select group#, thread#, sequence#, status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
1 1 13 INACTIVE
2 1 14 CURRENT
3 1 12 INACTIVE
4 2 9 INACTIVE
5 2 10 INACTIVE
6 2 11 CURRENT
已选择6行。
SQL> select thread#, sequence#, name from v$archived_log;
THREAD# SEQUENCE# NAME
---------- ---------- -----------------------
2 6
1 6
1 7
1 8
2 7
2 8
1 9
2 9
1 10
2 10
1 11
1 12
1 13
已选择13行。
下面执行归档:
SQL> alter system archive log current;
系统已更改。
SQL> select group#, thread#, sequence#, status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
1 1 13 INACTIVE
2 1 14 ACTIVE
3 1 15 CURRENT
4 2 12 CURRENT
5 2 10 INACTIVE
6 2 11 ACTIVE
已选择6行。
SQL> select thread#, sequence#, name from v$archived_log where name is not null;
THREAD# SEQUENCE# NAME
---------- ---------- ------------------------------------------------------------
1 14 /data/oracle/oradata/test/archivelog/1_14_684067893.dbf
2 11 /data/oracle/oradata/test/archivelog/2_11_684067893.dbf
SQL> host ls -l /data/oracle/oradata/test/archivelog
total 3680
-rw-r----- 1 oracle oinstall 1868288 May 15 17:09 1_14_684067893.dbf
SQL> host ssh 172.0.2.63 ls -l /data/oracle/oradata/test/archivelog
Enter passphrase for key '/export/home/oracle/.ssh/id_rsa':
total 3936
-rw-r----- 1 oracle oinstall 2006016 May 15 17:13 2_11_684067893.dbf
执行ALTER SYSTEM ARCHIVE LOG CURRENT会使得两个实例分别归档各个线程的REDO文件,通过查询两个节点服务器上对应的目录也可以看到,当前实例归档了线程1对应的REDO,而远端实例归档了线程2对应的REDO日志。
现在将实例1关闭:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host
$ ls -l /data/oracle/oradata/test/archivelog
total 3680
-rw-r----- 1 oracle oinstall 1868288 May 15 17:09 1_14_684067893.dbf
$ ssh 172.0.2.63 ls -l /data/oracle/oradata/test/archivelog
Enter passphrase for key '/export/home/oracle/.ssh/id_rsa':
total 4028
-rw-r----- 1 oracle oinstall 47104 May 15 17:21 1_15_684067893.dbf
-rw-r----- 1 oracle oinstall 2006016 May 15 17:13 2_11_684067893.dbf
可以看到,实例1关闭后,实例1对应的当前日志自动归档到远端节点上。
下面启动实例1:
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 776896512 bytes
Fixed Size 2098776 bytes
Variable Size 229300648 bytes
Database Buffers 541065216 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。
数据库已经打开。
SQL> select thread#, sequence#, name from v$archived_log where name is not null;
THREAD# SEQUENCE# NAME
---------- ---------- ------------------------------------------------------------
1 14 /data/oracle/oradata/test/archivelog/1_14_684067893.dbf
2 11 /data/oracle/oradata/test/archivelog/2_11_684067893.dbf
1 15 /data/oracle/oradata/test/archivelog/1_15_684067893.dbf
SQL> select group#, thread#, sequence#, status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
1 1 16 CURRENT
2 1 14 INACTIVE
3 1 15 INACTIVE
4 2 12 CURRENT
5 2 10 INACTIVE
6 2 11 INACTIVE
已选择6行。
下面关闭实例2:
SQL> host srvctl stop inst -d test -i test2
SQL> select thread#, sequence#, name from v$archived_log where name is not null;
THREAD# SEQUENCE# NAME
---------- ---------- ------------------------------------------------------------
1 14 /data/oracle/oradata/test/archivelog/1_14_684067893.dbf
2 11 /data/oracle/oradata/test/archivelog/2_11_684067893.dbf
1 15 /data/oracle/oradata/test/archivelog/1_15_684067893.dbf
2 12 /data/oracle/oradata/test/archivelog/2_12_684067893.dbf
SQL> select group#, thread#, sequence#, status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
1 1 16 CURRENT
2 1 14 INACTIVE
3 1 15 INACTIVE
4 2 12 ACTIVE
5 2 10 INACTIVE
6 2 11 INACTIVE
已选择6行。
SQL> host ls -l /data/oracle/oradata/test/archivelog
total 3762
-rw-r----- 1 oracle oinstall 1868288 May 15 17:09 1_14_684067893.dbf
-rw-r----- 1 oracle oinstall 41472 May 15 17:21 2_12_684067893.dbf
实例2的归档日志在实例2关闭后也归档到了实例1的节点上。
这个特性在10g中还没有,Oracle实现这个功能是为了更安全的实现备份,另外STANDBY环境也可以因此而获益,避免STANDBY一直等待主节点关闭实例对应的归档日志,而无法继续应用新的日志信息。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-598279/ ,如需转载,请注明出处,否则将追究法律责任。