Oracle 11g Dataguard環境下資料檔案、日誌檔案管理(下)

kunlunzhiying發表於2016-12-22

 

下面我們討論redo log的情況。

 

3online redo log情況——Primary

 

相對於data fileonline redo log的情況就略有不同。我們在實際運維環境中可能進行online redo log的調整,調整的出發點常常是從效能和可用性兩個出發點。注意:online redo log是當前資料庫生成的操作,而且是資料庫“自己”生成的。在standby端的online redo log,在redo apply過程中原則上是不會使用的。

 

從效能上,過小的日誌和過少的日誌組常常引起日誌相關的效能問題。在高redo log生成的場景下,無論是dbwr還是arch,可能在日誌切換覆蓋過程中被多次強制啟動,如果IO效率較差,可能還會引起資料庫整體的等待現象。可用性方面主要體現在日誌組成員上,控制檔案和online redo logOracle中採用映象冗餘進行管理的兩類檔案。在相同的日誌組中,我們建立多個member物件,目的是為了分散在多個儲存位置(磁碟),來防止單一日誌檔案損壞造成的故障。

 

我們先在Primary上進行日誌操作實驗。建立一個新的日誌組。

 

--OMF方式建立檔案

SQL> alter database add logfile group 7 size 10m;

Database altered

 

建立成功:

 

 

SQL> select group#, type, member from v$logfile;

 

    GROUP# TYPE    MEMBER

