RMAN (recovery manager)linux
使用rman前,先確認庫爲歸檔模式sql
默認使用控制文件存放備份與恢復的信息,因此控制文件變得很重要數據庫
[oracle@station245 ~]$ echo $ORACLE_SID
orclvim
[oracle@station245 ~]$ rmanoracle
RMAN> connect target / --以sys鏈接當前sid所對應的庫app
connected to target database (not started) --能夠看到是沒有啓動的狀態ide
RMAN> startup nomount --在rman下能夠啓庫直到open狀態;優化
RMAN> alter database mount;spa
using target database control file instead of recovery catalog
database mounted設計
RMAN> alter database open;
database opened
[oracle@station245 ~]$ rman target / --直接這樣去連
Recovery Manager: Release 10.2.0.1.0 - Production on Sat Jan 22 15:49:11 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: ORCL (DBID=1268875410) --能夠看到連到orcl,而且是open狀態
RMAN>
SQL> select dbid,name,open_mode from v$database;
DBID NAME OPEN_MODE
---------- --------- ----------
1268875410 ORCL READ WRITE
--在sqlplus下驗證orcl庫的dbid值和rman裏顯示的對應
rman下有兩種備份指令:
backup 邏輯物理備 基於塊級別的備份 備份使用過的塊
copy 物理備 源文件和備份文件大小同樣
--若是我有個表空間1T大小,只寫了100G數據在裏面;使用backup備備100G;而使用copy備備1T
RMAN> backup database; --備全庫
Starting backup at 22-JAN-11 --備份開始時間
using target database control file instead of recovery catalog --表示備份信息存放到控制文件裏而不是恢復目錄
allocated channel: ORA_DISK_1 --分配通道
channel ORA_DISK_1: sid=153 devtype=DISK --通道的sid值,和類型爲磁盤而不是磁帶
channel ORA_DISK_1: starting full datafile backupset --開始一個備份集
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
input datafile fno=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf --全部的數據文件被編號並放入此備份集
channel ORA_DISK_1: starting piece 1 at 22-JAN-11 --啓動一個備份片
channel ORA_DISK_1: finished piece 1 at 22-JAN-11 --完成一個備份片
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_22/o1_mf_nnndf_TAG20110122T155540_6mo3cwqh_.bkp tag=TAG20110122T155540 comment=NONE --這裏能夠看到備份片的路徑,和tag等信息;這個備份片就包括了前面的備份集
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35 --這裏表示數據文件的備份完成,共使用了35秒
channel ORA_DISK_1: starting full datafile backupset --又開始一個備份集
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset --這個備份集裏包括了控制文件
including current SPFILE in backupset --還包括了spfile參數文件
channel ORA_DISK_1: starting piece 1 at 22-JAN-11 --又啓動一個備份片
channel ORA_DISK_1: finished piece 1 at 22-JAN-11 --又完成這個備份片
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_22/o1_mf_ncsnf_TAG20110122T155540_6mo3f1j7_.bkp tag=TAG20110122T155540 comment=NONE
--控制文件和參數文件的備份片位置等信息
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 --控制文件和參數文件的備份花了3秒
Finished backup at 22-JAN-11
[oracle@station245 ~]$ ls /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_22/ -lh
total 578M
-rw-r----- 1 oracle oinstall 6.9M Jan 22 15:56 o1_mf_ncsnf_TAG20110122T155540_6mo3f1j7_.bkp
-rw-r----- 1 oracle oinstall 571M Jan 22 15:56 o1_mf_nnndf_TAG20110122T155540_6mo3cwqh_.bkp
--這裏能夠看到全部數據文件備份集的大小爲571M,比物理上那幾個dbf的大小之和要小不少;說明backup邏輯物理備只備使用的塊
備份單個文件或者指定的多個文件
RMAN> backup spfile;
RMAN> backup current controlfile;
--注意備份當前控制文件要加current;上面命令不加current是不存在的;控制文件默認有多個,但數據庫使用只使用其中一個,再反應給其餘鏡像
RMAN> backup datafile 4; --備份file#爲4的數據文件
RMAN> backup datafile 1,4; --備份多個,用逗號隔開就能夠
RMAN> backup tablespace users; --備份表空間
RMAN> backup tablespace sysaux,users;
RMAN> backup archivelog all; --備份全部的歸檔日誌
RMAN> backup full database plus archivelog; --還能夠備份全庫時加上備份歸檔日誌
RMAN> backup archivelog all delete input; --備份全部的歸檔日誌並把被備份的文件給刪除
跳過一些特殊狀態的對象不備份使用 skip
SQL> alter tablespace users read only;
RMAN> backup database skip readonly; --這樣備份就能夠看到跳過備份users01.dbf
SQL> alter tablespace users read write;
============================================================
上面能夠看到備份所有備份到閃回區
--如何備份到指定的路徑 使用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)
[oracle@station245 ~]$ mkdir /u01/app/oracle/rman
RMAN> backup database format '/u01/app/oracle/rman/dborclfull_%U';
RMAN> backup database format '/u01/app/oracle/rman/orcl_%T_%s';
--
run { } --大括號中間能夠加任意備份命令
RMAN> run { backup database; } --備全庫
copy的使用:
RMAN> copy current controlfile to '/u01/app/oracle/rman/bakcontrl.ctl';
--等效於 SQL> alter database backup controlfile to '/u01/app/oracle/rman/bakcontrl.ctl';
RMAN> copy datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to '/u01/app/oracle/rman/users01.dbf';
--等效於SQL> alter tablespace users begin backup;
cp /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/rman/users01.dbf
SQL>alter tablespace users end backup;
copy是物理備份,用得少,主要仍是用backup
list 查看備份集命令
RMAN> list backup;
RMAN> delete noprompt expired backup;
RMAN> list backup of tablespace users; --列出users表空間的備份
RMAN> list backup of controlfile;
RMAN> list backup of archivelog all;
RMAN> list backup of spfile;
RMAN> list copy;
RMAN> list copy of tablespace users;
RMAN> list copy of datafile 4;
RMAN> list copy of controlfile;
RMAN> list copy of archivelog all;
crosscheck 覈對備份信息
確保rman資料庫信息與備份文件信息保持同步,此命令檢查rman資料庫記錄的備份文件;備份文件的狀態有avaliable,expired等
====================
RMAN> crosscheck backup;
crosschecked backup piece: found to be 'AVAILABLE' --一個備份爲available狀態
物理上rm掉它 --手動在物理上幹掉它
RMAN> crosscheck backup;
crosschecked backup piece: found to be 'EXPIRED' --再次檢測就是expired狀態
RMAN> delete expired backup; --這樣刪除它,可是要求用戶去Y/N確認
RMAN> delete noprompt expired backup; --能夠加一個noprompt直接確認
============================
RMAN> crosscheck backup of tablespace users;
RMAN> crosscheck backup of controlfile;
RMAN> crosscheck backup of spfile;
RMAN> crosscheck backup of database;
RMAN> crosscheck backup of archivelog all;
RMAN> crosscheck copy;
RMAN> crosscheck copy of database;
RMAN> crosscheck copy of controlfile;
RMAN> crosscheck copy of tablespace users;
RMAN> crosscheck copy of spfile;
RMAN> crosscheck copy of archivelog all;
delete
RMAN> delete noprompt expired backup;
RMAN> delete obsolete; --刪除除舊的備份,與rman保留策略有關
RMAN> delete noprompt backupset 23; --指定刪除第23號備份集
RMAN> delete noprompt backuppiece '/u01/app/oracle/rman/orcl_20110122_23';
--指定刪除一個備份片
RMAN> delete backup; --刪除全部的backup備份
RMAN> delete copy; --刪除全部的copy備份
change
RMAN> change backupset 21 unavailable; --把備份集21改成unavailable狀態;那麼crosscheck都不SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf' size 10m;
去檢測它
RMAN> change backupset 21 available;
RMAN> change backupset 21 keep forever logs; --配置21號備份集永久保留,須要恢復目錄的情況
RMAN> change backupset 21 keep until time 'sysdate+100' logs;
--保留100天
RMAN> change backupset 21 nokeep;
--刪除它的保留屬性
=====================================
rman環境的配置:
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
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 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 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/10g/dbs/snapcf_orcl.f'; # default
1,備份保留策略:
分爲兩種:
一種:冗餘策略
若是冗餘備份的數量超過了指定數量,多的將會被標記爲obsolete
另外一種:時間策略
表示至少有一個備份能恢復到指定的日期
RMAN> CONFIGURE RETENTION POLICY TO recovery window of 10 days;
--十天內的備份都不會被標記爲obsolete
RMAN>CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf' size 10m;
第二個策略中說明至少須要有三個冗餘的備份存在,若是多餘三個備份
以上的備份將標記爲obsolete
2,配置存儲類型
磁盤 DISK
磁帶 SBT
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO SBT;
RMAN> backup spfile; --會報錯,由於沒有磁帶鏈接這臺機
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK; --改加磁盤
3,控制文件的自動備份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on; --打開以後,會在任何backup或者copy命令以後,或者任何數據庫的結構改變以後
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/rman/%F';
--配置自動備份控制文件的路徑,默認是在閃回區裏;這裏配置到了/u01/app/oracle/rman下
RMAN> backup spfile; --配置完成後,隨便備一下,就會在最後看到下面的信息
Starting Control File and SPFILE Autobackup at 23-JAN-11
piece handle=/u01/app/oracle/rman/c-1268875410-20110123-00 comment=NONE
Finished Control File and SPFILE Autobackup at 23-JAN-11
--繼續驗證:
RMAN> copy datafile 4 to '/u01/app/oracle/rman/db4.dbf';
--這樣也會引起控制文件的自動備份
SQL> create tablespace t1 datafile '/u01/app/oracle/oradata/orcl/t1.dbf' size 20M;
--也會引起控制文件的自動備份
SQL> drop tablespace t1 including contents and datafiles;
--會
SQL> create table t1 as select * from scott.emp;
--不會,由於建表並無改變數據庫的結構
4,配置多通道
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2; --把並行度配置爲2
下面再來對通道進行配置
RMAN> configure channel 1 device type disk format '/u01/app/oracle/rman/%U';
--設置通道1備份到/u01/app/oracle/rman/%U
RMAN> configure channel 2 device type disk format '/u01/app/oracle/rman2/%U'; --設置通道2備份到/u01/app/oracle/rman2/%U
RMAN> backup database; --驗證成功
5,配置最大備份集的大小
RMAN> CONFIGURE MAXSETSIZE TO 1G;
6,配置備份集的優化:
RMAN> CONFIGURE BACKUP OPTIMIZATION on;
=================================================================
上面的環境配置是默認狀況,但通常咱們寫腳本手工指定通道,備份路徑,最大備份集的大小等等)
run 腳本
[oracle@station245 ~]$ vim /u01/app/oracle/rman01.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
backup database;
release channel a1;
release channel a2;
}
======================
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman01.sql --運行剛纔的這個腳本;這個腳本里的語句也能夠直接在rman下運行
[oracle@station245 ~]$ vim /u01/app/oracle/rman02.sql
run {
allocate channel a1 type disk maxpiecesize 100m; --一個通道最大100M
allocate channel a2 type disk maxpiecesize 100m;
backup database format '/u01/app/oracle/rman/%U'; --使用format指定路徑
release channel a1;
release channel a2;
}
======================
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman02.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
backup database filesperset 2; --指定每兩個數據文件一個備份集
release channel a1;
release channel a2;
}
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman03.sql
==================
[oracle@station245 ~]$ vim /u01/app/oracle/rman04.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
copy datafile 4 to '/u01/app/oracle/rman/db4.dbf';
copy datafile 5 to '/u01/app/oracle/rman/db5.dbf';
release channel a1;
release channel a2;
}
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman04.sql
=====================
--寫一個全備腳本,先把rman環境都還原,再運行下面的腳本
[oracle@station245 ~]$ vim /u01/app/oracle/rman_full.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
allocate channel a3 type disk;
backup database format '/u01/app/oracle/rman/full_%U';
sql 'alter system archive log current';
backup archivelog all format '/u01/app/oracle/rman/arch_%U' delete input;
backup format '/u01/app/oracle/rman/ctl_%U' current controlfile;
backup spfile format '/u01/app/oracle/rman/spfile_%U';
crosscheck backup;
crosscheck archivelog all;
delete noprompt backup of database completed before 'sysdate-10';
delete noprompt backup of archivelog all completed before 'sysdate-20';
release channel a1;
release channel a2;
release channel a3;
}
[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman_full.sql
--執行全備
[oracle@station245 ~]$ ls /u01/app/oracle/rman
arch_2dm2rd8b_1_1 full_28m2rd7n_1_1 full_2bm2rd87_1_1
arch_2em2rd8b_1_1 full_29m2rd7n_1_1 full_2cm2rd87_1_1
ctl_2fm2rd8f_1_1 full_2am2rd7o_1_1 spfile_2gm2rd8g_1_1
查看備份進度的語句
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE" FROM V$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' AND TOTALWORK != 0 AND SOFAR <> TOTALWORK;
================================================================
rman恢復
數據文件丟失:
能夠脫機的 在線恢復
不能夠脫機的 在mount狀態恢復
1,能夠脫機的數據文件丟失的恢復方法:
[oracle@station245 ~]$ rm /u01/app/oracle/oradata/orcl/users01.dbf
--物理上丟失user01.dbf
[oracle@station245 ~]$ rman target /
RMAN> sql 'alter database datafile 4 offline';
--把4號數據文件脫機,若是不知道編號也能夠直接寫/u01/app/oracle/oradata/orcl/users01.dbf
RMAN> restore datafile 4; --還原,表示從備份物理還原到它的位置
RMAN> recover datafile 4; --介質恢復,應用日誌,恢復備份時間點到如今的改變
RMAN> sql 'alter database datafile 4 online';
2,不能夠脫機
[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/undotbs01.dbf
--物理上丟失undotbs01.dbf
SQL> startup force mount
[oracle@station245 ~]$ rman target /
connected to target database: ORCL (DBID=1268875410, not open)
--能夠看到是mount狀態
RMAN> restore datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf';
--還原
RMAN> recover datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf';
--恢復
RMAN> alter database open;
--能夠open了
3,控制文件恢復
RMAN> backup current controlfile;
[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/control0*
SQL> startup force nomount
[oracle@station245 ~]$ rman target /
connected to target database: orcl (not mounted)
RMAN> restore controlfile from '/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_23/o1_mf_ncnnf_TAG20110123T155927_6mqqz05y_.bkp';
--從一個控制文件備份裏還原,若是打開控制文件自動備份的話,可使用restore controlfile from autobackup;
RMAN> alter database mount;
RMAN> recover database;
RMAN> alter database open resetlogs; --須要resetlogs打開,那麼之前的備份無效,須要從新全備
4,dbf所在磁盤故障,恢復時並rename到另外一個磁盤
[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/users01.dbf -rf
RMAN> run {
2> sql 'alter database datafile 4 offline';
3> set newname for datafile 4 to '/u01/app/oracle/oradata/user01.dbf';
4> restore datafile 4;
5> switch datafile '/u01/app/oracle/oradata/user01.dbf'; --後接新路徑
6> recover datafile 4;
7> sql 'alter database datafile 4 online';
8> }
5,在rman全備以後,有改變過數據庫結構(好比說建立過數據文件),如何恢復?
先全備
再建立下面這個表空間
SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf' size 10m;
SQL> create table t3 tablespace t3 as select * from scott.emp;
SQL> select TABLE_NAME,TABLESPACE_NAME from dba_tables where table_name='T3';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
T3 T3
[oracle@station245 ~]$ rm /u01/app/oracle/oradata/orcl/t3.dbf
--模擬t3表空間丟失
RMAN> sql 'alter database datafile 8 offline';
RMAN> restore datafile 8; --這樣不成功,由於備份裏沒有它,不能還原
RMAN> sql "alter database create datafile ''/u01/app/oracle/oradata/orcl/t3.dbf'' as ''/u01/app/oracle/oradata/orcl/t3.dbf''";
RMAN> recover datafile 8;
RMAN> sql 'alter database datafile 8 online';
--
rman-level 增量
目地:爲了減小備份時的備分量,達到減小備份時間和備份時的負載
可是,恢復時步驟加長了
dump 系統備份命令 也有增量備份的概念
兩種:
差別增量備份 level 0-4 0級別爲全備
數字n表明備份上一個小於等於n級別以來的差別增量
累計增量備份 level 0-4c c表示cumulative
備份是表明備份上一個小於等於n-1級別以來的增量
備份方案
星期 天 一 二 三 四 五 六
級別 0 2 2 1 2 2 2
恢復時的狀況:
星期一崩潰: 恢復星期天的0級+星期一的2級+日誌
星期二崩潰: 恢復星期天的0級+星期一的2級+星期二的2級+日誌
星期三崩潰: 恢復星期天的0級+星期三的1級+日誌 --這裏能夠看到在星期三設計1級是爲了減小的恢復的步驟
星期四崩潰: 恢復星期天的0級+星期三的1級+星期四的2級+日誌
星期五:。。。。。。。
星期六:。。。。。。。
另外一種備份策略:
0 4 3 2 2 1 2 2 1 2 2 1 2 2
元旦 天天 每週日 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
恢復的狀況:(假如第一個週日爲1月7號)
一月3號崩潰: 恢復元旦的0級+2號的4級+3號的4級+日誌
一月9號崩潰: 恢復元旦的0級+7號的3級+8號的4級+日誌
二月3號崩潰: 恢復元旦的0級+2月1號的2級+2月2號的4級+2月3號的4級+日誌
五月2號崩潰: 恢復元旦的0級+4月1號的1級+5月1號的2級+5月2號的4級+日誌
十一月23號崩潰(假如11月22號爲週日):
恢復元旦的0級+10月1號的1級+11月1號的2級+11月22號的3級+11月23號的4級+日誌
上面的備份策略是每週一輪,和每一年一輪,能夠本身去設定好比說10天一輪,半月一輪,一月一輪,一季度一輪
如:
天數 1 2 3 4 5 6 7 8 9 10
級別 0 2 2 1 2 2 1 2 2 1
再來看累計差別增量:
備份方案
星期 天 一 二 三 四 五 六
級別 0 2 2c 1 2 2c 2c
恢復的狀況:
星期一崩潰: 恢復星期天的0級+星期一的2級+日誌
星期二崩潰: 恢復星期天的0級+星期二的2c級+日誌
星期五崩潰: 恢復星期天的0級+星期三的1級+星期五的2c級+日誌
=====================================
備份的寫法:
如下是零級備份的例子
backup incremental level 0 database;
一級差別增量例子
backup incremental level 1 database;
一級累計增量例子
backup incremental level 1 cumulative database;
驗證增量備份:
RMAN> backup incremental level 0 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';
piece handle=/u01/oracle/rmanbak/ORCL_4_1
RMAN> sql 'create table scott.test01 as select * from scott.emp';
--作這一步的目地就是作一些差別
RMAN> backup incremental level 2 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';
piece handle=/u01/oracle/rmanbak/ORCL_5_1
--再作一些差別
RMAN> sql 'insert into scott.test01 select * from scott.test01';
RMAN> sql 'commit';
RMAN> backup incremental level 2 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';
piece handle=/u01/oracle/rmanbak/ORCL_6_1
RMAN> backup incremental level 1 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';
piece handle=/u01/oracle/rmanbak/ORCL_7_1
RMAN> backup incremental level 1 cumulative tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';
piece handle=/u01/oracle/rmanbak/ORCL_8_1
RMAN> list backup of tablespace users;
--比較大小去驗證
=========================================
上面的策略制定OK後,如今就是要把腳本寫好,並自動運行
備份方案
星期 天 一 二 三 四 五 六
級別 0 2 2 1 2 2 2
以上面的方案爲例:
[oracle@li ~]$ vim /u01/oracle/level0.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 0 database plus archivelog delete input;
release channel aa;
release channel bb;
}
[oracle@li ~]$ vim /u01/oracle/level1.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 1 database plus archivelog delete input;
release channel aa;
release channel bb;
}
[oracle@li ~]$ vim /u01/oracle/level2.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 2 database plus archivelog delete input;
release channel aa;
release channel bb;
}
週日執行
rman target / @/u01/oracle/level0.rman
週三執行
rman target / @/u01/oracle/level1.rman
週一,二,四,五執行
rman target / @/u01/oracle/level2.rman
使用linux的crontab服務讓它自動運行
su - oracle
crontab -e
01 03 * * 0 rman target / @/u01/oracle/level0.rman
01 03 * * 1,2,4,5 rman target / @/u01/oracle/level2.rman
01 03 * * 3 rman target / @/u01/oracle/level1.rman
[root@li ~]# /etc/init.d/crond restart
[root@li ~]# chkconfig crond on
====================================
把下面的備份策略,寫好腳本,讓它自動運行
0 4 3 2 2 1 2 2 1 2 2 1 2 2
元旦 天天 每週日 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
[oracle@li ~]$ vim /u01/oracle/level0.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 0 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}
[oracle@li ~]$ vim /u01/oracle/level1.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 1 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}
[oracle@li ~]$ vim /u01/oracle/level2.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 2 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}
[oracle@li ~]$ vim /u01/oracle/level3.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 3 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}
[oracle@li ~]$ vim /u01/oracle/level4.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 4 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}
crontab -e
01 03 1 1 * rman target / @/u01/oracle/level0.rman
01 03 1 4,7,10 * rman target / @/u01/oracle/level1.rman
01 03 1 2,3,5,6,8,9,11,12 * rman target / @/u01/oracle/level2.rman
01 03 * * 0 rman target / @/u01/oracle/level3.rman
01 03 2-31 * 1-6 rman target / @/u01/oracle/level4.rman
===============================================================================