1. 連接RMAN
SQL> create user rman identified by jansondors;
SQL> grant resource,connect,dba to rman;
$ rman target rman/jansondors
2. 配置RMAN參數(shù)
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORACENT are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # 保留備份副本的數(shù)量
CONFIGURE BACKUP OPTIMIZATION OFF; # 配置備份優(yōu)化,如果已經(jīng)備份了某個(gè)文件的相同版本,則不會(huì)再備份該文件
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # 備份的數(shù)據(jù)文件保留至服務(wù)器磁盤上
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # 配置是否啟用控制文件的自動(dòng)備份
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # 配置控制文件自動(dòng)備份的格式
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # 備份并行度伟叛,通道數(shù)量越多西采,任務(wù)執(zhí)行時(shí)間越短刨啸;備份文件類型為備份集
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/data/oracle/product/11.2.0/db_1/dbs/snapcf_oracent.f'; # default
RMAN> configure default device type to sbt;
RMAN> configure default device type to disk;
RMAN> configure backup optimization on;
RMAN> configure controlfile autobackup on;
-> 備份路徑遵循的原則
statement format ->configure format ->FLASH_RECOVER_ARER ->$ORACLE_HOME/dbs
3. 配置RMAN脫機(jī)備份
$ sqlplus rman/jansondors as sysdba
SQL> select file_type,percent_space_used,percent_space_reclaimable,number_of_files from v$flash_recovery_area_usage;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter system set db_recovery_file_dest_size=10g;
SQL> show parameter db_recovery_file_dest;
RMAN> backup database;
RMAN> backup as compressed backupset database;
RMAN> sql 'alter database open';
4. 配置RMAN聯(lián)機(jī)備份
- 開啟歸檔
$ sqlplus rman/jansondors as sysdba
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog/noarchivelog;
SQL> alter database open;
SQL> archive log list;
- 備份數(shù)據(jù)庫
RMAN> backup as compressed backupset database plus archivelog delete all input;
RMAN> run{
allocate channel ch1 device type disk format '/home/oracle/Downloads/backup_ctl_file/ch1_%U';
allocate channel ch2 device type disk format '/home/oracle/Downloads/backup_ctl_file/ch2_%U';
backup as backupset
(datafile 1,4 channel ch1)
(datafile 2,3,5 channel ch2);
sql 'alter system archive log current';}
RMAN> run{
allocate channel ch1 device type disk朴下;
allocate channel ch2 device type disk;
backup as backupset format '/home/oracle/Downloads/backup_ctl_file/%U'
(datafile 1,4 channel ch1)
(datafile 2,3,5 channel ch2);
sql 'alter system archive log current';}
- 備份表空間
RMAN> backup tablespace users;
RMAN> backup as compressed backupset tablespace users;
- 備份數(shù)據(jù)文件
RMAN> backup as backupset datafile 1 format '/home/oracle/Downloads/backup_ctl_file/datafile_1_%U';
- 備份控制文件
->手工備份
RMAN> backup current controlfile format '/home/oracle/Downloads/backup_ctl_file_%U.dbf';
RMAN> backup current controlfile ;
->自動(dòng)備份
RMAN> configure controlfile autobackup format for device type disk to '/home/oracle/Downloads/backup_ctl_file/%F';
RMAN> configure controlfile autobackup on ;
- 備份壞塊處理
默認(rèn)情況下苦蒿,RMAN會(huì)檢查數(shù)據(jù)庫是否發(fā)生物理損壞殴胧,不會(huì)檢查邏輯損壞
->關(guān)閉物理損壞檢查
RMAN> backup nochecksum tablespace users tag='weekly backup';
->啟用邏輯損壞檢查
RMAN> backup check logical tablespace users;
->設(shè)置maxcorrupt,當(dāng)壞塊個(gè)數(shù)超過指定數(shù)量時(shí),backup進(jìn)程會(huì)停止
RMAN-> run{
set maxcorrupt for datafile 2,4 to 10;
backup database;}
5. 配置RMAN增量備份
- Level 0增量備份
RMAN> backup incremental level 0 database;
- Level 1增量備份
RMAN> backup incremental level 1 database;
- 快速增量備份
SQL> shutdown immediate;
SQL> startup mount;
SQL> select filename,status,bytes from v$block_change_tracking;
SQL> alter database enable block change tracking using file '/data/oracle/product/11.2.0/oradata/chtrack.log';
SQL> alter database disable block change tracking;
SQL> alter database rename file '/data/oracle/product/11.2.0/oradata/chtrack.log' to '/data/oracle/product/11.2.0/oradata/test/chtrack.log';
- 應(yīng)用增量備份
# 將增量備份添加到鏡像副本上
RMAN> run{
backup incremental level 1 for recover of copy with tag 'incr_copy_backup' database;
recover copy of database with tag 'incr_copy_backup';}
6. 配置恢復(fù)目錄
SQL> create tablespace rcat_tbs datafile '/data/oracle/oradata/ORACENT/rcat_tbs01.dbf' size 100m;
SQL> create user rcat_owner identified by jansondors default tablespace rcat_tbs temporary tablespace temp;
SQL> grant recovery_catalog_owner to rcat_owner;
SQL> grant connect,resource to rcat_owner;
RMAN> rman catalog rman/jansondors target systemn/jansondors@targetOrcl
7. RMAN腳本
create script rman_backup{
sql 'alter system checkpoint';
backup database format '/home/oracle/Downloads/offline_backup/backup_$u.dbf';
backup current controlfile format '/home/oracle/Downloads/offline_backup/backup_ctl_$u.dbf';
}
8. 非歸檔完全恢復(fù)
聯(lián)機(jī)重做日志是循環(huán)使用的佩迟,一個(gè)日志寫滿之后會(huì)切換到下一個(gè)团滥,新的循環(huán)會(huì)覆蓋掉部分變化的數(shù)據(jù),非歸檔恢復(fù)是一種不完全恢復(fù)
- 數(shù)據(jù)文件报强、控制文件以及重做日志文件全部丟失
# 數(shù)據(jù)庫處于非歸檔模式
$ sqlplus rman/jansondors as sysdba
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database noarchivelog;
SQL> alter database open;
SQL> archive log list;
# 備份文件存儲目錄為默認(rèn)的快閃恢復(fù)區(qū)
RMAN> configure controlfile autobackup format for device type disk clear;
RMAN> show all;
# 開啟控制文件自動(dòng)備份
RMAN> configure controlfile autobackup on;
RMAN> show all;
# 控制文件灸姊、數(shù)據(jù)文件、重做日志默認(rèn)位置
SQL> show parameter control_files;
SQL> col name for a30
SQL> select file#,name,status from v$datafile;
SQL> select group#, status, member from v$logfile;
-> 1. 數(shù)據(jù)庫開啟掛載模式
SQL> startup mount;
-> 2. 新增測試數(shù)據(jù)
SQL> alter database open;
SQL> create table test123 as select * from dba_segments;
-> 3. 模擬文件丟失
SQL> shutdown immediate;
$ pwd
$ ls
control01.ctl redo02.log sysaux01.dbf temp01.dbf users01.dbf
redo01.log redo03.log system01.dbf undotbs01.dbf
$ rm -rf *.*
-> 4. 恢復(fù)數(shù)據(jù)
SQL> startup
ORACLE instance started.
Total System Global Area 759943168 bytes
Fixed Size 2217224 bytes
Variable Size 503319288 bytes
Database Buffers 251658240 bytes
Redo Buffers 2748416 bytes
ORA-00205: error in identifying control file, check alert log for more info
RMAN> restore controlfile from '/data/oracle/flash_recovery_area/ORACENT/autobackup/2017_05_17/o1_mf_s_944236355_dkr0s40f_.bkp';
SQL> alter database mount;
Database altered.
RMAN> restore database;
RMAN> recover database noredo;
SQL> alter database open resetlogs;
SQL> select group#,sequence#,status from v$log;
SQL> select count(*) from test123;
- 數(shù)據(jù)文件丟失
-> 1. 模擬USERS表空間丟失
SQL> shutdown immediate
$ pwd
/data/oracle/oracent
$ ls
control01.ctl redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf
$ rm -rf users01.dbf
-> 2. RMAN恢復(fù)
SQL> select file#,name from v$datafile;
RMAN> restore datafile 4;
RMAN> recover datafile 4;
#重做日志被覆蓋
RMAN> recover datafile 4 until cancel;
- 重做日志文件丟失
-> 1. 模擬文件丟失
SQL> shutdown immediate;
$ pwd
/data/oracle/oracent
$ ls
control01.ctl redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf
$ rm -rf *.dbf
$ rm -rf *.log
-> 2. 恢復(fù)
RMAN> restore database;
RMAN> recover database until cancel;
SQL> alter database open;
SQL> alter database open resetlogs;
- 遷移數(shù)據(jù)文件
SQL> start mount
RMAN> run{
set newname for datafile
'A/system01.dbf' to 'B/system01.dbf';
set newname for datafile
'A/users01.dbf' to 'B/users01.dbf';
restore database from tag=TAG20170517T131491;
switch datafile all;
}
9. 歸檔完全恢復(fù)
數(shù)據(jù)庫一直處于歸檔模式下秉溉,且歸檔文件和重做日志文件損壞的情況下厨钻,可以在聯(lián)機(jī)狀態(tài)下恢復(fù)數(shù)據(jù)庫文件
- 非系統(tǒng)表空間損壞
-> 1. 模擬環(huán)境
$ pwd
/data/oracle/oracent
$ ls
control01.ctl redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf
$ rm -rf users01.dbf
-> 2. 恢復(fù)
SQL> alter database datafile 4 offline;
SQL> alter database open;
RMAN> restore datafile 4;
RMAN> recover datafile 4;
SQL> alter database datafile 4 online;
SQL> select file_name,tablespace_name,status,online_status from dba_data_files;
RMAN> run{
sql 'alter database datafile 4 offline';
restore tablespace users;
recover tablespace users;
sql 'alter database datafile 4 online';
}
- 系統(tǒng)表空間損壞
# system表空間損壞時(shí),數(shù)據(jù)庫無法啟動(dòng)坚嗜;需要把數(shù)據(jù)庫啟動(dòng)至mount狀態(tài),使用RMAN進(jìn)行數(shù)據(jù)庫恢復(fù)工作
SQL> startup mount
RMAN> run{
sql 'alter database datafile 1 offline';
restore datafile 1 ;
recover datafile 1;
sql 'alter database datafile 1 online';
}
SQL> alter database open;
- 所有數(shù)據(jù)文件丟失
# 在所有數(shù)據(jù)文件丟失诗充,但控制文件和重做日志文件都完好的情況下苍蔬,可以通過RMAN進(jìn)行數(shù)據(jù)庫恢復(fù)工作
RMAN> run{
restore database;
recover database;
sql 'alter database open';
}
10. RMAN恢復(fù)數(shù)據(jù)塊
-> 1. 備份整個(gè)數(shù)據(jù)庫
RMAN> backup database plus archivelog;
-> 2. 模擬環(huán)境
SQL> shutdown immediate;
# 人為修改dbf文件
# 此時(shí)startup指令無效,提示報(bào)錯(cuò)
-> 3. 恢復(fù)
RMAN> backup validate datafile 6;
SQL> select * from v$database_block_corruption;
RMAN> blockrecover datafile 6 block #BLOCK_NUM# from backupset;
RMAN> recover datafile 6;
SQL> alter database open;
11. RMAN備份維護(hù)指令
- validate backupset
RMAN> validate backupset 5;
- restore...validate
RMAN> restore tablespace users validate;
RMAN> restore datafile '/data/oracle/oracent/system01.dbf' validate;
- restore preview
RMAN> restore database preview
RMAN> restore tablespace sysaux preview;
RMAN> restore datafile 5 preview;
- list
RMAN> list;
RMAN> list backupset;
RMAN> list backupset 5;
RMAN> list backup of tablespace users;
RMAN> list backup of datafile 1;
RMAN> list backup of archivelog all;
RMAN> list backup of archivelog from time ='sysdate-2';
RMAN> list backup of controlfile;
RMAN> list backup of spfile;
RMAN> list copy of controlfile;
RMAN> list backup summary;
- report
RMAN> report schema;
RMAN> report need backup;