---------- ------- --------------------------------------------------------------------------------

         3 ONLINE  /u01/app/oradata/ORA11G/onlinelog/o1_mf_3_9mnjx4n0_.log

         (篇幅原因,有省略……

         7 ONLINE  /u01/app/oradata/ORA11G/onlinelog/o1_mf_7_9pclt1jy_.log

         7 ONLINE  /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_7_9pclt1lt_.log

 

14 rows selected

 

但是,在standby端,是不會和datafile一樣建立出來的。standby端依然保持三個日誌組。

 

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

 

    GROUP#  SEQUENCE# STATUS

---------- ---------- ----------------

         1         25 CLEARING

         2         26 CLEARING

         3         27 CURRENT

 

注意:DG環境下,online redo log的狀態和普通單例項有一些差異。由於online redo logstandby狀態下是沒有資料寫入的。所以有currentclearing狀態。

 

當前primary端,日誌組數為4

 

 

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

 

    GROUP# STATUS

---------- ----------------

         1 INACTIVE

         2 INACTIVE

         3 CURRENT

         7 UNUSED

 

對於非currentactive的日誌組,是可以刪除的。這點和單例項沒有區別。

 

 

SQL> alter database drop logfile group 1;

Database altered

 

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

 

    GROUP# STATUS

---------- ----------------

         2 INACTIVE

         3 CURRENT

         7 UNUSED

 

重新新增回日誌組1

 

 

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

Database altered

 

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

 

    GROUP# STATUS

---------- ----------------

         1 UNUSED

         2 INACTIVE

         3 CURRENT

         7 UNUSED

 

同樣standby端是沒有什麼反映的。

 

4online redo log——standby

 

相對於Primary端而言,standbyonline redo log管理相對比較複雜。具體可以劃分為增加add、刪除drop和同步sync三種。

 

注意:在standby進行redo apply的過程中,standby端對應的online redo log其實是沒有用處的,也沒有起到作用。進行調整的目的只在於切換成Primary之後的效能問題。

 

首先是新增redo log group

 

確保引數standby_file_management狀態,和當前日誌狀態。

 

 

SQL> show parameter standby_file_management

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

standby_file_management              string      AUTO

 

 

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

 

    GROUP#  SEQUENCE# STATUS

---------- ---------- ----------------

         1         25 CLEARING

         2         26 CLEARING

         3         27 CURRENT

 

直接新增是不允許的。

 

 

SQL> alter database add logfile group 7 size 10m;

alter database add logfile group 7 size 10m

 

ORA-01156: 進行中的恢復或閃回可能需要訪問檔案

 

首先要停止redo apply過程,解除standby_file_management引數限制。

 

 

--新增過程

SQL> alter database recover managed standby database cancel;

Database altered

 

SQL> alter system set standby_file_management=manual;

System altered

 

之後再進行新增,就可以成功。但是注意將引數置回。

 

 

SQL> alter database add logfile group 7 size 10m;

Database altered

 

SQL> alter system set standby_file_management=auto;

System altered

 

 

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

 

    GROUP#  SEQUENCE# STATUS

---------- ---------- ----------------

         1         25 CLEARING

         2         26 CLEARING

         3         27 CURRENT

         7          0 UNUSED

 

確認檔案建立。

 

SQL> select group#, type, member from v$logfile;

 

    GROUP# TYPE    MEMBER

---------- ------- --------------------------------------------------------------------------------

        (篇幅原因,有省略……

         6 STANDBY /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_6_9ndhpfvo_.log

         7 ONLINE  /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_7_9pcnkosf_.log

         7 ONLINE  /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_7_9pcnkotx_.log

 

14 rows selected

 

最後啟動apply過程。

 

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

Database altered

 

下面是drop redo log的實驗。

 

 

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

 

    GROUP#  SEQUENCE# STATUS

---------- ---------- ----------------

         1         25 CLEARING

         2         26 CLEARING

         3         27 CURRENT

         7          0 UNUSED

 

刪除日誌情況比較複雜。和單例項的情況一樣,需要取決於日誌組當前狀態。如果狀態是current或者current_clearing狀態,是不允許刪除的。也不允許進行switch logfile操作。

 

 

SQL> alter system switch logfile;

alter system switch logfile

 

ORA-16000: 開啟資料庫以進行只讀訪問

 

我們進行的drop操作只能針對非current型別的日誌,如果確實需要刪除current日誌,則需要參考sync同步步驟。

 

首先取消redo log apply過程,修改自動管理引數。

 

SQL> alter database recover managed standby database cancel;

Database altered

 

SQL> alter system set standby_file_management=manual;

System altered

 

清理刪除資料庫日誌組。

 

 

SQL> alter database clear logfile group 7; --不可缺少步驟

Database altered

 

SQL> alter database drop logfile group 7;

Database altered

 

SQL> alter system set standby_file_management=auto;

System altered

 

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

Database altered

 

當前日誌組:

 

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

 

    GROUP#  SEQUENCE# STATUS

---------- ---------- ----------------

         1         25 CLEARING

         2         26 CLEARING

         3         27 CURRENT

 

最後我們聊聊sync同步日誌組的問題。同步日誌組就是模擬DG搭建步驟,將primary上的日誌結構複製到standby端。此時Primary端日誌組結構如下:

 

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

 

    GROUP# STATUS

---------- ----------------

         1 UNUSED

         2 INACTIVE

         3 CURRENT

         7 UNUSED

 

首先需要將standby完全關閉。

 

[oracle@SimpleLinux trace]$ export ORACLE_SID=ora11gsy

[oracle@SimpleLinux trace]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.4.0 Production on Sun May 4 14:15:52 2014

 

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

 

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

primary上構建standby control file。傳統DG搭建過程是需要手工進行standby controlfile構建的。最新的duplicate from active 方法這個步驟是省略的。

 

 

[oracle@SimpleLinux ~]$ env | grep ORACLE_SID

ORACLE_SID=ora11g

[oracle@SimpleLinux ~]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.4.0 Production on Sun May 4 14:17:30 2014

 

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

 

SQL> conn / as sysdba

Connected.

SQL> alter database create standby controlfile as '/tmp/stb.ctl';

Database altered.

 

對應目錄中找到檔案。

 

[oracle@SimpleLinux ~]$ cd /tmp

[oracle@SimpleLinux tmp]$ ls -l | grep ctl

-rw-r-----. 1 oracle oinstall 9781248 May  4 14:18 stb.ctl

 

standby control file複製到standby端對應的目錄中。目錄位置和檔名稱可以檢視standby端的引數檔案。

 

 

SQL> show parameter control

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_file_record_keep_time        integer     7

control_files                        string      /u01/app/oradata/ORA11GSY/controlfile/ora11gsby01.ctl

control_management_pack_access       string      DIAGNOSTIC+TUNING

 

[oracle@SimpleLinux tmp]$ cp stb.ctl /u01/app/oradata/ORA11GSY/controlfile/ora11gsby01.ctl

 

standby資料庫進入mount狀態。

 

 

SQL> alter database mount; 

Database altered.

 

判斷日誌情況:

 

SQL> select * from v$logfile;

 

    GROUP# STATUS  TYPE    MEMBER                                                                           IS_RECOVERY_DEST_FILE

---------- ------- ------- -------------------------------------------------------------------------------- ---------------------

         3         ONLINE  /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_3_9mnjx4n0_.log                        NO

         3         ONLINE  /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_3_9mnjx54c_.log             NO

         2         ONLINE  /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_2_9mnjwzpq_.log                        NO

         2         ONLINE  /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_2_9mnjx15f_.log             NO

         1         ONLINE  /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_1_9pcn18bg_.log                        NO

         1         ONLINE  /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_1_9pcn19z4_.log             NO

         4         STANDBY /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_4_9nd01b56_.log                        NO

         4         STANDBY /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_4_9nd01cpl_.log             NO

         5         STANDBY /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_5_9nd04pps_.log                        NO

         5         STANDBY /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_5_9nd04rpd_.log             NO

         6         STANDBY /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_6_9nd04xjo_.log                        NO

         6         STANDBY /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_6_9nd04yv7_.log             NO

         7         ONLINE  /u01/app/oradata/ORA11GSY/onlinelog/o1_mf_7_9pclt1jy_.log                        NO

         7         ONLINE  /u01/app/fast_recovery_area/ORA11GSY/onlinelog/o1_mf_7_9pclt1lt_.log             NO

 

14 rows selected

 

SQL> show parameter convert;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_file_name_convert                 string      ORA11G, ORA11GSY

log_file_name_convert                string      ORA11G, ORA11GSY

 

注意:如果是10.2.0.1版本下,在mount中還要對所有日誌組進行手工的clear動作。

 

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;

 

 

啟動之後,open可以成功。

 

SQL> alter database open;

Database altered.

 

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

 

Database altered.

 

 

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

 

    GROUP# STATUS

---------- ----------------

         1 CURRENT

         2 UNUSED

         3 UNUSED

         7 UNUSED

 

實驗成功,四個online日誌組被同步。

 

5、結論

 

Oracle DG是目前比較常用的HA策略模式。在運維過程中,檔案建立和日誌維護是經常需要關注的問題。記錄下來,以備不時之需。

 


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

相關文章