[原創]RMAN備用資料庫(邏輯dataguard) --關於dorecover 的解釋

season0891發表於2010-07-24

RMAN備用資料庫

1、介紹幾個新RMAN命令

INCLUDE CURRENT CONTROLFILE FOR STANDBY:在備份命令中包含一個備用控制檔案,RMAN為了建立備用資料庫必須在其備份中有一個備用控制檔案。

DUPLICATE TARGET DATABASE FOR STANDBY:建立一個副本資料庫作為目標的備用資料庫。

DORECOVER:從目標資料庫用歸檔日誌備份恢復備用資料庫。一旦備用資料庫的建立完成,RMAN將對備用資料庫應用主資料庫中的所有歸檔日誌,一直到RMAN中註冊的最新的歸檔日誌。

2、在RMAN為備用操作複製資料庫期間,RMAN將自動執行任務的所有要求。當連線到目標輔助和可選的目錄資料庫時,RMAN將進行以下任務:

 1)決定需要還原哪個基本備份。

 2)根據輔助資料庫引數或者RMAN設定命令和選項,確定將資料檔案放置在輔助例項的什麼位置。

 3)為輔助資料庫還原備用控制檔案。

 4)載入備用資料庫控制檔案。

 5)從第1)步決定的備份片或者映像複製來還原資料檔案。

 6)如果指定了DORECOVER選項,將根據恢復停止點對還原的資料檔案應用

所有的增量備份

  7)如果指定了DORECOVER選項,將根據恢復點停止點從磁碟或備份對還原的資料檔案應用所有歸檔日誌檔案。

3、當RMAN建立備用資料庫時,就注意以下事項:

 1)如果在備用資料庫還原期間不希望使用目錄,則應在RMAN命令列中指定NOCATALOG.

 2)在備份備用控制檔案時的重做日誌必須被歸檔。

 3)必須有包含備用控制檔案的備份,否則,當試圖建立備用資料庫時會得到一個“RMAN-06024:no backup or copy of the controlfile found to restore”錯誤。

 4)不能在備用建立期間執行完全恢復。如果當前的聯機重做日誌對資料庫不可用,則常常會發生這種情況。應用DORECOVER選項後,RMAN將應用已知的歸檔日誌檔案。

 5)如果備用資料庫駐留在其它的伺服器上並擁有與主伺服器相同的目錄結構,則在備用建立期間不必重新命名任何一個檔案。預設情況下,DUPLICATE命令將不能繼續執行,而RMAN將會通知還原的輔助檔案的位置與被備份的目標資料庫檔案的原始位置是一致的。這樣做可以防止DBA偶然覆蓋已存在的資料檔案。NOFILENAMECHECK選項將會忽略這個檢查。

 6)備用資料庫的資料庫名稱必須和主資料庫的名稱相同。如果主資料庫和備用資料庫在同一機器上,則對備用資料庫使用LOCK_NAME_SPACE初始化引數。這將允許兩個具有相同名稱的資料庫駐留在同一機器上,而不相互干擾。

 7)RMAN將只建立備用資料庫並在建立點上初步恢復該資料庫。不能進行備用資料庫的後續的維護和恢復(傳送、應用歸檔重做日誌檔案)

4、建立步驟:

           1)目錄:建立所有的管理目錄($ORACLE_BASE/admin/STBY)和資料目錄(/oradata/STBY)

           2)引數檔案:複製目標資料庫的引數檔案並命名為initSTBY.ora,這樣就建立了一個引數檔案。將所有目標資料庫名(MYDB)修改為”STBY”,除了資料庫名(DB_NAME)必須保留,使備用資料庫與原始資料庫的名稱相同,為了在備用資料庫建立期間轉換檔名,增加兩個轉換引數。同時,增加LOCK_NAME_SPACE引數以便可以在同一臺機器上同時開啟兩個同名的資料庫:

DB_FILE_NAME_CONVERT = (“MYDB”,”STBY”)

LOG_FILE_NAME_CONVERT = (“MYDB”,”STBY”)

LOCK_NAME_SPACE = “STBY”

