目錄
1 資料庫修改為自動歸檔模式
2 修改rman參數
3 rman自動備份指令碼
4 設定系統自動備份參數
5 rman還原
恢複整個資料庫
恢複單個資料表空間
1 資料庫修改為自動歸檔模式。
為什麼要設定為自動歸檔模式呢。主要是因為,如果不設定為自動歸檔模式,使用rman的時候需要把資料庫修改到mount狀態而不是open狀態。而自動歸檔模式是可以在open使用中進行熱備的。下面是修改自動歸檔模式步驟:
1 Sqlplus / as sysdba 進入資料庫(本地)
2 Archive log list (查看是否是自動歸檔模式。)
下面顯示的是非歸檔模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 25
Current log sequence 27
3 shutdown immediate; 關閉資料庫
4 startup mount 啟動到mount狀態
5 alter database archivelog; 修改為歸檔模式
6 alter database open; 開啟資料庫
7 archive log list 產看是否啟動成功
以下為啟動成功後顯示
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 25
Next log sequence to archive 27
Current log sequence 27
2 修改rman參數
登陸 rman
Rman target rman/rman
在Oracle 9i中的配置情況
使用RMAN>show all;
可以顯示出RMAN 配置參數為:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
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 SNAPSHOT CONTROLFILE NAME TO ‘C:ORACLE..SNCFTEST.ORA’; #default
以下是每個參數的定義
1.configure retention policy to redundancy 1:
是用來決定那些備份不再需要了,它一共有三種可選項,分別是
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
CONFIGURE RETENTION POLICY TO NONE;
第一種recover window是保持所有足夠的備份,可以將資料庫系統復原到最近七天內的任意時刻。任何超過最近七天的Database Backup將被標記為obsolete。
第二種redundancy 是為了保持可以恢複的最新的5份Database Backup,任何超過最新5份的備份都將被標記為redundancy。它的預設值是1份。
第三種不需要保持策略,clear將恢複回預設的保持策略。
一般最安全的方法是採用第二種保持策略。
2.CONFIGURE BACKUP OPTIMIZATION OFF
預設值為關閉,如果開啟,rman將對備份的資料檔案及歸檔等檔案進行一種最佳化的演算法。
3.Configure default device type to disk:
是指定所有I/O操作的裝置類型是硬碟或者磁帶,預設值是硬碟
磁帶的設定是CONFIGURE DEFAULT DEVICE TYPE TO SBT;
4.CONFIGURE CONTROLFILE AUTOBACKUP OFF
強制資料庫在備份檔案或者執行改變資料庫結構的命令之後將控制檔案自動備份,預設值為關閉。這樣可以避免控制檔案和catalog丟失後,控制檔案仍然可以恢複。
5.CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'
是配置控制檔案的備份路徑和備份格式
6.CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
是設定資料庫裝置類型的並行度。
7.CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
是設定資料庫的每次備份的copy數量,oracle的每一次備份都可以有多份完全相同的拷貝。
8.CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1
是設定資料庫的歸檔日誌的存放裝置類型
9.CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:ORACLE… SNCFTEST.ORA'
是配置控制檔案的快照檔案的存放路徑和檔案名稱,這個快照檔案是在備份期間產生的,用於控制檔案的讀一致性。
10.CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'C:...%d_DB_%u_%s_%p';
是配置備份檔案的備份路徑和備份格式
CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR; 用於清除上面的通道配置
CONFIGURE EXCLUDE FOR TABLESPACE <tablespace> [CLEAR]; 此命令用於將指定的資料表空間不備份到備份組中, 此命令對唯讀資料表空間是非常有用的。
1.將備份檔案儲存到指定路徑,如 e:\backupb
configure channel device type disk format 'e:\backupb\%d_db_%u';
後面的%d_db_%u是儲存格式
2.我們也可以單獨指定control file 儲存在另一個路徑:如 e:\backupcontrol
configure controlfile autobackup format for device type disk to 'e:\backupcontrol\%F';
後面的%F是儲存格式
================
RMAN中常用configure命令2007-06-21 15:37
1 顯示當前的配置資訊
===========================
1.01 RMAN> show all;
1.02 查詢RMAN設定中非預設值:
SQL> select name,value from v$rman_configure;
2. 常用的configure選項
===========================
2.01 儲存策略 (retention policy)
configure retention policy to recovery window of 3 days;
configure retention policy to redundancy 3;
configure retention policy clear;
2.02 備份最佳化 backup optimization
configure backup optimization on;
configure backup optimization off;
configure backup optimization clear;
2.03 預設裝置 default device type
configure default device type to disk;
configure default device type to stb;
configure default device type clear;
2.04 控制檔案 controlfile
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/cfs01/backup/conf/conf_%F';
configure controlfile autobackup clear;
configrue controlfile autobackup format for device type disk clear;
configrue snapshot controlfile name to '/cfs01/backup/snapcf/scontrofile.snp';
configrue snapshot controlfile name clear;
2.05 並行數(通道數) device type disk|stb pallelism n;
configure device type disk|stb parallelism 2;
configure device type disk|stb clear;
configure channel device type disk format 'e/:rmanback_%U';
configure channel device type disk maxpiecesize 100m
configure channel device type disk rate 1200K;
configure channel 1 device type disk format 'e/:rmanback_%U';
configure channel 2 device type disk format 'e/:rmanback_%U';
configure channel 1 device type disk maxpiecesize 100m
configure channel 1 device type disk clear
configure channel 2 device type disk clear;
2.06 產生備份副本 datafile|archivelog backup copies
configure datafile backup copies for device type disk|stb to 3;
configure archivelog backup copies for device type disk|stb to 3;
configure datafile|archivelog backup copies for device type disk|stb clear
BACKUP DEVICE TYPE DISK DATABASE
FORMAT '/disk1/backup/%U', '/disk2/backup/%U', '/disk3/backup/%U';
2.07 排除選項 exclude
configure exclude for tablespace 'users';
configrue exclude clear;
2.08 備份組大小 maxsetsize
configure maxsetsize to 1G|1000M|1000000K|unlimited;
configure maxsetsize clear;
2.09 其它選項 auxiliary
CONFIGURE AUXNAME FOR DATAFILE 1 TO '/oracle/auxfiles/aux_1.f';
CONFIGURE AUXNAME FOR DATAFILE 2 TO '/oracle/auxfiles/aux_2.f';
CONFIGURE AUXNAME FOR DATAFILE 3 TO '/oracle/auxfiles/aux_3.f';
CONFIGURE AUXNAME FOR DATAFILE 4 TO '/oracle/auxfiles/aux_4.f';
-
CONFIGURE AUXNAME FOR DATAFILE 1 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 2 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 3 CLEAR;
CONFIGURE AUXNAME FOR DATAFILE 4 CLEAR;
---------------------------
Rman的format格式中的%
%c 備份片的拷貝數
%d 資料庫名稱
%D 位於該月中的第幾天 (DD)
%M 位於該年中的第幾月 (MM)
%F 一個基於DBID唯一的名稱,這個格式的形式為c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII為該資料庫的DBID,YYYYMMDD為
日期,QQ是一個1-256的序列
%n 資料庫名稱,向右填補到最大八個字元
%u 一個八個字元的名稱代表備份組與建立時間
%p 該備份組中的備份片號,從1開始到建立的檔案數
%U 一個唯一的檔案名稱,代表%u_%p_%c
%s 備份組的號
%t 備份組時間戳記
%T 年月日格式(YYYYMMDD)
*本次rman參數的配置情情況:
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/backup/conf_%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 20 M;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO
'/u01/app/oracle/product/10.2.0/db_1/dbs/snapcf_ora10g.f'; # default
建議清除這些設定,清除後恢複正常。
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' clear;
3 rman自動備份指令碼
完全備份指令碼
rman target / <<EOF
run{
allocate channel 'dev1' type disk;
backup full tag 'dbfull_orcl' format '/u01/app/oracle/backup/fulldb_orcl%u_%p_%c'database;
sql 'alter system archive log current';
backup filesperset 3 archivelog all delete input;
release channel dev1;
}
增量備份:
0級備份指令碼:
#set porfile_env
export ORACLE_SID=ora10g
# rman level0 backup
rman log='/u01/app/oracle/rmandir/log/db1_rman.log' append <<EOF
connect target /;
run
{
allocate channel c1 type disk;
backup incremental level=0 database format'/u01/app/oracle/backup/db1_level0_%U' tag='level0';
sql 'alter system archive log current';
backup archivelog all format'/u01/app/oracle/log/db1_arch_%U' delete input;
release channel c1;
}
EOF
1級備份指令碼
# set porfile_env
export ORACLE_SID=ora10g
# rman level0 backup
rman log='/u01/app/oracle/rmandir/log/db1_rman.log' append <<EOF
connect target /;
run
{
allocate channel c1 type disk;
backup incremental level=1 database format '/u01/app/oracle/backup/db1_level1_%U' tag='level1';
sql 'alter system archive log current';
backup archivelog all format '/u01/app/oracle/log/db1_arch_%U' delete input;
release channel c1;
}
EOF
2級備份指令碼:
# set porfile_env
export ORACLE_SID=ora10g
# rman level0 backup
rman log='/u01/app/oracle/rmandir/log/db1_rman.log' append <<EOF
connect target /;
run
{
allocate channel c1 type disk;
backup incremental level=2 database format '/u01/app/oracle/backup/db1_level2_%U' tag='level2';
sql 'alter system archive log current';
backup archivelog all format '/u01/app/oracle/log/db1_arch_%U' delete input;
release channel c1;
}
EOF
檢查指令碼:
export ORACLE_SID=ora10g
rman log='/u01/app//oracle/log/rmancheck.log' append <<EOF
connect target /;
run
{
# check database
backup validate check logical database;
# check backup set
restore database validate check logical;
}
EOF
刪除到期備份檔案指令碼:
export ORACLE_SID=ora10g
rman log='/u01/app/oracle/log/rmandelset.log' append <<EOF
connect target /;
run
{
delete noprompt obsolete;
}
EOF
4 設定系統自動備份參數:
man增量備份計劃,把用到的指令碼貼出來,方便以後尋找。
crontab 自動計劃。設定自動執行計畫,在rman初始化環境裡面,開啟自動備份控制檔案功能
#crontab -e
0 1 * * 0 su – oracle -c /xxx/rmanlevel0.sh
//每周日1:00執行0級備份
0 1 * * 1-3,5-6 su – oracle -c /xxx/rmanlevel2.sh
//每周一至周三,周五至周六1:00執行2級增量備份
0 1 * * 4 su – oracle -c /xxx/rmanlevel1.sh
//每周四1:00執行1級增量備份
0 18 * * 6 su - oracle -c /xxx/rmancheck.sh
//每周六16點執行檢測
0 18 * * 0 su – oracle –c /xxx/rman_delete.sh
//每周日18:00刪除到期的的備份資料
5 rman還原
RMAN 的整個恢複過程可以分為還原(restore)與恢複(recover),他們在含義上是有
很大差別的,一個是指物理意義的檔案的還原與拷貝,一個是指資料庫一致性的恢複,所以,
正確的理解這兩個概念,有助於正確的恢複資料庫。
對於RMAN 的備份,還原作業只能是在用RMAN 或RMAN 包來做了,對於恢複操作
則是很靈活的了,除了RMAN,也可以在SQLPLUS 中完成。還原與恢複一個資料庫,可
以用如下兩個簡單的命令完成
RMAN>restore database;
RMAN>recover database;
恢複整個資料庫
在恢複整個資料庫之前必須讓資料庫處於安裝的狀態(mount狀態)
sql>startup mount
rman target / <<EOF
run {
allocate channel 'dev1' type disk ;
allocate channel 'dev2' type disk ;
allocate channel 'dev3' type disk ;
restore database ;
recover database ;
release channel dev1 ;
release channel dev2 ;
release channel dev3 ;
}
恢複單個資料表空間
在恢複該資料表空間之前讓該資料表空間處於離線的狀態(offline狀態)
svrmgrl>alter tablespace users offline;
rman target / <<EOF
run {
allocate channel 'dev1' type disk ;
allocate channel 'dev2' type disk ;
allocate channel 'dev3' type disk ;
restore tablespace users ;
recover tablespace users ;
release channel dev1 ;
release channel dev2 ;
release channel dev3 ;
}
恢複一個資料表空間,或者恢複一個資料檔案,相對比較恢複資料庫可能花費更少的時間。
RMAN> SQL "ALTER TABLESPACE tools OFFLINE IMMEDIATE";
RMAN> RESTORE TABLESPACE tools;
RMAN> RECOVER TABLESPACE tools;
RMAN> SQL "ALTER TABLESPACE tools ONLINE";
對於資料庫與資料檔案,可以從指定的tag恢複
RMAN>RESTORE DATAFILE 1 FROM TAG=’tag name’
對於時間點恢複等不完全恢複,可能只有完全的還原資料庫了。
RMAN> RUN {
2> ALLOCATE CHANNEL c1 TYPE DISK;
3> ALLOCATE CHANNEL c2 TYPE DISK;
4> SET UNTIL TIME = '2002-12-09:11:44:00';
5> RESTORE DATABASE;
6> RECOVER DATABASE;
7> ALTER DATABASE OPEN RESETLOGS; }
不完全恢複在RMAN 中還可以用基於日誌的恢複
RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1;
3> ALTER DATABASE MOUNT;
4> RESTORE DATABASE;
5> RECOVER DATABASE; # recovers through log 119
6> ALTER DATABASE OPEN RESESTLOGS;
7> }
如果有可能,也可以恢複資料檔案到一個新的位置
SET NEWNAME FOR datafile
'/u01/oradata/tools01.dbf' TO '/tmp/tools01.dbf';
RESTORE datafile '/u01/oradata/tools01.dbf';
SWITCH DATAFILE ALL;
除了恢複資料庫與資料檔案,我們也可以恢複控制檔案,需要啟動到nomount 下,用如下
的命令即可
14
Restore controlfile from ‘file name’
Restore controlfile from autobackup
Restore controlfile from tag=‘……’
在正常情況下,不用恢複歸檔日誌,恢複進程會自動尋找所需要的歸檔日誌,當然我們也可
以指定恢複到哪裡。
SET ARCHIVELOG DESTINATION TO '/u02/tmp_restore';
RESTORE ARCHIVELOG ALL;
如果使用的伺服器參數檔案(spfile),RMAN 可以備份該參數檔案,如果發生檔案損壞,可
以用RMAN 恢複spfile 參數檔案,在沒有參數檔案的情況下,用Rman 的臨時參數檔案啟
動資料庫到Nomount 下,執行如下命令即可
Restore controlfile from autobackup
Restore controlfile from ‘file name’
# find / -name rman
$ echo $PATH
$ sqlplus / as sysdba
SQL> startup mount;
SQL> alter database archivelog;
SQL> quit
$ rman
RMAN> connect target / //串連
RMAN> list backupset; //查看備份
RMAN> backup database;//備份命令
RMAN> backup incremental level=0 database; //0級備份
RMAN> backup incremental level 1 database; //1級備份
RMAN> list backupset;
RMAN> show all; //查看命令參數
RMAN> quit
$ ls /u01/app/oracle/flash_recovery_area/ORCL/backupset/2012_07_14/
$ /u01/app/oracle/oradata/ORCL
$ strings control01.ctl //二進位檔案