目錄
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是保持所有足夠的備份,可以將數據庫系統恢復到最近七天內的任意時刻。任何超過最近七天的數據庫備份將被標記爲obsolete。
第二種redundancy 是爲了保持可以恢復的最新的5份數據庫備份,任何超過最新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 //二進制文件