RAC環境一個例項何時會歸檔另一個例項的日誌

yangtingkun發表於2008-03-05

有人在我的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章