RAC環境下的redo日誌組重建

comebackdog發表於2012-03-08

os:RHES 4.6
db:10.2.0.4.0

參考文章
http://blog.csdn.net/rulev5/article/details/7164548
查詢redo日誌的輪換情況

rac環境下使用如下語句(例項1,如果查詢其他例項修改a.thread#=1這裡就好了):
   
select b.recid, 
to_char(b.first_time, 'dd-mon-yy hh24:mi:ss') start_time, 
a.recid, 
to_char(a.first_time, 'dd-mon-yy hh24:mi:ss') end_time, 
round(((a.first_time - b.first_time) * 25) * 60, 2) minutes 
from v$log_history a, v$log_history b 
where a.recid = b.recid + 1 and   a.thread#=b.thread# and a.thread#=1 
order by a.first_time desc;          

查詢結果(擷取一部分切換較頻繁的時段)

  RECID START_TIME            RECID END_TIME             MINUTES
---------- ----------------------- ---------- ----------------------- ----------
    185765 07-3月 -12 19:42:20           185766 07-3月 -12 19:42:26          .1
    185764 07-3月 -12 19:42:14           185765 07-3月 -12 19:42:20          .1
    185761 07-3月 -12 19:42:07           185762 07-3月 -12 19:42:11         .07
    185760 07-3月 -12 19:42:02           185761 07-3月 -12 19:42:07         .09
    185757 07-3月 -12 19:41:51           185758 07-3月 -12 19:41:57          .1
    185756 07-3月 -12 19:41:48           185757 07-3月 -12 19:41:51         .05
    185753 07-3月 -12 19:41:40           185754 07-3月 -12 19:41:46          .1
    185752 07-3月 -12 19:41:35           185753 07-3月 -12 19:41:40         .09
    185751 07-3月 -12 19:41:29           185752 07-3月 -12 19:41:35          .1
    185748 07-3月 -12 19:41:22           185749 07-3月 -12 19:41:25         .05
    185747 07-3月 -12 19:41:16           185748 07-3月 -12 19:41:22          .1
    185744 07-3月 -12 19:41:05           185745 07-3月 -12 19:41:11          .1
    185743 07-3月 -12 19:41:02           185744 07-3月 -12 19:41:05         .05
    185740 07-3月 -12 19:40:53           185741 07-3月 -12 19:40:59          .1
    185739 07-3月 -12 19:40:47           185740 07-3月 -12 19:40:53          .1
    185736 07-3月 -12 19:40:39           185737 07-3月 -12 19:40:42         .05
    185735 07-3月 -12 19:40:36           185736 07-3月 -12 19:40:39         .05
    185734 07-3月 -12 19:40:31           185735 07-3月 -12 19:40:36         .09
    185731 07-3月 -12 19:40:20           185732 07-3月 -12 19:40:25         .09
    185730 07-3月 -12 19:40:13           185731 07-3月 -12 19:40:20         .12
    185727 07-3月 -12 19:40:05           185728 07-3月 -12 19:40:10         .09
    185726 07-3月 -12 19:40:00           185727 07-3月 -12 19:40:05         .09
    185725 07-3月 -12 19:39:53           185726 07-3月 -12 19:40:00         .12
    185722 07-3月 -12 19:39:49           185723 07-3月 -12 19:39:51         .03
    185721 07-3月 -12 19:39:44           185722 07-3月 -12 19:39:49         .09
    185718 07-3月 -12 19:39:34           185719 07-3月 -12 19:39:39         .09
    185717 07-3月 -12 19:39:31           185718 07-3月 -12 19:39:34         .05
    185714 07-3月 -12 19:39:24           185715 07-3月 -12 19:39:29         .09
    185713 07-3月 -12 19:39:19           185714 07-3月 -12 19:39:24         .09
    185710 07-3月 -12 19:39:09           185711 07-3月 -12 19:39:13         .07
    185709 07-3月 -12 19:39:06           185710 07-3月 -12 19:39:09         .05
   
這個時間段內平均不到每分鐘就有1次切換,redo log切換太過頻繁。
檢查當前日誌組

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1       90065   52428800         1 YES ACTIVE           9.7016E+12 07-3月 -12
     2        1       90066   52428800         1 NO  CURRENT           9.7016E+12 07-3月 -12
     3        2       95453   52428800         1 YES INACTIVE           9.7016E+12 07-3月 -12
     4        2       95455   52428800         1 YES ACTIVE           9.7016E+12 07-3月 -12
     5        2       95452  104857600         1 YES INACTIVE           9.7016E+12 07-3月 -12
     6        2       95456  104857600         1 NO  CURRENT           9.7016E+12 07-3月 -12
     7        2       95454  104857600         1 YES ACTIVE           9.7016E+12 07-3月 -12
     8        1       90063  104857600         1 YES INACTIVE           9.7016E+12 07-3月 -12
     9        1       90064  104857600         1 YES ACTIVE           9.7016E+12 07-3月 -12
    10        1       90062  104857600         1 YES INACTIVE           9.7016E+12 07-3月 -12
   
一共有10個日誌組,每個組1個成員,4個50M和6個100M。
按照平均每0.5分鐘(高峰期,其實看到的切換時間更短,我暫取0.5分這個值)切換一次50M的redo log,
平均一分鐘會寫入100M(50/0.5)的redo,如果要半小時切換一次redo log就要求redo log大小為30×100M=3000M約3G。
這個rodo檔案太大了,先增加到500M即平均5分鐘切換一次,執行觀察一段時間,新增加8個redo組每組兩個成員各500M被刪除原有的日誌組。

檢視當前日誌檔案位置
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                                              IS_
---------- ------- ------- ----------------------------------------------------------------
        2               ONLINE   +DATA01/zjcsc/onlinelog/group_2.262.729380855                            NO
        1               ONLINE   +DATA01/zjcsc/onlinelog/group_1.261.729380855                            NO
        3               ONLINE   +DATA01/zjcsc/onlinelog/group_3.265.729380935                            NO
        4               ONLINE   +DATA01/zjcsc/onlinelog/group_4.266.729380935                            NO
        5               ONLINE   +DATA01/zjcsc/onlinelog/group_5.315.729393001                            NO
        6               ONLINE   +DATA01/zjcsc/onlinelog/group_6.316.729393021                            NO
        7               ONLINE   +DATA01/zjcsc/onlinelog/group_7.317.729393041                            NO
        8               ONLINE   +DATA01/zjcsc/onlinelog/group_8.318.729393053                            NO
        9               ONLINE   +DATA01/zjcsc/onlinelog/group_9.319.729393091                            NO
       10               ONLINE   +DATA01/zjcsc/onlinelog/group_10.320.729393109                        NO

10 rows selected.


保險起見先測試了下:

在asm裡指定檔名建立redo日誌組

SQL> alter database add logfile thread 1 group 11 ('+DATA01/zjcsc/onlinelog/group_11a')size 50M;

Database altered.

SQL> select name,state,type,total_mb,free_mb,usable_file_mb,offline_disks from v$asm_diskgroup;

NAME                   STATE       TYPE     TOTAL_MB    FREE_MB USABLE_FILE_MB OFFLINE_DISKS
------------------------------ ----------- ------ ---------- ---------- -------------- -------------
DATA01                   CONNECTED   EXTERN    1126400     106255     106255           0


刪除該組後發現,asm的空間並未釋放,因為建立時候指定檔名後再刪除時不會刪除該檔案,會保留在asm裡。
SQL> alter database drop logfile group 11;

Database altered.

SQL> select name,state,type,total_mb,free_mb,usable_file_mb,offline_disks from v$asm_diskgroup;

NAME                   STATE       TYPE     TOTAL_MB    FREE_MB USABLE_FILE_MB OFFLINE_DISKS
------------------------------ ----------- ------ ---------- ---------- -------------- -------------
DATA01                   CONNECTED   EXTERN    1126400     106255     106255           0


這是asm特性造成的,所有不建議自己指定檔名。
還是得用OMF的方式來新增redo日誌組,要怎麼做呢?
這樣做就好了:

新增日誌組group11,裡面有一個成員
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 11 ('+DATA01') SIZE 50M;
新增一個成員在日誌組group11裡
ALTER DATABASE ADD LOGFILE MEMBER '+DATA01' TO GROUP 11;
刪除這個日誌組的一個成員
查詢到該成員的檔名後刪除
ALTER DATABASE DROP LOGFILE MEMBER '+DATA01/zjcsc/onlinelog/group_11.390.777314119';
刪除整個日誌組
alter database drop logfile group 11;

新增日誌組group11,裡面有兩個成員
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 11 ('+DATA01', '+DATA01') SIZE 50M;
刪除整個日誌組
alter database drop logfile group 11;


正式操作:
準備:
檢查asm空間大小
SQL> select name,state,type,total_mb,free_mb,usable_file_mb,offline_disks from v$asm_diskgroup;

NAME                   STATE       TYPE     TOTAL_MB    FREE_MB USABLE_FILE_MB OFFLINE_DISKS
------------------------------ ----------- ------ ---------- ---------- -------------- -------------
DATA01                   CONNECTED   EXTERN    1126400     106255     106255           0

1、新增日誌組group11,兩個成員,給例項1.
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 11 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.

2、新增日誌組group12,兩個成員,給例項2.
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 12 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.

####################################################################
##這裡強調一下,THREAD 2和THREAD 1是指這個日誌組要指定給那個例項,##
##1,2為例項號,RAC環境下必須為每個日誌組指定他們的例項。         ## 
####################################################################
3、檢查日誌情況

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1       90388   52428800         1 YES INACTIVE           9.7016E+12 08-3月 -12
     2        1       90389   52428800         1 YES INACTIVE           9.7016E+12 08-3月 -12
     3        2       95683   52428800         1 YES INACTIVE           9.7016E+12 08-3月 -12
     4        2       95685   52428800         1 NO  CURRENT           9.7016E+12 08-3月 -12
     5        2       95682  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     6        2       95681  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     7        2       95684  104857600         1 YES ACTIVE           9.7016E+12 08-3月 -12
     8        1       90386  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     9        1       90387  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
    10        1       90390  104857600         1 NO  CURRENT           9.7016E+12 08-3月 -12
    11        1           0  524288000         2 YES UNUSED            0
    12        2           0  524288000         2 YES UNUSED            0
   
4、刪除日誌組group1和group3(按照例項分別刪除)

SQL> alter database drop logfile group 1;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     2        1       90389   52428800         1 YES INACTIVE           9.7016E+12 08-3月 -12
     4        2       95685   52428800         1 YES ACTIVE           9.7016E+12 08-3月 -12
     5        2       95682  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     6        2       95681  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     7        2       95684  104857600         1 YES ACTIVE           9.7016E+12 08-3月 -12
     8        1       90386  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     9        1       90387  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
    10        1       90390  104857600         1 YES ACTIVE           9.7016E+12 08-3月 -12
    11        1       90391  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
    12        2       95686  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
   
5、重建日誌組group1,兩個成員,給例項1.
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 1 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.
6、重建日誌組group3,兩個成員,給例項2.
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 3 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.
7、檢查日誌情況
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1           0  524288000         2 YES UNUSED            0
     2        1       90389   52428800         1 YES INACTIVE           9.7016E+12 08-3月 -12
     3        2           0  524288000         2 YES UNUSED            0
     4        2       95685   52428800         1 YES INACTIVE           9.7016E+12 08-3月 -12
     5        2       95682  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     6        2       95681  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     7        2       95684  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     8        1       90386  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     9        1       90387  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
    10        1       90390  104857600         1 YES ACTIVE           9.7016E+12 08-3月 -12
    11        1       90391  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
    12        2       95686  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12

   
8、刪除日誌組group2和group4.

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database drop logfile group 4;

Database altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1           0  524288000         2 YES UNUSED            0
     3        2           0  524288000         2 YES UNUSED            0
     5        2       95682  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     6        2       95681  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     7        2       95684  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     8        1       90386  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     9        1       90387  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
    10        1       90390  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
    11        1       90391  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
    12        2       95686  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
   
9、重建日誌組group2,兩個成員,給例項1.
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 2 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.
10、重建日誌組group4,兩個成員,給例項2
SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 4 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.

11、檢查日誌狀態
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1           0  524288000         2 YES UNUSED            0
     2        1           0  524288000         2 YES UNUSED            0
     3        2           0  524288000         2 YES UNUSED            0
     4        2           0  524288000         2 YES UNUSED            0
     5        2       95682  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     6        2       95681  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     7        2       95684  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     8        1       90386  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
     9        1       90387  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
    10        1       90390  104857600         1 YES INACTIVE           9.7016E+12 08-3月 -12
    11        1       90391  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
    12        2       95686  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12

12 rows selected.

12、刪除日誌組5,6,7,8,9,10
SQL> alter database drop logfile group 5;

Database altered.
.
.
.
其他內容省略
SQL> alter database drop logfile group 10;

Database altered.



8 rows selected.

13、重建日誌組5,7,6,8
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 5 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 7 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 6 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 8 ('+DATA01', '+DATA01') SIZE 500M;

Database altered.

14、查詢日誌狀態
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1           0  524288000         2 YES UNUSED            0
     2        1           0  524288000         2 YES UNUSED            0
     3        2           0  524288000         2 YES UNUSED            0
     4        2           0  524288000         2 YES UNUSED            0
     5        1           0  524288000         2 YES UNUSED            0
     6        1           0  524288000         2 YES UNUSED            0
     7        2           0  524288000         2 YES UNUSED            0
     8        2           0  524288000         2 YES UNUSED            0
    11        1       90391  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
    12        2       95686  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
   
   
15、日誌切換

分別登入兩個例項執行一下操作:

切換redo日誌到下一個日誌組
SQL> alter system switch logfile;

System altered.

更新檢查點,講redo log的內容寫入資料檔案,歸檔redo log。
SQL> alter system checkpoint;

System altered.


SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1       90392  524288000         2 YES ACTIVE           9.7016E+12 08-3月 -12
     2        1       90393  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
     3        2       95687  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
     4        2           0  524288000         2 YES UNUSED            0
     5        1           0  524288000         2 YES UNUSED            0
     6        1           0  524288000         2 YES UNUSED            0
     7        2           0  524288000         2 YES UNUSED            0
     8        2           0  524288000         2 YES UNUSED            0
    11        1       90391  524288000         2 YES INACTIVE           9.7016E+12 08-3月 -12
    12        2       95686  524288000         2 YES INACTIVE           9.7016E+12 08-3月 -12

10 rows selected.


ok日誌切換正常,檢查點正常。

16、刪除日誌組group11和group12
SQL> alter database drop logfile group 11;

Database altered.

SQL> alter database drop logfile group 12;

Database altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
     1        1       90392  524288000         2 YES ACTIVE           9.7016E+12 08-3月 -12
     2        1       90393  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
     3        2       95687  524288000         2 NO  CURRENT           9.7016E+12 08-3月 -12
     4        2           0  524288000         2 YES UNUSED            0
     5        1           0  524288000         2 YES UNUSED            0
     6        1           0  524288000         2 YES UNUSED            0
     7        2           0  524288000         2 YES UNUSED            0
     8        2           0  524288000         2 YES UNUSED            0

8 rows selected.

17、至此完成redo日誌組的重建工作,每個例項各有4個日誌組,每組2個成員,各500M。
檢查日誌檔案情況:
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                IS_
---------- ------- ------- ---------------------------------------------------------------------------------------------------- ---
     2       ONLINE  +DATA01/zjcsc/onlinelog/group_2.266.777378229                            NO
     1       ONLINE  +DATA01/zjcsc/onlinelog/group_1.265.777377921                            NO
     1       ONLINE  +DATA01/zjcsc/onlinelog/group_1.261.777377921                            NO
     2       ONLINE  +DATA01/zjcsc/onlinelog/group_2.262.777378231                            NO
     5       ONLINE  +DATA01/zjcsc/onlinelog/group_5.318.777378469                            NO
     5       ONLINE  +DATA01/zjcsc/onlinelog/group_5.317.777378471                            NO
     7       ONLINE  +DATA01/zjcsc/onlinelog/group_7.316.777378499                            NO
     7       ONLINE  +DATA01/zjcsc/onlinelog/group_7.315.777378501                            NO
     6       ONLINE  +DATA01/zjcsc/onlinelog/group_6.320.777378983                            NO
     6       ONLINE  +DATA01/zjcsc/onlinelog/group_6.319.777378983                            NO
     3       ONLINE  +DATA01/zjcsc/onlinelog/group_3.394.777377939                            NO
     3       ONLINE  +DATA01/zjcsc/onlinelog/group_3.395.777377941                            NO
     4       ONLINE  +DATA01/zjcsc/onlinelog/group_4.396.777378245                            NO
     4       ONLINE  +DATA01/zjcsc/onlinelog/group_4.397.777378247                            NO
     8       ONLINE  +DATA01/zjcsc/onlinelog/group_8.398.777378995                            NO
     8       ONLINE  +DATA01/zjcsc/onlinelog/group_8.399.777378997                            NO
檢查下asm使用情況,使用了8個G,減掉原有的的800M,共使用了7226M的asm空間
SQL> select name,state,type,total_mb,free_mb,usable_file_mb,offline_disks from v$asm_diskgroup;

NAME                   STATE       TYPE     TOTAL_MB    FREE_MB USABLE_FILE_MB OFFLINE_DISKS
------------------------------ ----------- ------ ---------- ---------- -------------- -------------
DATA01                   CONNECTED   EXTERN    1126400      99029      99029           0

注意:在刪除日誌組的時候務必保持當前每個例項必須有2個日誌組存在,這樣才能完成正常的切換。
後續:
注意觀察相同時段內的日誌切換情況。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20575781/viewspace-718047/,如需轉載,請註明出處,否則將追究法律責任。

相關文章