STANDBY_ARCHIVE_DEST = /oradata/stby/arvhice

           3)口令檔案:為備用資料庫建立一個口令檔案,以便RMAN可以用SYSDBA身分連線到SYSDBA

           4)Windows服務:在windows環境中,使用oradim工具為STBY資料庫建立一個新的名為OracleServiceSTBY的資料庫服務。

           5)配置Net8

           6)備份目標資料庫(MYDB):建立備用資料庫需要一個備用控制檔案的備份。備用控制檔案備份以後還需要一個日誌切換,在命令列中增加一個日誌檔案引數,以便該指令碼輸出可以輸入到一個檔案中:

LINUX>rman trace = b_standby.log

RMAN> connect target sys/oracle

已聯機到目標資料庫: MYDB (DBID=2567199153)

RMAN> connect catalog rman/rman@standby

已聯機至復原目錄資料庫

RMAN>@b_standby.rcv

b_standby.rcv內容如下:


run{
 ALLOCATE channel d1 TYPE DISK;
 BACKUP incremental LEVEL 0 DATABASE
    format 'd:\oraclebak\db%d_%s_%p_%t'
    tag = 'stby_inc0'
    include CURRENT CONTROLFILE FOR STANDBY;
 SQL 'alter system archive log current ';
 BACKUP ARCHIVELOG FROM TIME 'sysdate - 1/24'
    format 'd:\oraclebak\arc%d_%s_%p_%t';}

指令碼說明:

 Control file for standby:當備份整個資料庫時,控制檔案將自動包含在系統表空間中。為了備用資料庫的生成必須建立一個特殊的控制檔案。RMAN可以在一個資料檔案備份片中儲存這個特殊檔案。如果需要,這個備份檔案也可以用於還原目標資料庫的控制檔案。

 Archive log current:當備用資料控制檔案建立時,備用資料庫的恢復從這個當前日誌開始。

螢幕輸出如下:

RMAN> run{

2>   ALLOCATE channel d1 TYPE DISK;

3>   BACKUP incremental LEVEL 0 DATABASE

4>     format 'd:\oraclebak\db%d_%s_%p_%t'

5>     tag = 'stby_inc0'

6>     include CURRENT CONTROLFILE FOR STANDBY;

7>   SQL 'alter system archive log current ';

8>   BACKUP ARCHIVELOG FROM TIME 'sysdate - 1/24'

9>     format 'd:\oraclebak\arc%d_%s_%p_%t';}

已配置通道: d1

通道d1: sid=16 devtype=DISK

開始backup, 2008/05/07 22:49:02

通道d1: 正在啟動incremental level 0 資料檔案備份集

通道d1: 正在設定備份集中的資料檔案

在備份集中包括目前的SPFILE

在備份集中包括待命控制檔

輸入資料檔案fno=00001 name=C:\ORACLE\ORADATA\MYDB\SYSTEM01.DBF

輸入資料檔案fno=00002 name=C:\ORACLE\ORADATA\MYDB\UNDOTBS01.DBF

輸入資料檔案fno=00005 name=C:\ORACLE\ORADATA\MYDB\EXAMPLE01.DBF

輸入資料檔案fno=00010 name=C:\ORACLE\ORADATA\MYDB\XDB01.DBF

輸入資料檔案fno=00006 name=C:\ORACLE\ORADATA\MYDB\INDX1.DBF

輸入資料檔案fno=00009 name=C:\ORACLE\ORADATA\MYDB\USERS01.DBF

輸入資料檔案fno=00003 name=C:\ORACLE\ORADATA\MYDB\CWMLITE01.DBF

輸入資料檔案fno=00004 name=C:\ORACLE\ORADATA\MYDB\DRSYS01.DBF

輸入資料檔案fno=00007 name=C:\ORACLE\ORADATA\MYDB\ODM01.DBF

輸入資料檔案fno=00011 name=C:\ORACLE\ORADATA\MYDB\MYTS01.DBF

輸入資料檔案fno=00008 name=C:\ORACLE\ORADATA\MYDB\TOOLS01.DBF

通道d1: 啟動部份1, 2008/05/07 22:49:09

通道d1: 已完成部份1, 2008/05/07 22:59:39

處理片=D:\ORACLEBAK\DBMYDB_12_1_654130144 批註=NONE

通道d1: 備份集完成, 經歷時間: 00:10:35

完成backup, 2008/05/07 22:59:39

sql 敘述句: alter system archive log current

開始backup, 2008/05/07 23:00:13

已存檔目前的日誌

