[原創]RMAN備用資料庫(邏輯dataguard) --關於dorecover 的解釋
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【RMAN】Oracle12c之後,rman備份Dataguard備端恢復可能出現邏輯錯誤Oracle
- Oracle資料庫的邏輯備份工具-expdp資料泵Oracle資料庫
- 使用RMAN備份資料庫資料庫
- 利用RMAN備份重建資料庫資料庫
- 11 管理邏輯備庫
- 關於dataguard需要查詢的資料字典
- rman備份異機恢復(原創)
- Oracle資料庫由dataguard備庫引起的log file sync等待Oracle資料庫
- 用rman遷移資料庫資料庫
- oracle邏輯備份之--資料泵Oracle
- oracle資料庫使用rman備份指令碼Oracle資料庫指令碼
- 資料庫邏輯遷移方案資料庫
- 創新實訓(八)——題目相關的邏輯處理解釋
- 基於UNIX系統,邏輯故障的資料災難解讀
- Oracle資料庫備份還原詳解XKUSOracle資料庫
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- 資料庫,邏輯刪還是物理刪?資料庫
- 資料庫 Mysql 邏輯架構簡介資料庫MySql架構
- Java程式呼叫expdp資料泵實現自動邏輯備份Oracle資料庫的方案設計JavaOracle資料庫
- sqlserver資料庫的備份還原SQLServer資料庫
- [20180423]關於rman備份的問題2.txt
- 把業務邏輯寫入應用程式,而不是資料庫資料庫
- 4 Creating a Logical Standby Database 建立邏輯備庫Database
- 關於 isset 和邏輯運算子的使用
- 圖解MySQL邏輯備份的實現流程圖解MySql
- RMAN 備份相關的概念
- SQL Server資料庫出現邏輯錯誤的資料恢復SQLServer資料庫資料恢復
- 【DATAGUARD】Oracle 通過Dataguard指定恢復時間用於找回丟失資料Oracle
- 關於零信任的7個原則解釋
- 資料分析師都要具備以終為始的思考邏輯
- 達夢資料庫基礎知識(二)資料庫邏輯結構資料庫
- DM8資料庫備份還原的原理及應用資料庫
- 【DATAGUARD】Oracle Dataguard物理備庫切換最佳實踐(sqlplus)OracleSQL
- 詳解SQL Server 2012資料庫備份與還原的教程SQLServer資料庫
- 使用RMAN增量備份處理Dataguard因歸檔丟失造成的gap
- 備忘錄:關於.net程式連線Oracle資料庫Oracle資料庫
- 【DG】備庫RMAN還原方式搭建DG(不使用duplicate命令)
- 【RMAN】在備庫執行rman備份時報錯RMAN-06820 ORA-17629
- 達夢資料庫的備份與還原資料庫