『壹』 如何使用 RMAN 識別資料庫中損壞的對象
步驟1:識別壞塊
執行下面的 RMAN 命令,使所有的壞塊信息被記錄在 v$database_block_corruption 視圖中:
RMAN> backup validate check logical database;
注意:
這個命令只是檢查資料庫的壞塊,而不會真正進行備份。從 11g 開始可以省略 backup 子句,而直接使用命令"validate check logical database"。
如果由於缺失文件導致命令失敗,可以增加 'SKIP INACCESSIBLE' 子句來避免這個問題。
為了加快檢查速度,可以設置 PARALLELISM 指定多個通道:
RMAN> configure device type disk parallelism 4;
RMAN> backup validate check logical database;
OR
RMAN> run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup validate check logical database;
}
輸出
壞塊信息會被記錄在視圖 V$DATABASE_BLOCK_CORRUPTION 中。11g RMAN 會生成一個 trace 文件,詳細描述壞塊信息:
RMAN VALIDATE 屏幕輸出:
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
6 FAILED 0 501 640 1950088
File Name: /oracle/dbs/users.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 9 9
Index 0 0
Other 0 130
validate found one or more corrupt blocks
See trace file /oracle/log/diag/rdbms/orcl/orcl/trace/orcl_ora_28424.trc for details
Finished validate at <Date>
Trace 文件輸出壞塊信息,這個例子描述了 2 個壞塊,一個物理壞塊(file 6 block 9)和一個邏輯壞塊(file 6 block 10):
Corrupt block relative dba: 0x01000009 (file 4, block 9)
Bad check value found ring validation
Data in bad block:
type: 16 format: 2 rdba: 0x01000009
last change scn: 0x0000.00000000 seq: 0xff flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x000010ff
check value in block header: 0xb4e0
computed block checksum: 0xa800
Reread of blocknum=9, file=/oracle/dbs/users.dbf found same corrupt data
Block Checking: DBA = 25165834, Block Type = KTB-managed data block
data header at 0x2b2deb49e07c
kdbchk: fsbo(144) wrong, (hsz 78)
Error backing up file 6, block 10: logical corruption
壞塊信息記錄在視圖 V$DATABASE_BLOCK_CORRUPTION 中:
SQL> select * from V$DATABASE_BLOCK_CORRUPTION;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
--------------- --------------- --------------- ------------------ ---------
6 10 1 8183236781662 LOGICAL
6 42 1 0 FRACTURED
6 34 2 0 CHECKSUM
6 50 1 8183236781952 LOGICAL
6 26 4 0 FRACTURED
5 rows selected.
注意:
•CHECK LOGICAL 選項既會檢查
『貳』 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 等命令都至少要求使用一個通道,
通道數決定了這些操作執行的並行度。
『叄』 高分求 使用rman備份和恢復oracle資料庫的操作實例,本人初學,求高手指教
1 創建一個名為rman的資料庫,可以使用dbca工具,根據向導提示建立即可,該資料庫用於備份信息的管理
2 在rman資料庫中創建rman用戶(密碼暫設為rman),用於訪問rman資料庫,並賦予許可權
export ORACLE_SID=rman
sqlplus / as sysdba
create user rman identified by rman default tablespace users quota unlimited on users;
grant create type,recovery_catalog_owner to rman;
exit
3 使用rman用戶登錄到rman資料庫,建立catalog編錄
rman catalog rman/rman@rman
create catalog;
exit
4 使用rman命令連接要備份的資料庫,例如orcl,進行注冊
export ORACLE_SID=orcl
rman target / catalog rman/rman@rman
register database;
這樣就可以通過rman命令進行orcl資料庫的備份管理了。
常見rman命令有:
rman target / catalog rman/rman@rman
list backup ; 列出所有備份
report obsolete; 列出過期備份
report need backup days=3; 列出最近三天沒有備份的文件
backup database; 備份資料庫
backup tablespace tbsname; 備份表空間tbsname
restore database; 恢復資料庫
『肆』 如何RMAN正確地刪除Archivelog 如何設置有備庫的歸檔刪除策略
如何正確地刪除Archivelog:
Archivelog並不能直接得從OS層直接物理刪除,因為archivelog的相關信息是記錄在controlfile中的,當物理刪除後不會改變controlfile的設置。並且在查詢相關的動態視圖(例如v$archived_log)時,該部分日誌仍然標注為存在。也就是說Oracle並不認為這些日誌被刪除了,所以在刪除archivelog的時候,需要我們在其他地方做一些設置。
一、使用RMAN清楚物理刪除後的記錄
可以使用RMAN來刪除archivelog,具體可以按以下步驟操作:
1、物理刪除archivelog
2、進入RMAN
3、crosscheck archivelog all;
4、delete expried archivelog all;
這樣就在一些Oracle的記錄中查不到相應的archivelog記錄了。
二、直接使用RMAN刪除archivelog
其實在RMAN中是可以使用命令直接將ARCHIVELOG刪除的,命令如下:
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
表示刪除7天以前的所有archivelog,但是這個命令的缺點是無法對archivelog進行細致的劃分。
三、使用RMAN備份achivelog後刪除
這是一種最為穩妥的方法了,使用RMAN備份archivelog,備份後全部刪除
backup format '/u01/arch_%T_%s_%U' archivelog all delete input;
或者
backup database plus archivelog;
註:我在庫上設置了Streams後,使用RMAN刪除archivelog會導致報錯RMAN-08137: WARNING:
archive log not deleted as it is still needed. 不知道該如何解決,據說是10.2的一個bug,如果真
是bug的話,那隻能在OS層設置刪除,或用RMAN進行強制刪除了。
10g之後的版本,Oracle在RMAN中內置增加了一項歸檔文件的刪除策略,終於,DBA可以僅通過一項配置就
解決該問題了。該策略對應兩個值:
APPLIED ON STANDBY:設置為該值時,當通過附加的DELETE INPUT子句刪除Standby資料庫仍需要的日誌
時,會提示RMAN-08137錯誤。不過用戶仍然可以手動地通過DELETE ARCHIVELOG方式刪除。
NONE:設置為該值時,則不啟用歸檔文件的刪除策略。默認情況下就是NONE。
例如,啟用APPLIED ON STANDBY:
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
new RMAN configuration parameters:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
new RMAN configuration parameters are successfully stored
RMAN> run
{
backup archivelog all delete input format 'ZHSVR044_%d_set=%s_piece=%p_date=%T.ARC.rmn';
}
都知道在controlfile中記錄著每一個archivelog的相關信息,當然們在OS下把這些物理文件delete掉後,在我們的
controlfile中仍然記錄著這些archivelog的信息,在oracle的OEM管理器中有可視化的日誌展現出,當我們手工清除archive目錄下的文件後,這些記錄並沒有被我們從controlfile中清除掉,也就是oracle並不知道這些文件已經不存在了!這時候我們要做手工的清除的話,下面我經過實驗,可以嘗試這種方法:
1. 進入rman
2. connect target /
3. crosscheck archivelog all;
4. delete expired archivelog all;
這時候我們再去OEM中看就一定看不到,如果你的從來沒有做過這個動作的話,我們可以比較從這個動作前的controlfile後動作後的controlfile的大小!
ORACLE正確刪除歸檔並回收空間的方法
ORACLE正確刪除歸檔並回收空間的方法
一個ORACLE歸檔日誌經常滿,表現為/oraarchive 這個文件空間佔用100%大家一定抱怨ORACLE為何沒有歸檔維護工具,很多人直接刪除了事,錯了,ORACLE有,而且很智能,可以正確的刪除歸檔和FLASHBACK,不過切記,ORACLE歸檔日誌對於ORACLE的數據恢復和備份非常重要,不到萬不得已不要刪除歸檔日誌。
刪除歸檔日誌的過程
以ORACLE用戶身份登錄到資料庫伺服器主機或通過網路連接
進入ORACLE數據備份工具
rman target/
或rman target/@orcl
在命令窗口裡面執行
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
說明
SYSDATA-7,表明當前的系統時間7天前,before關鍵字表示在7天前的歸檔日誌,如果使用了閃回功能,也會刪除閃回的數據。
同樣道理,也可以刪除從7天前到現在的全部日誌,不過這個命令要考慮清楚,做完這個刪除,最好馬上進行全備份資料庫
DELETE ARCHIVELOG FROM TIME 'SYSDATE-7';
UNIX/LINUX下也可以通過FIND找到7天前的歸檔數據,使用EXEC子操作刪除
find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;
這樣做仍然會在RMAN里留下未管理的歸檔文件
仍需要在RMAN里執行下面2條命令
crosscheck archivelog all;
delete expired archivelog all;
所以還不如上面的方法好用,不過用FIND的好處就是,可以在條件上,和EXEC子項上做很多操作,實現更復雜的功能
3.簡要介紹一下report obsolete命令
使用report obsolete命令報告過期備份
『伍』 在ORACLE里什麼是RMAN命令,它有什麼作用備份
3. 恢復目錄
3.1.恢復目錄的概念
恢復目錄是由RMAN使用、維護的用來放置備份信息的倉庫。RMAN利用恢復目錄記載的信息去判斷如何執行需要的備份恢復操作。
恢復目錄可以存在於ORACLE資料庫的計劃中。
雖然恢復目錄可以用來備份多個資料庫,建議為恢復目錄資料庫創建一個單獨的資料庫。
恢復目錄資料庫不能使用恢復目錄備份自身。
3.2.建立恢復目錄
第一步,在目錄資料庫中創建恢復目錄所用表空間:
SQL> create tablespace rman_ts datafile 'd:\oracle\oradata\rman\rman_ts.dbf' size 20M;
表空間已創建。
第二步,在目錄資料庫中創建RMAN 用戶並授權:
SQL> create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;
用戶已創建。
SQL> grant recovery_catalog_owner to rman ;
授權成功。
SQL> grant connect, resource to rman ;
授權成功。
第三步,在目錄資料庫中創建恢復目錄
C:\>rman catalog rman/rman
恢復管理器:版本8.1.6.0.0 - Proction
RMAN-06008:連接到恢復目錄資料庫
RMAN-06428:未安裝恢復目錄
RMAN>create catalog tablespace rman_ts;
RMAN-06431:恢復目錄已創建
注意:雖然使用RMAN不一定必需恢復目錄,但是推薦使用。因為恢復目錄記載的信息大部分可以通過控制文件來記載,RMAN在恢復資料庫時使用這些信息。不使用恢復目錄將會對備份恢復操作有限制。
3.3.使用恢復目錄的優勢
可以存儲腳本;
記載較長時間的備份恢復操作;
4. 啟動RMAN
RMAN為互動式命令行處理界面,也可以從企業管理器中運行。
為了使用下面的實例,先檢查環境符合:
the target database is called "his" and has the same TNS alias
user rman has been granted "recovery_catalog_owner "privileges
目標資料庫的連接用戶為internal帳號,或者以其他SYSDBA類型帳號連接
the recovery catalog database is called "rman" and has the same TNS alias
the schema containing the recovery catalog is "rman" (same password)
在使用RMAN前,設置NLS_DATE_FORMAT 和NLS_LANG環境變數,很多RMAN LIST命令的輸出結果是與日期時間相關的,這點在用戶希望執行以時間為基準的恢復工作也很重要。
下例是環境變數的示範:
NLS_LANG= SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS
為了保證RMAN使用時能連接恢復目錄,恢復目錄資料庫必須打開,目標資料庫至少要STARTED(unmount),否則RMAN會返回一個錯誤,目標資料庫必須置於歸檔模式下。
4.1.使用不帶恢復目錄的RMAN
設置目標資料庫的 ORACLE_SID ,執行:
% rman nocatalog
RMAN> connect target
RMAN> connect target internal/<password>@his
4.2.使用帶恢復目錄的RMAN
% rman rman_ts rman/rman@rman
RMAN> connect target
% rman rman_ts rman/rman@rman target internal/<password>@his
4.3.使用RMAN
一旦連接到目標資料庫,可以通過交互界面或者事先存儲的腳本執行指定RMAN命令, 下面是一個使用RMAN交互界面的實例:
RMAN> resync catalog;
RMAN-03022:正在編譯命令:resync
RMAN-03023:正在執行命令:resync
RMAN-08002:正在啟動全部恢復目錄的 resync
RMAN-08004:完成全部 resync
使用腳本的實例:
RMAN> execute script alloc_1_disk;
創建或者替代存儲的腳本:
RMAN> replace script alloc_1_disk {
2> allocate channel d1 type disk;
3> }
5.注冊或者注銷目標資料庫
5.1.注冊目標資料庫
資料庫狀態:
恢復目錄狀態:打開
目標資料庫:載入或者打開
目標資料庫在第一次使用RMAN之前必須在恢復目錄中注冊:
第一步,啟動恢復管理器,並且連接目標資料庫:
C:\>rman target internal/oracle@his catalog rman/rman@rman
恢復管理器:版本8.1.6.0.0 - Proction
RMAN-06005:連接到目標資料庫:HIS (DBID=3021445076)
RMAN-06008:連接到恢復目錄資料庫
第二步,注冊資料庫:
RMAN> register database;
RMAN-03022:正在編譯命令:register
RMAN-03023:正在執行命令:register
RMAN-08006:注冊在恢復目錄中的資料庫
RMAN-03023:正在執行命令:full resync
RMAN-08002:正在啟動全部恢復目錄的resync
RMAN-08004:完成全部resync
5.2.注銷目標資料庫
RMAN提供了一個注銷工具,叫DBMS_RCVCAT工具包,請注意一旦注銷了該目標資料庫,就不可以使用恢復目錄中含有的備份集來恢復資料庫了。
為了能注銷資料庫,需要獲得資料庫的標識碼(DB_ID)和資料庫鍵值(DB_KEY)。其中連接目標資料庫時將會獲得DB_ID。
C:\>rman target internal/oracle@his catalog rman/rman@rman
恢復管理器:版本8.1.6.0.0 - Proction
RMAN-06005:連接到目標資料庫:HIS (DBID=3021445076)
RMAN-06008:連接到恢復目錄資料庫
其中DBID=3021445076,利用DBID=3021445076查詢資料庫鍵值碼:
連接到目標資料庫,查詢db表:
SQL> select * from db;
DB_KEY DB_ID CURR_DBINC_KEY
---------- ---------- --------------
1 3021445076 2
獲得DB_KEY=1,這樣,該目標資料庫DB_KEY=1,DBID=3021445076,利用兩個值使用DBMS_RCVCAT工具包就可以注銷資料庫:
SQL> execute dbms_rcvcat.unregisterdatabase(1,3021445076);
PL/SQL 過程已成功完成。
至此,注銷資料庫操作完成。
... ...
『陸』 請解釋下Oracle里邏輯備份、物理備份、Rman備份的區別。教科書和百度上的解釋不是很懂,謝謝。
Oracle資料庫的邏輯備份
ORACLE資料庫有兩類備份方法。第一類為物理備份,該方法實現資料庫的完整恢復,但資料庫必須運行在歸擋模式下(業務資料庫在非歸擋模式下運行),且需要極大的外部存儲設備,例如磁帶庫;第二類備份方式為邏輯備份,業務資料庫採用此種方式,此方法不需要資料庫運行在歸擋模式下,不但備份簡單,而且可以不需要外部存儲設備。資料庫邏輯備份方法ORACLE資料庫的邏輯備份分為三種模式:表備份、用戶備份和完全備份。
表模式
備份某個用戶模式下指定的對象(表)。業務資料庫通常採用這種備份方式。若備份到本地文件,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
若直接備份到磁帶設備,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
註:在磁碟空間允許的情況下,應先備份到本地伺服器,然後再拷貝到磁帶。出於速度方面的考慮,盡量不要直接備份到磁帶設備。
用戶模式
備份某個用戶模式下的所有對象。業務資料庫通常採用這種備份方式。 若備份到本地文件,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log
若直接備份到磁帶設備,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
註:如果磁碟有空間,建議備份到磁碟,然後再拷貝到磁帶。如果資料庫數據量較小,可採用這種辦法備份。
完全模式
備份完整的資料庫。業務資料庫不採用這種備份方式。備份命令為:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y
file=exp_fulldb_yyyymmdd.dmp(磁帶設備則為/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
對於資料庫備份,建議採用增量備份,即只備份上一次備份以來更改的數據。增量備份命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y inctype=incremental
file=exp_fulldb_yyyymmdd.dmp(磁帶設備則為/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
註:關於增量備份必須滿足下列條件:
1. 只對完整資料庫備份有效,且第一次需要full=y參數,以後需要inctype=incremental參數。
2. 用戶必須有EXP_FULL_DATABASE的系統角色。
3. 話務量較小時方可採用資料庫備份。
4. 如果磁碟有空間,建議備份到磁碟,然後再備份到磁帶。
業務資料庫備份方法及周期用EXP進行備份前,先在SYS用戶下運行CATEXP.SQL文件(如果以前已運行該文件,則不要執行這個腳本)。
沒有特殊說明,不允許在客戶端執行備份命令。
備份命令參照表模式下的備份命令。
RMAN備份原理
在之前,看了用戶管理的備份恢復管理,通過以SCN為線索貫穿整個過程,來熟悉了備份原理。
RMAN的備份過程和用戶備份恢復管理有很大的區別,很多朋友了都沒有理清楚原理
下面的是我的理解:
RMAN備份數據塊的工作原理:
原理:RMAN基於備份演算法規則來編譯要備份的數據文件列表。基於通道數和同時備份的數據文件數,RMAN在ORACEL共享內存段中
創建一些內存緩沖區一般是在PGA中不過有時候內存緩沖區會被推入SGA。通道服務進程隨後就開始讀取數據文件,並在RMAN緩沖取
中填充這些數據塊。一個緩沖區被填滿時,輸入緩沖區的數據就會推出到輸出緩沖區。數據文件中的數據塊都會都會發生這種
memery—to—monery write 的過程,如果數據塊符合備份的標准,並且memery—to—monery write操作沒有檢查到
數據corruption則該數據塊會被保存到輸出數據緩沖區中,直到輸出緩沖區被填滿。一但輸出緩沖區被填滿,輸出緩沖區的內容就會被
推到備份位置(磁碟或者磁帶)
RMAN備份資料庫過程:
RMAN發出備份全庫命令後,RMAN生成到目標資料庫的bequeath連接,也就是說會檢查ORACLA_SID變數中的實例名,並在該在實
例上產生一個伺服器進程,然後作為sysdba登陸,然後會產生一個作為備份的通道,(在PGA或者是在SGA分配存儲)。隨後RMAN調用
SYS.DBMS_RCVMAN請求資料庫結構信息,包括控制文件的信息(當前序列號,創建時間……)由於指定了備份全庫,所以RMAN會請求
資料庫中數據文件信息,並判斷是否存在offline數據文件(包括所在的位置和工作方式)。
RMAN開始備份,為了保持數據一致性RMAN必須構建控制文件快照,接下來RMAN調用DBMS _BACKUP_RESTORE數據包,該調用
可以創建備份片。RMAN擁有文件列表,所以它為數據文件讀取操作分配內存緩沖區,分配緩沖區後RMAN初始化備份片。一旦初始化了備份片,
RMAN會判斷是否使用了伺服器參數文件,如果使用了則會做為備份的一部分,還要備份控制文件,之後才開始備份數據文件,並將其推至內存。
為了實現這一功能,通道進程在磁碟上執行預讀取操作,並且將多個數據文件讀入內存中,RMAN會判斷數據塊頭信息是否仍然為零,如果數據塊
沒有被使用過,就不會發生到輸出緩沖區的寫操作,同時會丟棄這個數據塊(這就RMAN為什麼會只備份使用過的數據的原因,也是它的優點)
RMAN還會執行檢查數據塊有沒有corruption操作。當檢查通過了就被寫入到輸出緩沖區。一旦輸出緩沖區填滿了,就被推至備份文件位置。
在備份數據塊的時候,RMAN影子進程會得到備份狀態信息。並將它傳給V$session_longops視圖。查詢它能得到信息。
當數據文件的所有數據塊都被讀入輸入緩沖區並確定了狀態之後RMAN就會通過將這個數據文件寫入備份片來結束該文件的備份操作。所有
數據文件寫入備份片之後,RMAN生成最後一個對SYS DBMS BACKUP RESTORE 數據包的調用,該調用在控制文件中寫入備份信息(包括
備份片名,啟動備份操作時的檢查點的SCN和完成備份的時間)
至此完成備份!
希望大家繼續討論RMAN備份恢復原理(RMAN功能太強大了)
『柒』 oracle 在rman怎麼執行select語句
在手動恢復資料庫時,有時候需要在SQL*Plus提示符以及操作系統提示符,RMAN提示符下來回切換顯得有些繁瑣。實際上RMAN為我們提供了命令行下執行一些簡單的SQL語句以及PL/SQL的方法,以避免上述情形。本文描述了RMAN提示符下的一些常用命令及其用法。
1、RMAN提示符下執行SQL語句
語法: SQL '<command>' ;
語法比較簡單,就是提示符下輸入SQL,後接SQL命令,命令用單引號括起來
command 通常為可執行的SQL命令語句,也可以為PL/SQL塊
使用限制
如果SQL語句中包含文件名,則文件名及路徑需要使用兩個單引號括起來,整個SQL語句首尾需要使用雙引號
可以執行SQL查詢語句,但是無任何結果輸出
RMAN提示符下常用的命令
『捌』 RMAN Catalog 和 Nocatalog 的區別
一.Nocatalog
Nocatalog方式 就是用control file作為catalog,每一次備份都要往控制文件裡面寫好多備份信息,控制文件裡面會有越來越多的備份信息。因此,當使用rman nocatalog方式備份時,備份controlfile是非常重要的。
由於nocatalog時利用controlfile存放備份信息,建議將Oracle參數文件中的CONTROL_FILE_RECORD_KEEP_TIME值加大(預設為7天), 參數在$ORACLE_HOME/dbs/initSID.ora中,該參數control_file__record_keep_time設置備份信息保存時間,到規定時間就自動清除以前的備份信息。
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string D:/APP/ADMINISTRATOR/ORADATA/O
control_management_pack_access string DIAGNOSTIC+TUNING
SQL> alter system set control_file_record_keep_time=14 scope=both;
系統已更改。
SQL> select name,value,issys_modifiable from v$parameter where name='control_file_record_keep_time';
NAME VALUE ISSYS_MOD
--------------- ---------- ---------
control_file_re 14 IMMEDIATE
二.Catalog
Catalog 則必須要首先要創建目錄備份資料庫,建立恢復目錄。示例如下:
1.創建Catalog所需要的表空間
SQL>create tablespace rman_ts datafile '/u01/oracle/oradata/ora10g/rmants.dbf' size 20M;
2.創建RMAN用戶並授權
SQL>create user rman identified by rman default tablespace rman_ts quota unlimited on rman_ts;
SQL>grant recovery_catalog_owner to rman;(grant connect to rman)
查看角色所擁有的許可權: select * from dba_sys_privs where grantee='RECOVERY_CATALOG_OWNER';
(RECOVER_CATALOG_OWNER,CONNECT,RESOURCE)
3.創建恢復目錄
oracle>rman catalog rman/rman
RMAN>create catalog tablespace rman_ts;
RMAN>register database;(database是target database)
database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
RMAN> connect target /;
以後要使用備份和恢復,需要連接到兩個資料庫中,命令:
oracle>rman target / catalog rman/rman (第一斜杠表示target資料庫,catalog表示catalog目錄 rman/rman表示catalog用戶名和密碼)
命令執行後顯示:
Recovery Manager: Release 10.2.0.1.0 - Proction on Wed Dec 10 15:00:42 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: ORA10G (DBID=3988862108)
connected to recovery catalog database
命令解釋:
Report schema Report shema是指在資料庫中需找schema
List backup 從control讀取信息
Crosscheck backup 看一下backup的文件,檢查controlfile中的目錄或文件是否真正在磁碟上
Delete backupset 24 24代表backupset 的編號, 既delete目錄,也delete你的文件
RMAN 備份與恢復 實例
http://blog.csdn.net/tianlesoftware/archive/2009/10/20/4699320.aspx
Oracle Rman 命令詳解(List report backup configure)
http://blog.csdn.net/tianlesoftware/archive/2009/12/13/4976998.aspx
注意,當使用rman nocatalog恢復時,資料庫必須是處於「mount」狀態的。而Oracle startup mount的前提條件是control必須存在。因此,你必須在恢復datafile之前先恢復controlfile。 使用rman catalog方式時,可以startup nomount然後restore controlfile;但使用rman nocatalog時,必須先用文件方式恢復controlfile。
下面對比一下rman nocatalog和rman catalog的恢復時的步驟,以便建立正確的備份策略(以下的恢復都是在online狀態下的備份):
rman nocatalog恢復:
1) 建立oracle運行環境(包括init或sp文件)
2) 文件方式恢復controlfile到init文件指定的位置
3) startup mount
4) rman,恢復datafile
5) alter database open resetlogs
rman catalog恢復:
1) 建立oracle運行環境(包括init或sp文件)
2) rman ,restore controfile
3) alter database mount
4) rman, restore datafile
5) alter database open resetlogs
可以看出,rman nocatalog備份時,必須用文件方式備份controlfile。
『玖』 如何使用 RMAN 識別資料庫中損壞的對象
步驟1:識別壞塊
執行下面的 RMAN 命令,使所有的壞塊信息被記錄在 v$database_block_corruption 視圖中:
RMAN> backup validate check logical database;
注意:
這個命令只是檢查資料庫的壞塊,而不會真正進行備份。從 11g 開始可以省略 backup 子句,而直接使用命令"validate check logical database"。
如果由於缺失文件導致命令失敗,可以增加 'SKIP INACCESSIBLE' 子句來避免這個問題。
為了加快檢查速度,可以設置 PARALLELISM 指定多個通道:
RMAN> configure device type disk parallelism 4;
RMAN> backup validate check logical database;
OR
RMAN> run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup validate check logical database;
}
輸出
壞塊信息會被記錄在視圖 V$DATABASE_BLOCK_CORRUPTION 中。11g RMAN 會生成一個 trace 文件,詳細描述壞塊信息:
RMAN VALIDATE 屏幕輸出:
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN