Oracle11g RAC在例項關閉後自動在啟動例項上歸檔

yangtingkun發表於2009-05-15

今天測試RAC環境歸檔的時候意外發現了這個問題,在11gRAC環境中,如果資料庫處於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

顯然這是一個兩節點11gRAC環境,下面檢查歸檔設定:

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部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-598279/,如需轉載,請註明出處,否則將追究法律責任。

相關文章