1、RMAN原理
1.RMAN結構
RMAN(Recovery Manager)
是一種用於備份(backup)、還原(restore)和恢復(recover)數據庫的Oracle工具。只能用於ORACLE8或更高的版本
中,它可以備份整個數據庫或表空間、數據文件、控制文件、歸檔文件以及Spfile(不能備份pfile,口令文件,
redolog),跳過未使用的數據塊,對使用過的數據塊拷貝。容許增量數據塊級別的備份,增量RMAN備份是時間和空間
有效的,只備份自上次備份以來有變化的那些數據塊,並對塊進行檢驗。RMAN鏈接數據庫必須在dedicate模式下。通
過服務器進程(rman)驅動進行備份或還原。
RMAN 工具
用於備份與恢復的接口,起源於Oracle版本8,位於$ORACLE_HOME/bin目錄下,須要配置path環境變量便可用能夠
經過運行rman這個命令來啓動RMAN工具。
RMAN服務進程
RMAN服務進程是一個後臺進程,用於RMAN工具與數據庫之間的通訊,也用於RMAN 工具與磁盤/磁帶等I/O 設置之間
的通訊,服務進程負責備份與恢復的全部工做。
通道 channel
通道是服務進程與I/O 設備之間讀寫的途徑,一個通道將對應一個服務進程,在分配通道時,須要考慮I/O 設備的
類型,I/O 併發處理的能力,I/O 設備能建立的文件的大小,數據庫文件最大的讀速率,最大的打開文件數目等因素。
目標數據庫 target
就是RMAN 進行備份與恢復的數據庫。
元數據(meta data)
用於找到備份信息,至關目標庫的控制文件。
恢復目錄 catalog
拷貝存儲目標庫的元數據,集中管理多個庫,能夠執行腳本。
媒體管理層 MML
Media Management Layer (MML)是第三方工具或軟件,用於管理對磁帶的讀寫與文件的跟蹤管理。
備份,備份集與備份片,鏡像拷貝
備份包含一個到多個備份集backupset;
備份集是一個邏輯結構,包含一個或多個備份片backuppiece;
備份片是最基本的物理結構;
歸檔日誌要與其餘數據分開存放在不一樣的備份集。數據文件能夠跨備份片,不能跨備份集;
備份集與鏡像拷貝
backupset:邏輯概念備份集與備份片,是否壓縮都有釋放環節extract
copy:鏡像,CP和源文件同樣大,不能夠增量備份,恢復的快。可做爲增量備份的0級備份;html
2.鏈接RMAM
條件
RMAN備份恢復,都必須先啓動實例並加載數據庫。
目標庫上使用sys用戶直接鏈接
rman target /
多實例時,須要設置set $ORACLE_SID= export $ORACLE_SID=
ramn
connect target /
ramn target sys/oracle
連遠程實例,須要配置網絡服務名tnsnames.ora
ramn target sys/oracle@prod
鏈接帶輸出日誌
rman target / log d:\logs\rman_log.txt
從新啓動備份,對於異常結束了的備份RMAN 提供一個從新開始備份的方法。
BACKUP NOT BACKED UP SINCE TIME 'SYSDATE-14' DATABASE PLUS ARCHIVELOG;
運行腳本,注意腳本中環境變量設置
rman TARGET / @backup_db.rman
rman target / log /u01/app/backdir/rman/rman.log @/u01/app/backdir/rman/rman.sql
@backup_db.rman
RUN { @backup_db.rman }
運行存儲在恢復目錄中的腳本
RUN { EXECUTE backup_whole_db };
4.RMAN與手工的異同
相同點:都是CP
不一樣點:文件大小,壓縮,增量備份,ASM裸設備,catalog目錄,能夠管理多個庫
5.RMAN設置
查看設置
show all
設置保存策略,
expired過時,是指備份集信息和元數據不一致,crosscheck後,就會出現expired信息,
obsolate過期,該備份是否在恢復的時候須要,超過期間和冗餘,再也不須要或有新的備份能夠替換,只有一個備份
不會obsolate過期
分爲冗餘和恢復窗口,這兩種保留策略互不兼容,一個是時間策略,決定至少有一個備份能恢復到指定的日期,一
個冗餘策略,規定至少有幾個冗餘的備份。大於恢復窗口,可是是恢復所須要的備份依然會被保留
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
備份優化,不備份脫機只讀表空間,性能優化
CONFIGURE BACKUP OPTIMIZATION ON;
存儲介質
CONFIGURE DEFAULT DEVICE TYPE TO DISK[SBT];
控制文件自動備份,控制文件的自動備份發生在任何backup或者copy命令以後,或者任何數據庫的結構改變以後
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/backdir/rman/controlfile/%F';
控制文件的快照
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/10.2.0/db_1/dbs/snapcf_ipemsdb.f';
默認併發通道,及壓縮,默認存放路徑,配置項中最好不要設置channel,放到備份語句中設置
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO compressed BACKUPSET;
CONFIGURE channel DEVICE TYPE DISK format '/u01/app/backdir/rman/controlfile/pieces/%d_%T_%U.bak' maxpiecesize 2G;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/backup/dir1/%U', '/u01/backup/dir1/%U';
配置多個備份的冗餘拷貝,或者直接在腳本中指定多路徑如
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
backup datafile n format '/u01/backup/%U', '/u02/backup/%U';
格式化文件名
%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)linux
6.啓用塊變化跟蹤
是指定一個文件用於記錄數據文件中哪些塊發生了變化,在RAMN進行增量備份時,僅僅需讀取該文件來備份這些
發生變化的塊,從而減小了備份時間和I/O資源。 使用下面的命令來啓用塊變化跟蹤
alter database enable block change tracking using file '/u01/app/oracle/oradata/orcl/blk_ch_trc.trc';
select * from v$block_change_tracking;
disable後塊變化跟蹤文件被自動刪除
alter database disable block change tracking; sql
7.RMAN命令交互
數據庫啓動關閉命令
shutdonw immediate;
startup [nomount] mount;
alter database open;
執行sql語句,默認是不支持執行select語句且執行後沒有結果
sql 'alter system archive log current';
list命令
list backupset summary;
list backup[backupset,backuppiece];
list copy;
list backup of database[controlfile,tablespace users,datafile 3,archivelog all];
report命令,能夠檢測那些文件須要備份,那些備份能被刪除以及那些文件能不能得到的信息
report schema[obsolete];
report need backup;
delete命令
delete noprompt backup[copy];
crosscheck copy[backup,archivelog all];
delete expired copy[backup];
delete obsolete;
DELETE BACKUPPIECE 101;
DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS;
DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300;數據庫
2、RMAN備份
在非歸檔模式下關閉且啓動到mount狀態下備份
1.冷備cold_bak.sql,數據庫在mount狀態下,沒法切換日誌,因此冷備沒有備歸檔
run{
shutdown immediate;
startup mount;
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database format '/u01/app/backdir/rman/cold_bak/cold_%d_%s_%p.bak';
alter database open;
}
2.熱備hot_bakup.sql
run{
sql 'alter system switch logfile';
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database format '/u01/app/backdir/rman/hot_bak/hot_%d_%s_%p.bak' include current controlfile plus archivelog delete input format '/u01/app/backdir/rman/archiv/arch_%U.bak' ;
}
經典整庫備份:backup as compressed backupset database include current controlfile plus archivelog delete input;
我的整理徹底備份標準版
run{
sql 'alter system archive log current';
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database format '/u01/app/backdir/rman/hot_bak/hot_%d_%s_%p.bak';
backup current controlfile format '/u01/app/backdir/rman/controlfile/controlfile_0825.bak';
backup archivelog all format '/u01/app/backdir/rman/archiv/arch_%d_%T_%s_%p' delete input;
}
3.熱備表空間,數據文件
backup tablespace users format '/u01/app/backdir/rman/hot_bak/%d_users_%U.bak';
backup datafile 1,3,5 format '/u01/app/backdir/rman/hot_bak/%d_datafiles_%U.bak';
臨時表空間不須要備份
backup tablespace temp;
4.增量備份
差別增量備份,小於等於本身0 2 2 1 2 2 2 0
累計增量備份,小於本身 0 2 2 1 2 2 2 0
backup incremental level 0 format '/u01/app/backdir/rman/increment/cy_LXTB_%s.bak' tablespace LXTB;
backup incremental level 0 cumulative format '/u01/app/backdir/rman/increment/lj_example_%s_cu0.bak' datafile 5;
查詢備份狀況
select sid,sofar,totalwork from v$session_longops; windows
我的整理增量備份標準版
0級
run {
sql 'alter system archive log current';
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup incremental level 0 database format '/u01/app/backdir/rman/increment/leve0_%d_%T_%s_%p';
backup archivelog all format '/u01/app/backdir/rman/archiv/arch_leve0_%d_%T_%s_%p' delete all input;
backup current controlfile format '/u01/app/backdir/rman/controlfile/controlfile_0825_leve0.bak';
release channel ch1;
release channel ch2;
}
2級
run {
sql 'alter system archive log current';
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup incremental level 2 database format '/u01/app/backdir/rman/increment/leve2_%d_%T_%s_%p';
backup archivelog all format '/u01/app/backdir/rman/archiv/arch_leve2_%d_%T_%s_%p' delete all input;
backup current controlfile format '/u01/app/backdir/rman/controlfile/controlfile_0825_leve2.bak';
release channel ch1;
release channel ch2;
}
1級
run {
sql 'alter system archive log current';
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup incremental level 1 database format '/u01/app/backdir/rman/increment/leve1_%d_%T_%s_%p';
backup archivelog all format '/u01/app/backdir/rman/archiv/arch_leve1_%d_%T_%s_%p' delete all input;
backup current controlfile format '/u01/app/backdir/rman/controlfile/controlfile_0825_leve1.bak';
release channel ch1;
release channel ch2;
}
linux下配置爲定時任務
分 時 日 月 周 命令
在root用戶下設置
[root@oradb ~]# crontab -e -u oracle
45 23 * * 0 rman target / log=/u01/oracle/bk/log/bak_inc0.log append cmdfile = /u01/oracle/bk/scripts/bak_inc0.rcv
45 23 * * 1 rman target / log=/u01/oracle/bk/log/bak_inc2.log append cmdfile = /u01/oracle/bk/scripts/bak_inc2.rcv
45 23 * * 2 rman target / log=/u01/oracle/bk/log/bak_inc2.log append cmdfile = /u01/oracle/bk/scripts/bak_inc2.rcv
45 23 * * 3 rman target / log=/u01/oracle/bk/log/bak_inc1.log append cmdfile = /u01/oracle/bk/scripts/bak_inc1.rcv
45 23 * * 4 rman target / log=/u01/oracle/bk/log/bak_inc2.log append cmdfile = /u01/oracle/bk/scripts/bak_inc2.rcv
45 23 * * 5 rman target / log=/u01/oracle/bk/log/bak_inc2.log append cmdfile = /u01/oracle/bk/scripts/bak_inc2.rcv
45 23 * * 6 rman target / log=/u01/oracle/bk/log/bak_inc2.log append cmdfile = /u01/oracle/bk/scripts/bak_inc2.rcv
"/tmp/crontab.XXXXInBzgR" 7L, 791C written
保存以後重啓crontab
[root@oradb ~]# service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]性能優化
windows系統下配置ramn定時任務,.bat和txt腳本配合執行rman
auto_level_0_rman.bat
rem run rman
rman cmdfile=level_0_rman.txt msglog= c:/orabackup/level_0_rmanlog%date:~0,10%.log服務器
level_0_rman.txt
connect target /
list backup;
report obsolete;
delete obsolete;
run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup as compressed backupset incremental level 0 database
format 'c:/orabackup/full_%d_%T_%s'
plus archivelog
format 'c:/orabackup/arch_%d_%T_%s'
delete all input;
release channel ch1;
release channel ch2;
}
而後在window的計劃任務配置定時執行網絡
6.鏡像備份
copy datafile 6 to '/u01/app/backdir/rman/copy/lxtb.bak';
backup as copy datafile 6 format '/u01/app/backdir/rman/copy/lxtb_as.bak';
鏡像能夠做爲增量備份的0級備份,鏡像後能夠直接執行增量2級備份
backup incremental level 2 cumulative format '/u01/app/backdir/rman/increment/lj_2_lxtb%s_.bak' tablespace lxtb;session
7.備份控制文件,spfile
backup current controlfile format '/u01/app/backdir/rman/controlfile/controlfile_0814.bak';
sql "alter database backup controlfile to ''/tmp/orclcontrol.bak''";
backup spfile format '/u01/app/oracle/rmanbak/sp_%d_%U';
8.備份歸檔文件
backup archivelog all delete input;
list backup of controlfile;
list backup of archivelog all;
list archivelog all;併發
9.RMAN 動態性能視圖如下是與RMAN 備份有關係的一些動態性能視圖,信息是從控制文件中獲取的。
V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
V$BACKUP_DATAFILE
V$BACKUP_REDOLOG
V$BACKUP_SET
V$BACKUP_PIECE
V$BACKUP_DEVICE
V$CONTROLFILE_RECORD_SECTION
v$backup_files
v$backup_spfile
v$rman_configuration
v$database_block_corruption
經過以下的SQL腳本,能夠大體的監控到RMAN備份進行的程度
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;
經過以下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%'
10.塊級別的恢復
塊恢復Block Media Recovery (BMR),塊是恢復的最小單元,經過塊能夠減小恢復時間,並且數據文件能夠在線。恢復塊的時候,必
須指定具體的塊號,如:BLOCKRECOVER datafile 6 BLOCK 3;要恢復的壞塊信息能夠從報警與跟蹤文件,表與索引的分析,DBV 工具或第
三方媒體管理工具以及具體的查詢語句中得到。產生塊損壞的緣由通常是間斷或隨機的IO 錯誤或者是內存的塊錯誤。塊的錯誤信息保存在
V$DATABASE_BLOCK_CORRUPTION,用以下命令恢復該視圖中列出的壞塊
RMAN> BLOCKRECOVER CORRUPTION LIST RESTORE UNTIL TIME 'sysdate – 10';
備份的壞塊信息保存在
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
能夠用以下的命令來恢復壞塊。
BLOCKRECOVER datafile 2 BLOCK 12, 13 datafile 7 BLOCK 5, 98, 99 datafile 9 BLOCK 19;
BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404, 4194405 FROM TAG "weekly_backup";
BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404, 4194405 RESTORE UNTIL TIME 'SYSDATE-2';
11.歸檔日誌的正確清理
1.備份腳本中帶delete all input,清理;
2.RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
3.list copy;命令也會將歸檔日誌列出來
delete noprompt copy;
crosscheck copy;
delete noprompt copy;
4.手工起立歸檔目錄下的文件,再經過RMAN檢查,清理過時的歸檔
物理刪除archivelog;
crosscheck archivelog all;
delete expried archivelog all;
3、參考資料
北風網備份恢復視頻
http://edu.ibeifeng.com/view-video-id-1035.html
v$session_longops:視圖主要是顯示運行時間超過6秒的數據庫操做的狀態 SID:Session標識 SERIAL#:Session串號 OPNAME:操做簡要說明 TARGET:操做運行所在的對象 TARGET_DESC:目標對象說明 SOFAR:至今爲止完成的工做量 TOTALWORK:總工做量 UNITS:工做量單位 www.2cto.com START_TIME:操做開始時間 LAST_UPDATE_TIME:統計項最後更新時間 TIME_REMAINING:預計完成操做的剩餘時間(秒) ELAPSED_SECONDS:從操做開始總花費時間(秒) CONTEXT:先後關係 MESSAGE:統計項的完整描述 USERNAME:執行操做的用戶ID SQL_ADDRESS:用於鏈接查詢的列 SQL_HASH_VALUE:用於鏈接查詢的列 QCSID: