有人在我的BLOG上提出问题,为什么有的时候发现一个实例所在的服务器上包含了另一个服务器的归档日志。
其实很多中情况都可能造成这个问题的产生。
最简单的情况,一个节点执行了ALTER SYSTEM ARCHIVE LOG CURRENT命令:
SQL> SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG;
GROUP# THREAD# SEQUENCE# ARCHIV STATUS
---------- ---------- ---------- ------ --------------------
1 1 672 NO CURRENT
2 1 671 YES INACTIVE
3 2 441 YES INACTIVE
4 2 442 NO CURRENT
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, THREAD# FROM V$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME THREAD#
--------------- ---------------- ----------
1 testrac1 1
SQL> COL NAME FORMAT A30
SQL> COL VALUE FORMAT A30
SQL> SELECT INST_ID, NAME, SUBSTR(VALUE, 1, 26) VALUE
2 FROM GV$PARAMETER
3 WHERE NAME = 'log_archive_dest_1';
INST_ID NAME VALUE
---------- ------------------------------ ------------------------------
1 log_archive_dest_1 LOCATION=/data1/archivelog
2 log_archive_dest_1 LOCATION=/data1/archivelog
SQL> HOST ls -l /data1/archivelog
total 0
SQL> HOST rsh 172.25.198.223 ls -l /data1/archivelog
total 0
下面执行切换ARCHIVE LOG CURRENT的操作:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
系统已更改。
SQL> HOST ls -l /data1/archivelog
total 102
-rw-r----- 1 oracle oinstall 51712 Jan 5 00:23 1_672_626291662.dbf
SQL> HOST rsh 172.25.198.223 ls -l /data1/archivelog
total 288
-rw-rw---- 1 oracle oinstall 137728 Jan 5 00:25 2_442_626291662.dbf
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
系统已更改。
SQL> HOST ls -l /data1/archivelog
total 128
-rw-r----- 1 oracle oinstall 51712 Jan 5 00:23 1_672_626291662.dbf
-rw-r----- 1 oracle oinstall 12800 Jan 5 00:25 1_673_626291662.dbf
SQL> HOST rsh 172.25.198.223 ls -l /data1/archivelog
total 354
-rw-rw---- 1 oracle oinstall 137728 Jan 5 00:25 2_442_626291662.dbf
-rw-rw---- 1 oracle oinstall 33792 Jan 5 00:26 2_443_626291662.dbf
默认情况下,执行ALTER SYSTEM ARCHIVE LOG CURRENT命令时,各个实例归档当前实例加载的日志。
而如果将一个实例关闭,再次执行同样的命令:
SQL> HOST srvctl stop inst -d testrac -i testrac2
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
系统已更改。
SQL> HOST ls -l /data1/archivelog
total 902
-rw-r----- 1 oracle oinstall 51712 Jan 5 00:23 1_672_626291662.dbf
-rw-r----- 1 oracle oinstall 12800 Jan 5 00:25 1_673_626291662.dbf
-rw-r----- 1 oracle oinstall 68096 Jan 5 00:31 1_674_626291662.dbf
-rw-r----- 1 oracle oinstall 312320 Jan 5 00:31 2_444_626291662.dbf
SQL> HOST rsh 172.25.198.223 ls -l /data1/archivelog
total 354
-rw-rw---- 1 oracle oinstall 137728 Jan 5 00:25 2_442_626291662.dbf
-rw-rw---- 1 oracle oinstall 33792 Jan 5 00:26 2_443_626291662.dbf
这时,当前实例归档当前加载日志的同时,也会将关闭实例的日志归档到本地。
SQL> HOST srvctl start inst -d testrac -i testrac2
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
系统已更改。
SQL> HOST ls -l /data1/archivelog
total 1142
-rw-r----- 1 oracle oinstall 51712 Jan 5 00:23 1_672_626291662.dbf
-rw-r----- 1 oracle oinstall 12800 Jan 5 00:25 1_673_626291662.dbf
-rw-r----- 1 oracle oinstall 68096 Jan 5 00:31 1_674_626291662.dbf
-rw-r----- 1 oracle oinstall 112640 Jan 5 00:37 1_675_626291662.dbf
-rw-r----- 1 oracle oinstall 312320 Jan 5 00:31 2_444_626291662.dbf
SQL> HOST rsh 172.25.198.223 ls -l /data1/archivelog
total 676
-rw-rw---- 1 oracle oinstall 137728 Jan 5 00:25 2_442_626291662.dbf
-rw-rw---- 1 oracle oinstall 33792 Jan 5 00:26 2_443_626291662.dbf
-rw-rw---- 1 oracle oinstall 1024 Jan 5 00:37 2_445_626291662.dbf
-rw-rw---- 1 oracle oinstall 153600 Jan 5 00:39 2_446_626291662.dbf
当关闭实例恢复后,执行命令后,一般会恢复各个实例归档各自加载日志的情况。
另一种情况是备份、恢复造成的。
对于RESTORE命令就不想多少了,备份命令也可能造成本地实例归档其他实例日志的情况:
SQL> HOST
$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期六 1月 5 00:42:51 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: TESTRAC (DBID=4291216984)
RMAN> configure channel 1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
使用目标数据库控制文件替代恢复目录
旧的 RMAN 配置参数:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/data1/backup/%U' CONNECT '*';
新的 RMAN 配置参数:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/data1/backup/%U' CONNECT '*';
已成功存储新的 RMAN 配置参数
RMAN> configure channel 2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
旧的 RMAN 配置参数:
CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT '/data1/backup/%U' CONNECT '*';
新的 RMAN 配置参数:
CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT '/data1/backup/%U' CONNECT '*';
已成功存储新的 RMAN 配置参数
RMAN> configure default device type to disk;
旧的 RMAN 配置参数:
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
新的 RMAN 配置参数:
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
已成功存储新的 RMAN 配置参数
RMAN> backup archivelog all;
启动 backup 于 05-1月 -08
当前日志已存档
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=309 实例=testrac1 devtype=DISK
分配的通道: ORA_DISK_2
通道 ORA_DISK_2: sid=291 实例=testrac2 devtype=DISK
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =672 记录 ID=2336 时间戳=643163033
输入存档日志线程 =1 序列 =673 记录 ID=2341 时间戳=643163127
输入存档日志线程 =1 序列 =674 记录 ID=2345 时间戳=643163504
输入存档日志线程 =1 序列 =675 记录 ID=2350 时间戳=643163864
输入存档日志线程 =1 序列 =676 记录 ID=2354 时间戳=643164280
输入存档日志线程 =2 序列 =444 记录 ID=2344 时间戳=643163497
通道 ORA_DISK_1: 正在启动段 1 于 05-1月 -08
通道 ORA_DISK_2: 正在启动存档日志备份集
通道 ORA_DISK_2: 正在指定备份集中的存档日志
输入存档日志线程 =2 序列 =442 记录 ID=2337 时间戳=643163120
输入存档日志线程 =2 序列 =443 记录 ID=2340 时间戳=643163213
输入存档日志线程 =2 序列 =445 记录 ID=2348 时间戳=643163878
输入存档日志线程 =2 序列 =446 记录 ID=2351 时间戳=643163951
通道 ORA_DISK_2: 正在启动段 1 于 05-1月 -08
通道 ORA_DISK_1: 已完成段 1 于 05-1月 -08
段句柄=/data1/backup/1cj5bq3v_1_1 标记=TAG20080105T004446 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
通道 ORA_DISK_2: 已完成段 1 于 05-1月 -08
段句柄=/data1/backup/1dj5bq6m_1_1 标记=TAG20080105T004446 注释=NONE
通道 ORA_DISK_2: 备份集已完成, 经过时间:00:00:02
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =2 序列 =447 记录 ID=2355 时间戳=643164283
通道 ORA_DISK_1: 正在启动段 1 于 05-1月 -08
通道 ORA_DISK_1: 已完成段 1 于 05-1月 -08
段句柄=/data1/backup/1ej5bq41_1_1 标记=TAG20080105T004446 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 05-1月 -08
启动 Control File and SPFILE Autobackup 于 05-1月 -08
段 handle=/data/oracle/product/10.2/database/dbs/c-4291216984-20080105-02 comment=NONE
完成 Control File and SPFILE Autobackup 于 05-1月 -08
RMAN> exit
恢复管理器完成。
$ ls -l /data1/archivelog
total 1540
-rw-r----- 1 oracle oinstall 51712 Jan 5 00:23 1_672_626291662.dbf
-rw-r----- 1 oracle oinstall 12800 Jan 5 00:25 1_673_626291662.dbf
-rw-r----- 1 oracle oinstall 68096 Jan 5 00:31 1_674_626291662.dbf
-rw-r----- 1 oracle oinstall 112640 Jan 5 00:37 1_675_626291662.dbf
-rw-r----- 1 oracle oinstall 55808 Jan 5 00:44 1_676_626291662.dbf
-rw-r----- 1 oracle oinstall 312320 Jan 5 00:31 2_444_626291662.dbf
-rw-r----- 1 oracle oinstall 136192 Jan 5 00:44 2_447_626291662.dbf
$ rsh 172.25.198.223 ls -l /data1/archivelog
total 676
-rw-rw---- 1 oracle oinstall 137728 Jan 5 00:25 2_442_626291662.dbf
-rw-rw---- 1 oracle oinstall 33792 Jan 5 00:26 2_443_626291662.dbf
-rw-rw---- 1 oracle oinstall 1024 Jan 5 00:37 2_445_626291662.dbf
-rw-rw---- 1 oracle oinstall 153600 Jan 5 00:39 2_446_626291662.dbf
在上面的例子中,为了同时备份两个实例的归档,rman设置了两个CHANNEL,分别连接到不同的实例上执行备份操作。由于执行BACKUP ARCHIVE LOG操作,Oracle自动会执行一个ARCHIVE LOG CURRENT的命令,而这个命令是在当前的实例执行的。对于这种情况,所有实例的日志都会归档到本地。
从上面最后的ls命令可以看到,thread 2 sequence 447的归档已经在本地生成。
其实对于RAC来说,哪个实例加载哪个THREAD#不是固定的,完全可以互换两个实例所加载的日志THREAD。
$ exit
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
系统已更改。
SQL> HOST ls -l /data1/archivelog
total 1828
-rw-r----- 1 oracle oinstall 51712 Jan 5 00:23 1_672_626291662.dbf
-rw-r----- 1 oracle oinstall 12800 Jan 5 00:25 1_673_626291662.dbf
-rw-r----- 1 oracle oinstall 68096 Jan 5 00:31 1_674_626291662.dbf
-rw-r----- 1 oracle oinstall 112640 Jan 5 00:37 1_675_626291662.dbf
-rw-r----- 1 oracle oinstall 55808 Jan 5 00:44 1_676_626291662.dbf
-rw-r----- 1 oracle oinstall 136192 Jan 5 00:51 1_677_626291662.dbf
-rw-r----- 1 oracle oinstall 312320 Jan 5 00:31 2_444_626291662.dbf
-rw-r----- 1 oracle oinstall 136192 Jan 5 00:44 2_447_626291662.dbf
SQL> HOST rsh 172.25.198.223 ls -l /data1/archivelog
total 948
-rw-rw---- 1 oracle oinstall 137728 Jan 5 00:25 2_442_626291662.dbf
-rw-rw---- 1 oracle oinstall 33792 Jan 5 00:26 2_443_626291662.dbf
-rw-rw---- 1 oracle oinstall 1024 Jan 5 00:37 2_445_626291662.dbf
-rw-rw---- 1 oracle oinstall 153600 Jan 5 00:39 2_446_626291662.dbf
-rw-rw---- 1 oracle oinstall 124928 Jan 5 00:52 2_448_626291662.dbf
下面关闭数据库,修改初始化参数,使得当前实例加载THREAD 2的日志:
SQL> HOST srvctl stop db -d testrac
SQL> CREATE PFILE='/export/home/oracle/inittestrac1.ora' FROM SPFILE='+DISK/testrac/spfiletestrac.ora';
文件已创建。
将初始化参数inittestrac1.ora中的
testrac1.thread=2
testrac2.thread=1
改为
testrac1.thread=2
testrac2.thread=1
下面启动当前实例:
SQL> STARTUP PFILE=inittestrac1.ora
ORACLE 例程已经启动。
Total System Global Area 2147483648 bytes
Fixed Size 2031480 bytes
Variable Size 1056964744 bytes
Database Buffers 1073741824 bytes
Redo Buffers 14745600 bytes
数据库装载完毕。
数据库已经打开。
SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, THREAD# FROM V$INSTANCE;
INSTANCE_NUMBER INSTANCE_NAME THREAD#
--------------- ---------------- ----------
1 testrac1 2
SQL> SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- --------------------
1 1 678 NO CURRENT
2 1 677 YES INACTIVE
3 2 449 YES INACTIVE
4 2 450 NO CURRENT
SQL> ALTER SYSTEM SWITCH LOGFILE;
系统已更改。
SQL> SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- --------------------
1 1 678 YES INACTIVE
2 1 679 NO CURRENT
3 2 451 NO CURRENT
4 2 450 YES ACTIVE
SQL> HOST ls -l /data1/archivelog
total 3304
-rw-r----- 1 oracle oinstall 51712 Jan 5 00:23 1_672_626291662.dbf
-rw-r----- 1 oracle oinstall 12800 Jan 5 00:25 1_673_626291662.dbf
-rw-r----- 1 oracle oinstall 68096 Jan 5 00:31 1_674_626291662.dbf
-rw-r----- 1 oracle oinstall 112640 Jan 5 00:37 1_675_626291662.dbf
-rw-r----- 1 oracle oinstall 55808 Jan 5 00:44 1_676_626291662.dbf
-rw-r----- 1 oracle oinstall 136192 Jan 5 00:51 1_677_626291662.dbf
-rw-r----- 1 oracle oinstall 50688 Jan 5 01:12 1_678_626291662.dbf
-rw-r----- 1 oracle oinstall 312320 Jan 5 00:31 2_444_626291662.dbf
-rw-r----- 1 oracle oinstall 136192 Jan 5 00:44 2_447_626291662.dbf
-rw-r----- 1 oracle oinstall 354816 Jan 5 01:03 2_449_626291662.dbf
-rw-r----- 1 oracle oinstall 321024 Jan 5 01:12 2_450_626291662.dbf
由此可见,对于日志和实例其实并没有对应关系,因此在本地出现其他实例上的归档也是十分正常的情况。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-200426/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-200426/