⑴ RMAN備份策略都有哪些
建立增量備份:
如果資料庫運行於不歸檔模式下,只能在資料庫干凈關閉的情況下 ( 以 normal 、
immediate 、 transactional 方式關閉 ) 才能進行一致性的增量備份,如果資料庫運行於歸
檔模式下,那即可以在資料庫關閉狀態進行,也可以在資料庫打開狀態進行備份。再
次說明了打開歸檔模式的優勢,歸檔日誌也就是多佔些磁碟空間,可也相當於又給數
據加了層保護。建立增量備份,實質就是一個參數 incremental level=n ,在執行 backup
命令時加上即可,例如,建立一個增量級別 0 的全庫備份:
rman> backup incremental level=0 database;
再例如,建立一個增量級別 1 的 users01.dbf 數據文件備份
rman> backup incremental level=1 tablespace system
datafile 『e:\oracle\oraback\sj_data.dbf』;
註: rman 默認創建的增量備份是 differential 方式,如果要建立 cumulative 方式的增
量備份,在執行 backup 命令時顯式指定即可,例如:
rman> backup incremental level=2 cumulative database;
建立鏡像復制:
rman 中的鏡像復制實質與通過操作系統 命令備份相同,甚至連命令的格式
都相似,只不過直接應用操作系統的 命令復制數據文件時,只是文件拷貝,而rman
的 則能夠在復制的同時,驗證數據的有效性。個人認為 rman 中的鏡像復制應用
有限,而且也體現不出 rman 的優勢,所以俺也只是大致了解了概念,沒有進行過實際
操作,感興趣的朋友可以自己做做試驗,這里就不多做介紹了)
建立冗餘備份
(
rman 提供了一種更謹慎的備份策略: plexed 方式備份,其實質即是在生成備份
集的同時,向指定位置生成指定份數 ( 最大不超過 4 份 ) 的備份集復制,以避免在災難性
事故時資料庫損壞和備份丟失的情況下導致完全崩潰,提高備份可用性。 rman 中提供
了三種方式實現 plexed 方式備份:
1) 在 rman 中執行 backup 命令時顯式指定 copies 參數。例如:
rman> backup copies 3 database;
上述命令將會在全庫備份的同時,自動生成當前備份集的 2 份拷貝到默認備份目錄。
2) 在 run {}命令塊中利用 set backup copies 命令為該命令塊中所有的 backup命令設
置 plexed 方式,例如:
rman> run{
set backup copies 2;
backup device type disk format
『e:\oracle\oraback\dyk1\%u』,'e:\oracle\oraback\dyk2\%u』
tablespace users,sales;
}
上述命令將生成兩份備份集,分別存儲到 e:\oracle\oraback\dyk1 和
e:\oracle\oraback\dyk2 目錄。
3) 通過 configure ….. backup copies 命令設置預定義的備份 plexed 方式
configure … backup copies 命令格式,可以為指定設備類型設置默認備份拷貝數
量。這個配置僅適用於數據文件與歸檔重做日誌文件和備份,並且,只有在使用自動
分配的通道時才能夠使用 configure …
backup copies 命令設置的配置。例如:
rman> configure default device type to disk;
rman> configure datafile backup copies for device type disk to 2;
rman> configure archivelog backup copies for device type disk to 2;
上述命令將 disk 設置上數據文件與歸檔文件的拷備數量設置為 2 ,當再執行 backup
database 備份時,即會自動生成 2 份數據文件的備份集。
設置 rman 備份的保存策略
策略,如果資料庫非常大,並且備份執行也比較頻繁,有必要對這些備份文件的
保存制訂合理的策略。在通過 rman 創建的備份片段中,由於備份文件也是由 rman創
建和維護,所以手工刪除並不明智,並且 rman 也提供了備份保留策略,合理制訂,由
rman 自動刪除陳舊備份文件更加安全也更加方便, rman 中提供了兩種備份保留策略:
基於時間,和基於冗餘數量
為 rman 設置了備份保留策略之後, rman 會自動判斷哪些備份集或鏡像復制文件
不必再保留。這些備份文件將會被標記為 「 廢棄 (obsolete)」 ,可以通過 report obsolete
命令查看當前處於廢棄狀態的備份文件,或者通過 delete obsolete 命令刪除這些廢棄的
備份。例如:
rman> report obsolete;
rman> delete obsolete;
在執行刪除命令時有兩點需要了解:
如果被判斷為廢棄的備份是一個單獨數據文件的鏡像復制,那麼在執行 delete 命
令時將直接刪除這個鏡像復制文件;如果被判斷為廢棄的備份是一個備份集中的一部
分,則必須等到整個備份集中所有其它文件都被廢棄之後,才能刪除這個備份集。
1) 基於時間的備份保留策略。
說的簡單些,就是你希望資料庫最早能恢復到幾天前。比如將恢復時間段設置為 7,那
么 rman 所保留的備份即是可以保證你將資料庫恢復到一周內任何時刻下那些文件。設
置基於時間的備份保留策略可以通過 configure 命令,例如:
rman> configure retention policy to recovery window of n days;
註: n= 大於 0 的正整數執行該命令後, rman 將始終保留那些將資料庫恢復到 n 天前的
狀態時需要用到的備份,比如,恢復時間段被設置為 7 天,那麼各個數據文件的備
份必須滿足如下條件:
sysdate-(select checkpoint_time from v$datafile)>=7
任何不滿足上述條件的備份都將被 rman 廢棄並可通過 delete obsolete 命令刪除。
2) 基於冗餘數量的備份保留策略
基於冗餘數量實質即某個數據文件以各種形式(包括備份集和鏡像復制)存在的
備份的數量。如果某個數據文件的冗餘備份數量超出了指定數量, rman 將廢棄陳舊的
備份。同樣,基於數量的備份保留策略也是通過 configure 命令設置,例如:
rman> configure retention policy to recovery window of n days;
同上: n= 大於 0 的正整數
也可以設置不保留任何數據的策略
rman> configure retention policy to none;
備份優化
rman 中的備份優化 (backup optimization) 是指在備份過程中,如果滿足特定條件, rman
將自動跳過某些文件而不將它們包含在備份集中以節省時間和空間。通常滿足如下幾
個條件情況下,才能夠啟用備份優化的功能:
configure backup optimization 參數置為 on ;
執行的 backup database 或 backup archivelog 命令中帶有 all 或 like 參數。
分配的通道僅使用了一種設備類型,也就是沒有同時分配使用 sbt (磁帶)與 disk
(磁碟)的多個通道。
打開備份優化設置通過如下命令:
rman> configure backup optimization on;
在進行備份優化時, rman 是如何判斷要備份的文件是否需要被優化,這個演算法就
相當復雜,可能影響優化演算法的因素也非常多,假如某庫在上午 9 點被執行過一次全
庫備份,等下午 3 點再次執行全庫備份時,備份的文件沒有變動而且也已經被備份過
時,才會跳過這部分文件。所以理論上備份優化僅對於只讀表空間或 offline 表空間起
作用。當然對於已經備份過的 archivelog 文件,它也會跳過
3 )基礎補充
format 字元串替代變數,使用 format 參數時可使用的各種替換變數,如下:
%c :備份片的拷貝數 ( 從 1 開始編號 ) ;
%d :資料庫名稱;
%d :位於該月中的天數 (dd) ;
%m :位於該年中的月份 (mm) ;
%f :一個基於 dbid 唯一的名稱 , 這個格式的形式為 C-IIIIIIIIII-YYYYMMDD-QQ, 其
中 IIIIIIIIII 為該資料庫的 dbid , YYYYMMDD 為日期, QQ 是一個 1-256 的序列;
%n :資料庫名稱,並且會在右側用 x 字元進行填充,使其保持長度為 8 ;
%u :是一個由備份集編號和建立時間壓縮後組成的 8 字元名稱。利用 %u 可以為每個
備份集生成一個唯一的名稱;
%p :表示備份集中備份片段的編號,從 1 開始編號;
%u :是 %u_%p_%c 的簡寫形式,利用它可以為每一個備份片段(即磁碟文件)生成
一個唯一名稱,這是最常用的命名方式;
%s :備份集的號;
%t :備份集時間戳;
%t :年月日格式 (yyyymmdd) ; s
註:如果在 backup 命令中沒有指定 format 選項,則 rman 默認使用 %u 為備份片段命
名。
configure 配置項介紹
首先,先來查看一下當前配置,通過 show all 命令:
連接到目標資料庫 : jssweb (dbid=3391142503)
rman> show all;
正在使用目標資料庫控制文件替代恢復目錄
rman 配置參數為 :
configure retention policy to recovery window of 3 days;
configure backup optimization off; # default
configure default device type to disk; # default
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to 『e:\oracle\oraback\%f』;
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 『e:\oracle\oraback\sj_data.ora』; #
default
rman>
show 命令在 rman 命令篇簡單介紹過,同時也知道後跟 #default 表示該條配置仍
然是初始的默認配置,如果想把某條更改過配置選項再置為
初始設置,用如下命令: configure … clear; 例如:
rman> configure retention policy clear;
configure retention policy to recovery window of 3 days;
上述的各項配置,在前面章節中有一些已經有所體現,以下是詳細介紹:
1)configure retention policy 配置備份保留策略
兩種保留策略設置:
基於時間:
configure retention policy to recovery window of n days;
基於冗餘數量:
configure retention policy to rendancy n;
也可以取消備份保留策略:
configure retention policy to none;
2)configure backup optimization 配置備份優化
備份優化 : 包括 off 和 on 兩個狀態
打開備份優化:
configure backup optimization on;
關閉備份優化:
configure backup optimization off;
3)configure default device type 配置 io 設備類型
rman 支持的 io 設備類型有兩種:磁碟 (disk) 和磁帶 (sbt) ,默認情況下為磁碟。
使用磁碟設備:
configure default device type to disk;
使用磁帶設置:
configure default device type to sbt;
在這里需要注意的一點是:如果 io 設備發生變化,相關配置項也需要修改。例如:
rman> configure device type disk parallelism 2;
4) configure controlfile autobackup 配置控制文件自動備份
是否自動備份,包含兩個狀態: off 和 on
打開自動備份
configure controlfile autobackup on
禁止自動備份
configure controlfile autobackup off
指定備份的控制格式和路徑。例如:
configure controlfile autobackup format for device type disk to
『e:\oracle\oraback\%f』;
在備份期間,將產生一個控制文件的快照,用於控制文件的讀一致性,這個快照可以
通過如下配置: configure snapshot controlfile name to
『e:\oracle\oraback\sj_data.ora』;
5)configure device type 設置並行備份
rman 支持並行備份與恢復,也可以在配置中指定默認的並行程度。例如:
configure device type disk parallelism 2;
指定在以後備份與恢復中,將採用並行度為 2 ,同時開啟 2 個通道進行備份與恢復,
當然也可以在 run 中指定通道來決定備份與恢復的並行程度。並行的數目決定了開啟
通道的個數。如果指定了通道配置,將採用指定的通道,如果沒有指定通道,將採用
默認通道配置。默認情況下,自動分配通道的並行度為 1 ,如果你通過設置 parallelism
設置了並行通道為 2 ,那麼在 run 塊中,它會默認使用 2 條並行通道 ; 如果在 run命令
塊中指定數個 allocate channel ,那麼 rman 在執行備份命令時會以設置的 channel 為准,
而不管 configure 中配置了多個並行通道。需要注意的是,在 backup 命令中有一個
filesperset 參數,該參數是指 rman 建立的每個備份集中所能包含的備份片段 ( 即磁碟文
件 ) 的最大數,該參數默認值為 64 ;如果在執行 backup 命令時沒有指定該參數值,那
么 rman 會僅使用第一個通道來執行備份,其它通道將處於空閑狀態。關於通道數與
filesperset 值之間也有一個大小關系,即 filesperset 值不要小於設定通道數。
6) 設置備份文件冗餘度
configure datafile backup copies
如下:
rman> run{
set backup copies 2;
backup device type disk format
『e:\oracle\oraback\dyk1\%u』,'e:\oracle\oraback\dyk2\%u』
tablespace users,sales;
}
7)configure maxsetsize 配置備份集的最大尺寸
該配置限制通道上備份集的最大尺寸。單位支持 bytes,k,m,g 。默認值是 unlimited。
8) rman 備份相關的動態性能表
v$archived_log :本視圖包含了所有歸檔重做日誌文件的創建情況,備份情況以及其
他信息。
v$backup_corruption :這個視圖顯示了 rman 在哪些備份集中發現了損壞的數據壞。
在你使用 backup validate 命令對備份集進行檢查時如果發現了損壞的數據塊, rman
將在這個視圖中寫入記錄。
v$_corruptio :本視圖顯示了哪些鏡像復制備份文件已經被損壞。
v$backup_datafile :本視圖通常用來獲取每個數據文件中非空白數據塊的數量,從
而幫助你創建出大小基本相等的備份集。另外,在視圖中也包含了數據文件中損壞的
數據塊的信息。
v$backup_redolog :本視圖顯示了在現有的備份集中飲食有哪些歸檔重做日誌文件。
v$backup_set :本視圖顯示了已經創建的備份集的信息。
v$backup_piect :本視圖顯示了已經創建的備份片段的信息。
可以通過如下 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 『rman:aggregate%』
通過如下 sql 獲得 rman 用來完成備份操作的服務進程的 sid 與 spid 信息:
select sid,spid,client_info from v$process p,v$session s where p.addr=s.paddr and
client_info like 『%id=rman%』
rman 通道
上次基礎知識講提到了通道, rman 通道實質是一個到存儲設備的數據流。就像城市交
通道路,多建幾個環路對於緩解交通是有意義的。在 rman 中可以通過手動方式或自動
方式分配通道。
1) 手工分配通道
在執行 backup 、 restore 、 delete 等需要進行磁碟 i/o 操作的命令時,可以將它們與 allocate
channel 命令放在一個 run 的命令塊中,利用 allocate channel 為它們分配通道。例如:
run{
allocate channel ch1 device type disk format 『e:\oracle\oraback\%u』;
backup datafile 『e:\oracle\oradata\oradb1\sj_data.ora』;
}
需要注意的是, rman 中執行的每一條 backup 、 delete 等命令都至少要求使用一個通道,
通道數決定了這些操作執行的並行度。
⑵ oracle怎麼用rman腳本進行備份
Oracle資料庫中rman備份腳本非常實用
查詢字元集
SQL> select * from nls_database_parameters;
NLS_CHARACTERSET
AL32UTF8
備份時字元集很重要,不然會出亂碼
一、0級備份(全備)紅色是要修改的,根據個人的存放位置。
[oracle@oracle122 script]$ cat db_bak0.rman
run
{
configure retention policy to recovery window of 8 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/rmanbak/%F';
allocate channel ch1 device type disk format '/home/oracle/rmanbak/inc0_%d_%s_%p_%u_%T';
backup incremental level 0 tag='level 0' database skip inaccessible filesperset 10 plus archivelog filesperset 20;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt archivelog until time 'sysdate-30';
0級運行腳本
[oracle@oracle122 script]$ cat exec_0_level.sh
ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/proct/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
export DATE=$(date +%Y_%m_%d)
export NLS_LANG="Simplified Chinese_china".AL32UTF8
/u01/app/oracle/proct/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak0.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append
二、1級備份(增量)
[oracle@oracle122 script]$ cat db_bak1.rman
run
{
configure retention policy to recovery window of 8 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/rmanbak/%F';
allocate channel ch1 device type disk format '/home/oracle/rmanbak/inc1_%d_%s_%p_%u_%T';
backup incremental level 1 tag='level 1' database skip inaccessible filesperset 10 plus archivelog filesperset 20;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt archivelog until time 'sysdate-30';
1級運行腳本
[oracle@oracle122 script]$ cat exec_1_level.sh
ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/proct/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
export DATE=$(date +%Y_%m_%d)
export NLS_LANG="Simplified Chinese_china".AL32UTF8
/u01/app/oracle/proct/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak1.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append
三、2級備份(從0級追加到現在的備份)
[oracle@oracle122 script]$ cat db_bak2.rman
run
{
configure retention policy to recovery window of 8 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/rmanbak/%F';
allocate channel ch1 device type disk format '/home/oracle/rmanbak/inc2_%d_%s_%p_%u_%T';
backup incremental level 2 tag='level 2' database skip inaccessible filesperset 10 plus archivelog filesperset 20 delete all input;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
2級運行腳本
[oracle@oracle122 script]$ cat exec_2_level.sh
ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/proct/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
export DATE=$(date +%Y_%m_%d)
export NLS_LANG="Simplified Chinese_china".AL32UTF8
/u01/app/oracle/proct/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak2.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append
定時備份星期天為0級全備,星期三為2級備份,星期一,星期二,星期四,星期五,星期六為1級增量備份晚上11點開始備份
[oracle@oracle122 script]$ crontab -l
* 23 * * 0 /home/oracle/rmanbak/script/exec_0_level.sh
* 23 * * 1 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 2 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 3 /home/oracle/rmanbak/script/exec_2_level.sh
* 23 * * 4 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 5 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 6 /home/oracle/rmanbak/script/exec_1_level.sh
⑶ oracle 通過sql語句備份資料庫
oracle沒有sql語句備份,只有exp導出或者RMAN備份,都不是sql,RMAN是標準的數據塊備份,前提要求是資料庫一定要開啟歸檔,然後才可以進行RMAN備份,這個方法對數據量大的資料庫可以使用,速度會比較快,具體方法可以從網上查,不是很難,但比較繁瑣,還有一個exp導出,這個是直接將資料庫內的表直接導出城dmp文件,具體的語法是
exp
user/password@DBSID
file=D:\備份目標文件夾\文件名.dmp
log=D:\備份目標文件夾\文件名.log
owner=用戶名
上述語句是需要在cmd命令行下執行的,如果想導出哪個用戶就可以導出哪個用戶,只要能用sql語句連接到資料庫就可以使用,不管在哪個機器