Oracle主庫、備庫redo日誌管理

官方參考:

How To Add/Increase The Size Of Redo Log Files In Rac Environment? (Doc ID 779306.1)

How To Maintain and/or Add Redo Logs (Doc ID 602066.1)

Example of How To Resize the Online Redo Logfiles (Doc ID 1035935.6)

How to Change The Location Of Redo Log Files (Doc ID 395062.1)

Online Redo Logs on Physical Standby (Doc ID 740675.1)

Handling ORL and SRL (Resize) on Primary and Physical Standby in Data Guard Environment (Doc ID 1532566.1)

1、添加日誌組以及日誌成員

日誌文件組,如果沒有使用OMF請指定日誌路徑,RAC環境下需要指定thread

ALTER DATABASE ADD LOGFILE [THREAD n] [GROUP n] (‘ORACLEBASE/oradata/u01/logn1.rdo,ORACLE_BASE/oradata/u01/logn1.rdo','ORACLE_BASE/oradata/u01/logn2.rdo’) SIZE mM;

添加standby 日誌組

alter database add standby logfile thread 1 group 11 ‘+FRA/acctdbw/onlinelog/redo11A.dbf’ size 1g;

添加日誌成員

ALTER DATABASE ADD LOGFILE MEMBER ‘ORACLEBASE/oradata/u01/logn1.rdoTOGROUP1,ORACLE_BASE/oradata/u01/logn1.rdo' TO GROUP 1, 'ORACLE_BASE/oradata/u01/logn2.rdo’ TO GROUP 2;

3、刪除日誌組或成員

注意:current redo log不能被刪除,路徑位置不對的也不能被刪除,庫中少於兩組日誌也不能被刪除。

所以,要先rename,然後clear生成日誌文件,這時候才能刪除非current的日誌。如果是current的日誌想在備庫刪除,必須在主庫做如下操作:

alter system switch logfile;

alter system archive log current; --RAC

alter system checkpoint;

3.1、日誌的重定位及重命名

刪除日誌的時候會經常發現日誌路徑不存在,主要是用了別的庫的控制文件。rename即可

select ‘alter database rename file ‘’’||member||’’’ to ‘’+FRA/acctdbw/onlinelog’||substr(member,instr(member,’/’,-1,1))||’’’;’ from v$logfile;

重定位及重命名的兩種方法:
添加一個新成員到日誌組,然後刪除一箇舊的成員
使用ALTER DATABASE RENAME FILE 命令(不區分歸檔與非歸檔模式)

複製聯機日誌文件到新路徑:ho cp
執行ALTER DATABASE RENAME FILE ‘’ TO ‘’

對於處於CURRENT狀態的需要改名且不切換的情況下,辦法是切換到MOUNT狀態下再執行上述操作
重命名或重定位之後建議立即備份控制文件

3.2、清空日誌文件組

ALTER DATABASE CLEAR LOGIFLE GROUP n;

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

–使用unarchived 避免歸檔

select ‘alter database clear logfile group ‘||group#||’;’ from v$logfile;

特別是用duplicate方式複製的備庫,日誌中殘留着主庫的日誌信息,刪除的時候會報日誌組中有沒有應用的日誌信息,需要應用,否則丟失數據。因爲是備庫,可以直接清空後再刪除。

3.3、刪除日誌成員

ALTER DATABASE DROP LOGFILE MEMBER ‘$ORACLE_BASE/oradata/u01/logn1.rdo’;

不能刪除組內的唯一一個成員

不能刪除處於active 和current 狀態組內的成員

刪除處於active 和current 狀態組內的成員,應使用日誌切換使其處於INACTIVE狀態後再刪除

對於組內如果一個成員爲NULL 值,一個爲INVALID,且組處入INACTIVE,僅能刪除INVALID狀態成員

刪除日誌成員,物理文件並沒有真正刪除,需要手動刪除

刪除日誌文件後,控制文件被更新

對於處於歸檔模式下的數據庫,刪除成員時確保日誌已被歸檔,查看v$log視圖獲得歸檔信息

3.4、刪除日誌組

ALTER DATABASE DROP LOGFILE GROUP n;
select ‘alter database drop logfile group ‘||group#||’;’ from v$logfile;

一個實例至少需要兩個聯機日誌文件組

活動或當前的日誌組不能被刪除;

組內成員狀態有NULL 值或INVALID狀態並存,組不可刪除;

日誌組被刪除後,物理文件需要手動刪除(對於非OMF);

5、刪除單實例數據庫多餘節點的日誌組

需要禁用其它節點,
禁用thread:

SQL>alter database disable thread 2;

強制設置檢查點間隔

ALTER SYSTEM SET FAST_START_MTTR_TARGET = n

5、歸檔管理

請參考MOS How To Enable Archive Logging In RAC Environment [ID 1186764.1]
http://blog.csdn.net/dbcommando/article/details/7925861

修改歸檔路徑和歸檔文件格式:
alter system set log_archive_dest_1='location=/u01/app/oracle/oradata/arch' scope=both;

rac環境開啓歸檔步驟:

(1)將該實例的cluster_database設置爲false

alter system set cluster_database=false scope=spfile sid='prod1';

(2)關閉所有訪問該數據庫的實例

srvctl stop database -d prod

(3)使用本地實例掛載數據庫

SQL>startup mount
(4)啓用存檔

SQL>alter database archivelog;

(5)將實例prod1的參數cluster_database設置爲true;

alter system set cluster_database=true scope=spfile sid='prod1';

(6)關閉本地實例

SQL>shutdown immediate;

(7)啓動所有實例

srrvctl start database -d prod

6、疑難日誌清理案例

現象如下,有兩個日誌組狀態爲CLEARING_CURRENT,日誌文件名稱只有磁盤組的名字,顯然不正常

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME 
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ --------- 
25 1 0 1073741824 512 2 NO CLEARING_CURRENT 1.3911E+13 23-APR-18 2.8147E+14 
6 1 0 1073741824 512 2 YES UNUSED 1.3911E+13 23-APR-18 1.3911E+13 23-APR-18 
1 1 0 1073741824 512 2 YES UNUSED 1.3911E+13 23-APR-18 1.3911E+13 23-APR-18 
2 1 0 1073741824 512 2 YES UNUSED 1.3911E+13 23-APR-18 1.3911E+13 23-APR-18 
5 1 0 1073741824 512 2 YES UNUSED 1.3911E+13 23-APR-18 1.3911E+13 23-APR-18 
32 2 0 1073741824 512 2 NO CLEARING_CURRENT 1.3911E+13 23-APR-18 2.8147E+14 
GROUP# STATUS TYPE MEMBER IS_ 
---------- ------- ------- ------------------------------------------------------------ --- 
1 ONLINE +DATA/gzspaydbw/onlinelog/group_1.2029.1006889263 NO 
6 ONLINE +FRA/gzspaydbw/onlinelog/group_6.429.1006889277 NO 
25 INVALID ONLINE +DATA NO 
25 INVALID ONLINE +FRA NO 
32 INVALID ONLINE +DATA NO 
32 INVALID ONLINE +FRA NO 

問題原因:出現這種問題原因一般是因爲啓用了日誌的OMF,自動創建日誌失敗導致。可能由於權限或者空間不足導致。
然後在主庫切換日誌,把備庫的日誌狀態切換爲非current狀態就可以正常處理日誌組了。

7、有adg備庫環境下擴大redo大小

本章節主要翻譯自mos文檔 Handling ORL and SRL (Resize) on Primary and Physical Standby in Data Guard Environment (Doc ID 1532566.1)

ORA-16401 and ORA-16055 reported in primary alert.log when redolog switch is over frequently (Doc ID 1243177.1)

主備庫環境下擴大redo大小需要按照先主庫後備庫的順序操作,如果先處理備庫很有可能會遇到redo日誌組刪除不掉的尷尬。

7.0、環境說明

案例:最大性能模式下,把主備庫的redo大小從50m擴大到100m。
主庫: prm11203
ADG備庫: std11203

目的:
redo日誌切換頻繁,alert日誌中出現ORA-16401和ORA-16055告警,
爲了減少日誌切換的頻率,改進主數據庫性能,現在需要把主備庫的日誌大小調大。

7.1、檢查主備庫信息

檢查主庫:

$sqlplus sys/<password> as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Tue Feb 26 10:41:27 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select status,instance_name,database_role from v$database,v$instance;

STATUS       INSTANCE_NAME    DATABASE_ROLE
------------ ---------------- ----------------
OPEN         prm11203         PRIMARY

SQL> select group#,sum(bytes/1024/1024)"Size in MB" from v$log group by group#;

    GROUP# Size in MB
---------- ----------
         1         50
         2         50
         3         50

SQL> select group#,sum(bytes/1024/1024)"Size in MB" from v$standby_log group by group#;

    GROUP# Size in MB
---------- ----------
         6         50
         4         50
         5         50
         7         50

檢查備庫:

$sqlplus sys/<password> as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Tue Feb 26 10:48:30 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select status,instance_name,database_role from v$database,v$Instance;

STATUS       INSTANCE_NAME    DATABASE_ROLE
------------ ---------------- ----------------
OPEN         std11203         PHYSICAL STANDBY

