ORACLE RMAN備份及還原
RMAN可以進行增量備份:資料庫,表空間,資料檔案
只有使用過的block可以被備份成backup set
表空間與資料檔案對應關係:dba_data_files / v$datafile_header
在noarchivelog模式下,可以使用RMAN備份read-only和offline的表空間
ORACLE RMAN停機備份:
備份
RMAN連線上ORACLE,WINDOWS下在命令模式下
RMAN TARGET /
連線本地資料庫用的是本地認證模式。RMAN連線資料庫必須在dedicate模式下。因此在share模式下的資料庫應配置一個dedicate的連線用於RMAN連線。
如果要把控制檔案、引數檔案也一起備份
configure controfile autobackup on;//開啟autobackup
configure controfile autobackup off;//關閉autobackup
關閉資料庫
RMAN>shutdown immediate
mount 資料庫RMAN的備份必須在MOUNT模式下,這也就是控制檔案備份的重要。
RMAN>startup mount
最簡單的備份
RMAN>backup database
就這一句就OK了
這樣的備份,備份集在資料庫預設位置。%oracle_home%/ora92/database
當然你也可以用run來靈活的定義你的備份。
RMAN>run{
>allocate chennel d1 type disk; //分配通道
>backup full database //全備份資料庫
>include current controlfile //包括當前的controlfile
>format 'e:\oracle\orders\db_%d_%s_%p_%t_%T'; //備份檔案位置和檔名格式
>release channel d1;//釋放通道
>}
恢復
1、資料檔案損壞,而控制檔案是好,或者已經恢復
RMAN連上資料庫
startup mount
restore database
recover database noredo;
alter database open resetlogs;
recover database noredo該命令指示RMAN執行最後的恢復操作以準備開啟這個資料庫。因為是在NOARCHIVELOG模式下並且不應用任何歸檔的重做日誌並且丟失了聯機重做日誌,所以要求在這條命令中使用noredo引數。
最後使用alter database open resetlogs開啟資料庫。由於已經還原了控制檔案並且需要重新構建重做日誌,所以必須用resetlogs。
2、還原控制檔案
startup nomount;
set dbid = <dbid>
restore controlfile from autobackup ;
alter database mount;
restore database;
recover database noredo;
alter database open resetlogs;
alter database open;
在這個例子中有一個DBID這個可以
select * from v$database中查到。但是一個資料庫在控制檔案壞掉了不能OPEN如何能看的到呢這就在平時把這個DBID記下來。
這是最簡單的用RMAN備份與恢復的例子,但從中可以看到RMAN備份與恢復的梗概。
ORACLE RMAN線上備份:
1. ORACLE RMAN線上備份之前需要切換日誌方式為歸檔日誌;
a. 關閉資料庫
SQL> shutdown immediate;
b. 啟動資料庫到mount狀態
SQL> startup mount;
c. 啟用歸檔模式
SQL> alter database archivelog;
d. 檢視修改後的資料庫備份和恢復策略及歸檔檔案的位置
SQL> archive log list;
注意:修改成archive模式之後,之前所有的資料庫備份均無效。
e. 修改相應的初始化引數
Oracle10g之前,你還需要修改初始化引數使資料庫處於自動歸檔模式。
可用SQL> show parameter log_archive_start;檢視
NAME TYPE VALUE
------------------------------------ ----------- --------------
log_archive_start boolean FALSE
SQL> alter system set log_archive_start=true scope=spfile;
重啟資料庫此引數生效,此時資料庫處於自動歸檔模式。
當然你也可以不做第5步,直接
SQL>archive log start
使資料庫啟用自動歸檔,但是重啟後資料庫仍然處於手工歸檔模式。
2. 執行:RMAN target /
3. RMAN資訊儲存:預設儲存在control file中,儲存週期7天
調整:alter system set control_file_record_keep_time=天數;
4. 搭建獨立資料庫儲存RMAN備份資訊
由於只有一個資料庫,就建在本身資料庫上
a. 建立表空間RC:create tablespace rc datafile size 10M autoextend on next 1M
b. 建立使用者RC:
CREATE USER rc IDENTIFIED BY rc TEMPORARY TABLESPACE temp DEFAULT TABLESPACE rc QUOTA UNLIMITED ON rc;
c. 授權RC: GRANT RECOVERY_CATALOG_OWNER TO rc;
d. 搭建:
rman catalog
RMAN>create catalog;
RMAN>exit
rman target / catalog
RMAN>register database;
e. 使用:
rman target / catalog
這種連線方式後,資料就會在控制檔案和catalog各存一份
5. 全域性引數配置:
檢視:show all;
修改:configure 引數名稱 具體設定
例如:修改是否自動儲存control file:configure controlfile autobackup on;
恢復預設值:configure 引數名稱 clear;
關鍵引數:
a. 儲存週期:retention policy
預設是redundancy 1:保留一個備份;
可用值:recovery window of 7 days:保留可以滿足7天恢復週期的備份
根據條件檢查:report obsolete:RMAN會根據儲存週期引數來列出可以刪除的備份
刪除多於備份:delete obsolete
b. 最佳化備份:backup optimization:RMAN會自動忽略已經備份過的內容(資料檔案,歸檔日誌,備份塊)
前提:備份指定同一個channel
c. 預設備份渠道:default device type to disk:預設備份到磁碟,路徑為flash recovery area
渠道型別:
disk:檔案系統路徑
flash recovery area:預設路徑
sbt:磁帶裝置
修改到磁碟其他路徑:configure channel device type disk format '路徑/%U';
例如:configure channel device type disk format '/tmp/movedata/%U';
6. 備份結果
backupset:backup (as backupset) 備份內容,裡面分割成一個或多個backup piece,只有該型別備份可以進行壓縮。
copy:backup as copy 備份內容
按型別檢視:
backupset 檢視:list backup summary(list backupset summary)
檢視詳情:list backupset BS
copy檢視:list copy
按內容檢視:
整個資料庫:list backup of database;
tablespace:list backup of tablespace users;
資料檔案:list backup of datafile n;
控制檔案:list backup of controlfile;
歸檔日誌:list archivelog all;
按規則檢視:
檢視根據儲存規則可刪除檔案:report obsolete;
檢視根據儲存規則需要備份內容:report
RMAN和OS結合檢查:corsscheck 內容;
7. 備份方式full:全備;
Incremental:增量備份
可以增量備份的型別:資料庫,資料檔案,表空間
a. 首先需要做level 0備份作為基礎。例如:backup incremental level 0 備份內容;(備份內容:所有使用過的data block,和image copy不同)
b. 增量型別:
累計增量:backup cumulative level 1 備份內容;
差異增量:backup incremental level 1 備份內容;
區別:累計增量始終是基於level 0的備份;
第一次差異增量是基於level 0的備份;從第二開始就是基於前一次增量備份
c. Image備份增量方式:
第一次:以Image全備為基礎;
第二次:基於全備,做增量備份;完成後合成成一個Image全備
第三次:基於第二次的Image全備,做增量備份;完成後合成成一個Image全備
實現:
例如:針對tablespace example
RUN {
RECOVER COPY OF tablespace example WITH TAG 'incr_update';
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'
tablespace example;
}
d. 開啟引數"block change tracking",可以提高速度
檢視狀態:SELECT status FROM v$block_change_tracking;
預設值:DISABLED
開啟:ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;(預設存放路徑OMF中的DB_CREATE_FILE_DEST)
設定檔案路徑:
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/MYSID/rman_change_track.f' REUSE;
關閉:ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
備份並檢查:bakcup check logical 備份內容;
不備份只是檢查檔案:backup validate 備份內容;
如果檢查有報錯,檢視:v$backup_corruption;v$copy_corruption
8. 備份內容:
整個資料庫:RMAN>backup database;
經典整庫備份:backup as compressed backupset database include current controlfile plus archivelog delete input;
tablespace:RMAN>backup tablespace 名字;
資料檔案:RMAN>backup datafile n; (n:具體的資料檔案編號select file_name,file_id,tablespace_name from dba_data_files;)
控制檔案:RMAN>backup current controlfile;
或者RMAN>backup database include current controlfile;
日誌檔案:RMAN>backup archivelog all;
或者RMAN>backup database plus archivelog;
引數檔案:RMAN>backup spfile;
9. 還原
a. 完全恢復
方法一:從最近的備份集恢復整個資料庫,資料庫會自動執行redo和archive日誌(完全恢復):
SQL>shutdown immediate
SQL>startup mount
RMAN>restore database;
RMAN>recover database;
RMAN>sql 'alter database open';
方法二:從tag恢復整個資料庫,資料庫也會執行redo 和archive 日誌(完全恢復),結果與上面的指令碼一樣:
1. 檢視標籤:
RMAN> list backupset summary;
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
25 B A A DISK 25-JUL-11 1 1 NO TAG20110725T104634
28 B 0 A DISK 25-JUL-11 1 1 NO TAG20110725T104645
29 B A A DISK 25-JUL-11 1 1 NO TAG20110725T104711
30 B F A DISK 25-JUL-11 1 1 NO TAG20110725T104713
31 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105333
32 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105350
33 B 1 A DISK 25-JUL-11 1 1 NO TAG20110725T105353
34 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105408
35 B F A DISK 25-JUL-11 1 1 NO TAG20110725T105411
36 B A A DISK 25-JUL-11 1 1 NO TAG20110725T111403
37 B 1 A DISK 25-JUL-11 1 1 NO TAG20110725T111405
38 B A A DISK 25-JUL-11 1 1 NO TAG20110725T111421
39 B F A DISK 25-JUL-11 1 1 NO TAG20110725T111423
2. 還原資料庫:
SQL>shutdown immediate;
SQL>startup mount;
RMAN>restore database from tag TAG20110725T104645;
RMAN> recover database from tag TAG20110725T104645;
RMAN> alter database open;
b. 不完全恢復:
SQL>shutdown immediate;
SQL>startup mount;
RMAN>restore database from tag TAG20110725T104645;
RMAN>recover database until time "to_date('2011-08-04 15:37:25','yyyy/mm/dd hh24:mi:ss')";
RMAN>alter database open resetlogs;
注意:使用後所有的備份集都無效了,確保安全需要重新對資料庫進行全備(ORACLE10G之後,resetlog之前的備份還是可以用的)
關鍵表空間恢復(system / undotbs1 / sysaux):
SQL>shutdown abort
SQL>startup mount
RMAN>restore tablespace 名字;
RMAN>recover tablespace 名字;
RMAN>sql 'alter database open';
非關鍵表空間恢復(example / users ):
select * from v$datafile_header; 表空間與資料檔案對應關係
SQL>alter database datafile 數字 offline;
RMAN>restore tablespace 名字;
RMAN>recover tablespace 名字;
SQL>alter database datafile 數字 online;
10. 刪除備份
所有backup備份集:delete backup;
所有copy備份機:delete copy;
特定備份機:delete backupset 19;
刪除根據儲存規則可刪除檔案:delete obsolete;
刪除過期的備份:
delete expired backupset;
delete expired copy;
11. RUN塊
例如:
RMAN> RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
ALLOCATE CHANNEL c2 DEVICE TYPE sbt;
ALLOCATE CHANNEL c3 DEVICE TYPE sbt;
BACKUP
INCREMENTAL LEVEL = 0
FORMAT '/disk1/backup/df_%d_%s_%p.bak'
(DATAFILE 1,4,5 CHANNEL c1)
(DATAFILE 2,3,9 CHANNEL c2)
(DATAFILE 6,7,8 CHANNEL c3);
ALTER SYSTEM ARCHIVE LOG CURRENT;
}
12. 外部變數:
語言:set nls_lang=american
日期:set nls_date_format=yyyy-mm-dd....
13. RMAN sciprt
前提條件:有catalog
寫法:(global表示可以由多個資料庫呼叫)
create global script. 名
comment "備註說明"
{指令碼內容}
例如:
create global script. abc
comment "test"
{backup current controlfile;}
呼叫:run {execute script. 名}
例如:run {execute script. abc;}
檢視:print script. 名
改寫:
replace global script. 名
comment "備註說明"
{指令碼內容}
刪除:delete script. 名;
14. 永久保留備份
條件是備份不能保留在flash recovery area中;
a. 建立備份:
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE disk format '/tmp/autobackup/%U';
BACKUP tablespace example;
}
b. 查詢該備份:
list backupset of tablespace example;
c. 修改屬性為永久
change backupset 編號 keep forever nologs;
15. 建立多個固定大小的備份
例如:example 測試備份大小是大於50M
run
{
allocate channel c1 device type disk maxpiecesize 10M format '/tmp/autobackup/%U';
backup tablespace example;
}
/tmp/autobackup目錄下有六個檔案
16.執行指令碼:backup recovery area
備份內容:
a. control file autobackup;
b. incremental backup sets
17.block change tracking
a. 針對整個資料庫;
b. 預設存放路徑:background_dump_dest
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29618264/viewspace-2092449/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle備份及備份策略及基於Linux下 Oracle 備份策略(RMAN)OracleLinux
- 【RMAN】利用備份片還原資料庫資料庫
- Ghost備份及還原系統
- oracle rman備份及策略設定Oracle
- 【原】Oracle學習系列—資料庫備份—RMAN備份Oracle資料庫
- 「Oracle」Oracle 資料庫備份還原Oracle資料庫
- 【RMAN】利用備份片還原資料庫(上)資料庫
- 使用RMAN增量更新備份實現快速還原
- 【RMAN】利用備份片還原資料庫(中)資料庫
- 【RMAN】利用備份片還原資料庫(下)資料庫
- oracle基礎備份和還原Oracle
- oracle資料還原與備份Oracle
- 透過RMAN備份standby database成功恢復還原Database
- 【RMAN】利用備份片還原資料庫(中)-附加資料庫
- oracle聯機熱備份的原理,及rman增量備份原理Oracle
- Oracle聯機熱備份的原理及rman增量備份原理Oracle
- oracle 還原 .dmp 格式備份檔案Oracle
- mysql備份還原MySql
- oracle 10g RMAN備份及恢復Oracle 10g
- oracle之rman備份Oracle
- Oracle RMAN 增量備份Oracle
- oracle rman備份命令Oracle
- 【轉】Oracle rman備份Oracle
- oracle聯機熱備份的原理及rman增量備份原理(zt)Oracle
- mysql備份還原-基於binlog的增量備份還原MySql
- 12C還原使用舊版本RMAN所建立的備份
- Oracle 11g RMAN備份-增量備份Oracle
- mysql 備份與還原MySql
- MySQL備份和還原MySql
- Oracle RMAN備份實戰Oracle
- Oracle OCP(60):RMAN 備份Oracle
- oracle RMAN備份指令碼Oracle指令碼
- Oracle資料庫備份還原詳解XKUSOracle資料庫
- exp/imp備份與還原oracle資料庫Oracle資料庫
- 請問RMAN備份異機還原,備份之後的歸檔日誌在RMAN中怎麼處理?
- Oracle 11g RMAN備份-備份標籤Oracle
- Oracle9i RMAN備份及恢復步驟Oracle
- Oracle9i RMAN 的優缺點及RMAN 備份及恢復步驟Oracle