通道d1: 啟動存檔日誌備份集

通道d1: 指定備份集中的存檔日誌

輸入存檔日誌系線=1 順序=4 recid=22 戳記=654130812

輸入存檔日誌系線=1 順序=5 recid=23 戳記=654130813

通道d1: 啟動部份1, 2008/05/07 23:00:15

通道d1: 已完成部份1, 2008/05/07 23:00:54

處理片=D:\ORACLEBAK\ARCMYDB_13_1_654130814 批註=NONE

通道d1: 備份集完成, 經歷時間: 00:00:40

完成backup, 2008/05/07 23:00:54

已釋放通道: d1

RMAN>

請記錄目標資料庫當前的日誌序號,自動恢復將從這個日誌序號開始:

SQL>SELECT SEQUENCE# FROM V$LOG WHERE STATUS = ‘CURRENT’;

如何知道一個備份集中是否包含一個備用控制檔案?可以在目錄中查詢名RC_BACKUP_CONTROLFILE的檢視中的該註冊資料庫,控制檔案型別“S(Standby)。正常的控制檔案備份將是一個控制檔案型別“B(Backup)

SQL> SELECT SET_COUNT,
       CHECKPOINT_CHANGE#,
       CHECKPOINT_TIME,
       STATUS,
       COMPLETION_TIME,
       CONTROLFILE_TYPE
 FROM RMAN.RC_BACKUP_CONTROLFILE
 WHERE DB_NAME = 'MYDB'
   AND CONTROLFILE_TYPE = 'S';

同時下面的查詢語句可以在備份集和備份片中查詢包含的備用控制檔案。

SQL> SELECT BS.BS_KEY,
       BS.SET_COUNT,
       BS.BACKUP_TYPE,
       BS.INCREMENTAL_LEVEL,
       BS.COMPLETION_TIME,
       BS.ELAPSED_SECONDS,
       BP.HANDLE,
       BP.STATUS
 FROM RMAN.RC_BACKUP_SET BS, RMAN.RC_BACKUP_PIECE BP
 WHERE BS.CONTROLFILE_INCLUDED = 'STANDBY'
   AND BS.DB_ID = BP.DB_ID
   AND BS.BS_KEY = BP.BS_KEY
   AND BS.DB_ID IN (SELECT DBID FROM RMAN.RC_DATABASE WHERE NAME = 'MYDB');

 7)建立備用資料庫:簡單地啟動RMAN並連線到目標、目錄和輔助資料庫上。設定NLS語言環境變數,如果目標資料庫與預設的環境的語言屬性相同,則該變數沒有必要設定,如果NLS_LANG環境變數與目標資料庫的不同則有可能使備用資料庫建立失敗。

RMAN執行的備用資料庫建立工作只需要幾個命令。用前述任務中建立的備份生成備用資料庫:

LINUX>rman trace=/opt/oracle/standby.log

RMAN>connect target sys/oracle@mydb

RMAN>connect catalog rman/rman@standby

RMAN>connect auxiliary sys/stby

RMAN> run{
 SET command ID TO 'Standby Creation';
 ALLOCATE auxiliary channel d1 TYPE DISK;
 duplicate target DATABASE FOR STANDBY dorecover;}

這向行命令用資料庫的備份建立了MYDB資料庫的副本,儘管這個指令碼中的命令很少,但實際上RMAN完成了大量的工作:

Set command id :這個設定選項使RMAN填充了v$session檢視的client_inof列。因此,在STBY資料庫被建立時,可以將client_info的值設定為“Standby Creation”來查詢v$session表,並觀察會話的進行。

Duplicate target database for standby :這個命令建立備用資料庫需要完成大量的工作,首先,備用資料庫的控制檔案需要被複制到輔助資料庫init.ora檔案中的control_files引數值指定的位置,然後,目標資料庫備份中資料檔案將被還原到輔助資料庫的還原位置上。

Dorecover :當目標資料庫複製之後,備份資料庫將用增量RMAN備份和歸檔重做日誌恢復。一直恢復到停止點的位置。

螢幕輸出如下:

C:>rman trace=c:\oracle\standby.log

Recovery Manager: 版本9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

Windows 2000 Version 5.1 Service Pack 2, CPU type 586

Starting with debugging turned off

RMAN> connect target sys/oracle@mydb

