oracle rman

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

 

===============================================================================

相關文章
相關標籤/搜索