oracle RMAN 備份恢復總結

germany006發表於2015-08-13

Recovery Manager(RMAN)是一種用於備份(backup)、還原(restore)和恢復(recover)資料庫的Oracle 工.RMAN只能用於ORACLE8或更高的版本中。它能夠備份整個資料庫或資料庫部件,如表空間、資料檔案、控制檔案、歸檔檔案以及Spfile引數檔案。RMAN也允許您進行增量資料塊級別的備份,增量RMAN備份是時間和空間有效的,因為他們只備份自上次備份以來有變化的那些資料塊。而且,透過RMAN提供的介面,第三方的備份與恢復軟體如veritas將提供更強大的備份與恢復的管理功能。


透過RMAN,也提供了其它更多功能,如資料庫的克隆、採用RMAN建立備用資料庫、
利用RMAN備份與移動裸裝置(RAW)上的檔案等工作將變得更方便簡單。9i的RMAN透過
增強的自動配置與管理功能,以及特有的塊級別的恢復,將使備份與恢復工作變得更加快捷
與完美。9i的RMAN有如下特徵特性:
·自動的備份與恢復
·方便的備份歸檔日誌
·自動檢測新的資料檔案
·支援增量備份
·最大限度的減少備份與恢復的錯誤
·減少恢復的時間
·在熱備份中不會產生額外的redo日誌
·腐爛資料塊的自動檢測·並行的備份與恢復操作
·線上備份時,表空間不用置於備份模式
可以看到,在以上的一些特性中,顯示了RMAN強大的功能與好處,以上功能的實現,
是因為RMAN是塊級別的備份與恢復,備份與恢復發生在資料庫塊級別,可以透過比較資料
塊而獲得一致性的資料塊,可以避免備份沒有用過的塊,可以檢驗塊是否腐爛等塊級別的問
題。


   在使用rman備份分為使用恢復目錄和不使用恢復目錄兩種形式,如果使用恢復目錄,那恢復目
錄最好建另外一臺機器上才更有意義,因為如果同生產庫建在一起了,當此機器出現故障時,恢
複目錄資料庫可以也無法使用,那麼rman就不能得到先前的備份資訊了,也就不能進行恢復了。
   下面介紹不使用恢復目錄的備份與恢復方法,由於沒有使用恢復目錄那麼相關的備份資訊將保
存在控制檔案中,所以配置rman為自動備份控制檔案,每次執行backup時就自動備份一個控制文
件,預設儲存在/opt/ora9/product/9.2.0.4/dbs/ 也可更改備份位置。
啟動控制檔案自動備份configure controlfile autobackup on;
設定自動備份控制檔案格式configure controlfile autobackup format for device type disk
to '/backup/cf_%F'
設定備份最佳化configure backup optimization on;
自動備份控制檔案預設儲存路徑/opt/ora9/product/9.2.0.4/dbs/

連連線資料庫
rman>connect target / 或 rman target /
備份資料庫
RMAN>  run {
2>  allocate channel dev1 type disk;
3> backup
4> format '/tmp/hotbak/bak'
5> database;
6> release channel dev1;
7> }
備份表空間
RMAN>  run {
2>  allocate channel dev1 type disk;
3> backup
4> format '/tmp/hotbak/tablespace_users'
5> tablespace users;
6> release channel dev1;
7> }

備份單獨資料檔案
RMAN>  run {
2>  allocate channel dev1 type disk;
3> backup
4> format '/tmp/hotbak/datafile_users'
5> datafile '/opt/ora9/oradata/oradb/users01.dbf';
6> release channel dev1;
7> }

備份控制檔案
RMAN> run {
2> allocate channel dev1 type disk; 
3> backup
4>  format '/tmp/hotbak/controlfile'
5> (current controlfile);
6> release channel dev1;
7> }
 
恢復表空間
rman target / nocatalog
RMAN> startup mount
RMAN> restore tablespace users;
RMAN> recover tablespace users;
RMAN> exit

Datafile recovery 資料檔案恢復
        RMAN> run {
       2> allocate channel dev1 type disk;
       3> sql "alter tablespace users offline immediate";
       4> restore datafile 4;
       5> recover datafile 4;
       6> sql "alter tablespace users online";
       7> release channel dev1;
       8> }
恢復控制檔案