已聯機到目標資料庫: MYDB (DBID=2567199153)

RMAN> connect catalog rman/rman@standby

已聯機至復原目錄資料庫

RMAN> connect auxiliary sys/stby@stby

聯機至輔助資料庫: mydb (未掛載)

RMAN> 2> 3> 4>

執行命令: SET COMMAND ID

已配置通道: d1

通道d1: sid=13 devtype=DISK

開始Duplicate Db, 08-5-08

列印儲存的命令檔: Memory Script

{

   restore clone standby controlfile to clone_cf;

   replicate clone controlfile from clone_cf;

   sql clone 'alter database mount standby database';

}

執行命令檔: Memory Script

開始restore, 08-5-08

通道d1: 啟動資料檔案備份集的回覆

通道d1: 回覆控制檔案

輸出檔名稱=C:\ORACLE\ORADATA\STBY\CONTROL01.CTL

通道d1: 回覆備份片1

處理片=D:\ORACLEBAK\DBMYDB_12_1_654130144 標誌=STBY_INC0 引數=NULL

通道d1: 回覆完成

完成restore, 08-5-08

複製控制檔案

輸入檔名稱=C:\ORACLE\ORADATA\STBY\CONTROL01.CTL

輸出檔名稱=C:\ORACLE\ORADATA\STBY\CONTROL02.CTL

輸出檔名稱=C:\ORACLE\ORADATA\STBY\CONTROL03.CTL

sql 敘述句: alter database mount standby database

列印儲存的命令檔: Memory Script

{

   set until scn 1170983;

   set newname for datafile 1 to

 "C:\ORACLE\ORADATA\STBY\SYSTEM01.DBF";

   set newname for datafile 2 to

 "C:\ORACLE\ORADATA\STBY\UNDOTBS01.DBF";

   set newname for datafile 3 to

 "C:\ORACLE\ORADATA\STBY\CWMLITE01.DBF";

   set newname for datafile 4 to

 "C:\ORACLE\ORADATA\STBY\DRSYS01.DBF";

   set newname for datafile 5 to

 "C:\ORACLE\ORADATA\STBY\EXAMPLE01.DBF";

   set newname for datafile 6 to

 "C:\ORACLE\ORADATA\STBY\INDX1.DBF";

   set newname for datafile 7 to

 "C:\ORACLE\ORADATA\STBY\ODM01.DBF";

   set newname for datafile 8 to

 "C:\ORACLE\ORADATA\STBY\TOOLS01.DBF";

   set newname for datafile 9 to

 "C:\ORACLE\ORADATA\STBY\USERS01.DBF";

   set newname for datafile 10 to

 "C:\ORACLE\ORADATA\STBY\XDB01.DBF";

   set newname for datafile 11 to

 "C:\ORACLE\ORADATA\STBY\MYTS01.DBF";

   restore

   check readonly

   clone database

   ;

}

執行命令檔: Memory Script

執行命令: SET until clause

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

執行命令: SET NEWNAME

開始restore, 08-5-08

通道d1: 啟動資料檔案備份集的回覆

通道d1: 正在設定要從備份集回覆的資料檔案

正在將資料檔案 00001 回覆為C:\ORACLE\ORADATA\STBY\SYSTEM01.DBF

正在將資料檔案 00002 回覆為C:\ORACLE\ORADATA\STBY\UNDOTBS01.DBF

正在將資料檔案 00003 回覆為C:\ORACLE\ORADATA\STBY\CWMLITE01.DBF

正在將資料檔案 00004 回覆為C:\ORACLE\ORADATA\STBY\DRSYS01.DBF

正在將資料檔案 00005 回覆為C:\ORACLE\ORADATA\STBY\EXAMPLE01.DBF

正在將資料檔案 00006 回覆為C:\ORACLE\ORADATA\STBY\INDX1.DBF

正在將資料檔案 00007 回覆為C:\ORACLE\ORADATA\STBY\ODM01.DBF

正在將資料檔案 00008 回覆為C:\ORACLE\ORADATA\STBY\TOOLS01.DBF

正在將資料檔案 00009 回覆為C:\ORACLE\ORADATA\STBY\USERS01.DBF

正在將資料檔案 00010 回覆為C:\ORACLE\ORADATA\STBY\XDB01.DBF

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

相關文章