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 / <<EOF
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 / <<EOF
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 / <<EOF
run{
backup
incremental level 1
tag 'db1'
format '/tmp/db1%u_%s_%p_%T'
database;
#plus archivelog
#delete all input;
}
exit;
EOF
若是出現故障,恢復的方法參考上面的就能夠了,把相應該的備份文件控制文件和歸檔日誌都
放在相對的位置就能夠進恢復了。sql