rman>startup nomount;
rman>set dbid=2347671489
rman>restore controlfile from autobackup 或 rman>restore controlfile from
'/opt/arch/ct_c-2347671489-20060630-00'
rman>alter database open resetlogs;
RMAN> startup mount;
恢復資料庫
RMAN> restore database;
RMAN> recover database;
RMAN>alter database open resetlogs;
恢復完畢。

   上面從恢復控制檔案開始,講述的是,只要你有資料庫的備份檔案和備份時控制檔案,才可以
進行恢復,就算重灌也可以。
再說幾個rman常用命令:
list backup  檢視備份資訊
List backup summary  檢視備份彙總資訊
List backup of datafile ‘file name’
list incarnation of database;   檢視具體的備份資訊
Crosscheck命令
檢查磁碟或磁帶上的備份或複製是否正確,並更新備份或者複製的狀態
Crosscheck backup;
Crosscheck archivelog all;
Delete [noprompt] expired backup命令刪除過期備份
也可以用List來檢視相應的報告
LIST EXPIRED BACKUP;
LIST EXPIRED BACKUP SUMMARY;
Delete 命令
Delete命令可以用來刪除指定的備份或者用來刪除廢棄或者是過期的備份集
如刪除指定的備份集與備份片
RMAN> DELETE BACKUPPIECE 101;
RMAN> DELETE CONTROLFILECOPY '/tmp/control01.ctl';
RMAN> DELETE BACKUP OF TABLESPACE users DEVICE TYPE sbt;
刪除過期或者廢棄了的備份
RMAN> DELETE EXPIRED BACKUP;
RMAN> DELETE NOPROMPT OBSOLETE;
RMAN> DELETE OBSOLETE REDUNDANCY = 3;
RMAN> DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS;
刪除指定的備份歸檔
RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300;
再貼幾個備份指令碼:
全庫備份指令碼:
#!/bin/sh
date=`date +%Y%m%d`
export ORACLE_BASE=/opt/ora9 
export ORACLE_HOME=/opt/ora9/product/9.2.0.4
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin
export ORACLE_OWNER=oracle
export ORACLE_SID=oradb
export ORACLE_TERM=xterm
export LD_ASSUME_KERNEL=2.4.19
export THREADS_FLAG=native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
/opt/ora9/product/9.2.0.4/bin/rman target / <run {
backup
tag 'dbfull'
format '/tmp/dbfull%u_%s_%p_%T'
database;
}
exit;
EOF
rm /opt/arch/* -rf
  下面為增量備份指令碼,增量備份分為0級,1級,2級,0級為基礎備份,1級為0級增量,恢復時
恢復0級,再恢復1級,oracle9i增量備份也要進行全庫掃描,oracle10G在這方面有專門的改善。
增量備份的好處是減小備份檔案大小,但同樣也增加恢復時的時間和複雜度,我更加適合資料量
特別的資料庫。
    
0級備份指令碼
#!/bin/sh
date=`date +%Y%m%d`
export ORACLE_BASE=/opt/ora9 
export ORACLE_HOME=/opt/ora9/product/9.2.0.4
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin
export ORACLE_OWNER=oracle
export ORACLE_SID=oradb
export ORACLE_TERM=xterm
export LD_ASSUME_KERNEL=2.4.19
export THREADS_FLAG=native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
/opt/ora9/product/9.2.0.4/bin/rman target / <run {
backup
incremental level 0
tag 'db0'
format '/tmp/db0%u_%s_%p_%T'
database;
#plus archivelog
#delete all input;
}
exit;
EOF
rm /opt/arch/* -rf

1級備份
#!/bin/sh
date=`date +%Y%m%d`
export ORACLE_BASE=/opt/ora9 
export ORACLE_HOME=/opt/ora9/product/9.2.0.4
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin
export ORACLE_OWNER=oracle
export ORACLE_SID=oradb
export ORACLE_TERM=xterm
export LD_ASSUME_KERNEL=2.4.19
export THREADS_FLAG=native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
/opt/ora9/product/9.2.0.4/bin/rman target / <run{
backup
incremental level 1
tag 'db1'
format '/tmp/db1%u_%s_%p_%T'
database;
#plus archivelog
#delete all input;
}
exit;
EOF
  如果出現故障,恢復的方法參考上面的就可以了,把相應該的備份檔案控制檔案和歸檔日誌都
放在相對的位置就可以進恢復了。

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

相關文章