SQL> select group#, sum(bytes/1024/1024)"Size in MB" from v$log group by group#;

    GROUP# Size in MB
---------- ----------
         1         50
         2         50
         3         50

SQL> select group#,sum(bytes/1024/1024)"Size in MB" from v$standby_log group by group#;

    GROUP# Size in MB
---------- ----------
         6         50
         4         50
         5         50
         7         50
         
檢查參數standby_file_management,在備庫上此參數需要設置爲manual才能添加刪除日誌組。
SQL> show parameter standby_file_management

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management              string      AUTO

SQL> alter system set standby_file_management=manual;

System altered.

SQL> show parameter standby_file_management

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management              string      MANUAL

7.2、主庫上擴展日誌操作

檢查日誌狀態,inactive狀態的可以直接刪除,current和active狀態的需要切換日誌,直到該日誌組變成inactive才能操作。

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 INACTIVE
         3 CURRENT

每刪除一個50M日誌組,緊接着再添加1組100M的,啓用OMF情況下,可以不用指定路徑,如下:

SQL> alter database drop logfile group 1;
SQL> alter database add logfile group 1 size 100M;
SQL> alter database drop logfile group 2;
SQL> alter database add logfile group 2 size 100M;

對於current狀態的第三組日誌,需要切換爲inactive狀態才能操作:

SQL> alter system switch logfile;

System altered.

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 UNUSED
         3 ACTIVE

SQL> alter system switch logfile;

System altered.

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 ACTIVE
         2 CURRENT
         3 ACTIVE

SQL> alter system checkpoint;

System altered.

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 CURRENT
         3 INACTIVE
SQL> alter database drop logfile group 3;

Database altered.

SQL> alter database add logfile group 3 size 100M;

Database altered.

下面開始處理主庫上面的standby redo log:

SQL> select group#,sum(bytes/1024/1024)"size in MB" from v$standby_log group by group#;

GROUP# size in MB
---------- ----------
6 50
4 50
5 50
7 50

SQL> select group#,status from v$standby_log;

GROUP# STATUS
---------- ----------
4 UNASSIGNED
5 UNASSIGNED
6 UNASSIGNED
7 UNASSIGNED

SQL> alter database drop standby logfile group 4;
SQL> alter database drop standby logfile group 5;
SQL> alter database drop standby logfile group 6;
SQL> alter database drop standby logfile group 7;
SQL> alter database add standby logfile group 4 size 100M;
SQL> alter database add standby logfile group 5 size 100M;
SQL> alter database add standby logfile group 6 size 100M;
SQL> alter database add standby logfile group 7 size 100M;

7.3、擴展備庫的日誌大小

檢查日誌狀態,並關閉MRP進程

SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
1 CURRENT
3 CLEARING
2 CLEARING

SQL> alter database recover managed standby database cancel;

處理clearing狀態的日誌組:

SQL> alter database clear logfile group 2;

Database altered.

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database add logfile group 2 size 100M;

Database altered.

SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
1 CURRENT
3 CLEARING
2 UNUSED

SQL> alter database clear logfile group 3;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.

SQL> alter database add logfile group 3 size 100M;

Database altered.

處理處於current狀態的日誌組1:

回到主庫,切換日誌組:
alter system switch logfile;
備庫上檢查日誌組1的狀態,直到爲clearing狀態爲止。
最後,按照上面方式刪除:
SQL> alter database clear logfile group 1;

Database altered.

SQL> alter database drop logfile group 1;

Database altered.

SQL> alter database add logfile group 1 size 100M;

處理備庫上面的standby redo log:

SQL> select group#,sum(bytes/1024/1024)"size in MB" from v$standby_log group by group#;

GROUP# size in MB
---------- ----------
4 50
5 50
6 50
7 50

SQL> select group#,status from v$standby_log;

GROUP# STATUS
---------- ----------
4 ACTIVE
5 UNASSIGNED
6 UNASSIGNED
7 UNASSIGNED
和主庫上的處理方式一致:
SQL> alter database drop standby logfile group 4;
SQL> alter database drop standby logfile group 5;
SQL> alter database drop standby logfile group 6;
SQL> alter database drop standby logfile group 7;
SQL> alter database add standby logfile group 4 size 100M;
SQL> alter database add standby logfile group 5 size 100M;
SQL> alter database add standby logfile group 6 size 100M;
SQL> alter database add standby logfile group 7 size 100M;

最後,恢復備庫日誌應用:

SQL> alter system set standby_file_management=auto;

System altered.

SQL> alter database recover managed standby database disconnect from session using current logfile;

Database altered.

SQL> select process,status,sequence# from v$managed_standby;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章