雖然使用LIST、REPORT等RMAN命令時也能顯示備份信息,不過使用那些命令后看到的都是結(jié)果,而通過Oracle數(shù)據(jù)庫中的一些動態(tài)性能視圖,不僅僅能夠看到備份信息,甚至還能在備份過程中監(jiān)控備份進度,查看當前進行的操作等。
提 示
什么是動態(tài)性能視圖?
可以將其理解成由Oracle提供的存在于內(nèi)存中的虛擬視圖。這批視圖由Oracle的后臺進程自行維護,訪問的時候與普通表或視圖一樣,但用戶只能讀取而無法插入、修改或刪除這些視圖中的內(nèi)容。這一系列視圖在數(shù)據(jù)庫調(diào)優(yōu)方面具有重要的、不可替代的作用,而且功能完善、數(shù)量龐大。關于動態(tài)性能視圖的全面介紹超出本書內(nèi)容,感興趣的朋友請參考相關書籍或閱讀官方文檔,本小節(jié)中僅介紹部分與RMAN備份恢復相關的常用動態(tài)性能視圖。
8.7.7.1 V$ARCHIVED_LOG視圖
本視圖包含了歸檔重做日志文件的信息,如歸檔文件的名稱、歸檔路徑等。該視圖中數(shù)據(jù)來自于控制文件,一般是當一個Online Redologs完成歸檔后,就會在控制文件中插入一條記錄,如果歸檔目錄有多個的話,則同時插入對應數(shù)量的記錄(當然路徑肯定不同),另外當通過RMAN恢復歸檔文件或復制歸檔文件時,也會插入對應的記錄。
通過DESC命令查看可以看到該視圖包括的列有很多:
- SQL> DESC V$ARCHIVED_LOG
- Name Null? Type
- -----------------------------------------------------------
- RECID NUMBER
- STAMP NUMBER
- NAME VARCHAR2(513)
- DEST_ID NUMBER
- THREAD# NUMBER
- SEQUENCE# NUMBER
- RESETLOGS_CHANGE# NUMBER
- RESETLOGS_TIME DATE
- RESETLOGS_ID NUMBER
- FIRST_CHANGE# NUMBER
- FIRST_TIME DATE
- NEXT_CHANGE# NUMBER
- NEXT_TIME DATE
- BLOCKS NUMBER
- BLOCK_SIZE NUMBER
- CREATOR VARCHAR2(7)
- REGISTRAR VARCHAR2(7)
- STANDBY_DEST VARCHAR2(3)
- ARCHIVED VARCHAR2(3)
- APPLIED VARCHAR2(3)
- DELETED VARCHAR2(3)
- STATUS VARCHAR2(1)
- COMPLETION_TIME DATE
- DICTIONARY_BEGIN VARCHAR2(3)
- DICTIONARY_END VARCHAR2(3)
- END_OF_REDO VARCHAR2(3)
- BACKUP_COUNT NUMBER
- ARCHIVAL_THREAD# NUMBER
- ACTIVATION# NUMBER
- IS_RECOVERY_DEST_FILE VARCHAR2(3)
- COMPRESSED VARCHAR2(3)
- FAL VARCHAR2(3)
- END_OF_REDO_TYPE VARCHAR2(10)
一般情況下并不是每一列都需要關注,通常你需要看下列字段的值:
NAME:記錄歸檔文件路徑和名稱。
THREAD#:歸檔線程號,RAC環(huán)境下適用。
SEQUENCE#:歸檔文件序號。
FIRST_TIME:等同于創(chuàng)建時間。
CREATOR:該條記錄的創(chuàng)建者(告訴你究竟是哪個進程干的)。
APPLIED:是否被應用,Data Guard環(huán)境下適用。
STATUS:該條記錄的狀態(tài)。
其中,CREATOR列標識該條記錄的創(chuàng)建者,有下列幾個值:
ARCH:表示由歸檔進程創(chuàng)建。
FGRD:表示由前臺進程創(chuàng)建。
RMAN:表示由RMAN創(chuàng)建。
SRMN:表示由Standby端的RMAN創(chuàng)建。
LGWR:表示由Logwriter進程創(chuàng)建。
STATUS列標識該條記錄的狀態(tài),有下列幾個值:
A:指正常歸檔狀態(tài)。
D:指該記錄指向的歸檔文件已被刪除。
U:指該記錄指向的歸檔已不存用。
X:指該條記錄失效,通常是當你在RMAN中執(zhí)行了CROSSCHECK ARCHIVELOG后有可能出現(xiàn)。
其他字段理解起來比較簡單,按照字面意義理解即可。
V$BACKUP_SET視圖中顯示當前創(chuàng)建的備份集信息,該視圖比較簡單,通過DESC命令查看結(jié)構(gòu):
- SQL> DESC V$BACKUP_SET;
- Name Null? Type
- ------------------------------------------------
- RECID NUMBER
- STAMP NUMBER
- SET_STAMP NUMBER
- SET_COUNT NUMBER
- BACKUP_TYPE VARCHAR2(1)
- CONTROLFILE_INCLUDED VARCHAR2(3)
- INCREMENTAL_LEVEL NUMBER
- PIECES NUMBER
- START_TIME DATE
- COMPLETION_TIME DATE
- ELAPSED_SECONDS NUMBER
- BLOCK_SIZE NUMBER
- INPUT_FILE_SCAN_ONLY VARCHAR2(3)
- KEEP VARCHAR2(3)
- KEEP_UNTIL DATE
- KEEP_OPTIONS VARCHAR2(10)
該視圖查看的信息與RMAN中命令LIST BACKUP類似,只不過表示形式不同。其中BACKUP_TYPE列標記該備份集中包含的文件類型,有下列幾個值:
L:表示包含歸檔重做日志文件;
D:表示數(shù)據(jù)文件完全備份;
I:表示增量備份。
還有一個常用的關聯(lián)視圖V$BACKUP_SET_DETAILS,該視圖除了包含V$BACKUP_SET中的數(shù)據(jù)外,還額外記錄了備份集的詳細信息,比如備份集大小、備份集所在設備等。額外的列也都比較簡單,用字面意義理解列定義即可。另外還有一個顯示所有備份集統(tǒng)計信息的視圖V$BACKUP_SET_SUMMARY,該視圖中只有一條記錄(統(tǒng)計自所有備份集的數(shù)據(jù)),不過并不常用,這里就不介紹了。
8.7.7.3 V$BACKUP_PIECE視圖
V$BACKUP_PIECE中顯示備份片段的信息,通過SET_STAMP列可以與V$BACKUP_SET.SET_STAMP視圖關聯(lián),從而獲得備份集的信息。
使用DESC命令查看該視圖,會發(fā)現(xiàn)列還是有點兒多的:
- SQL> DESC V$BACKUP_PIECE;
- Name Null? Type
- -------------------------------------------------
- RECID NUMBER
- STAMP NUMBER
- SET_STAMP NUMBER
- SET_COUNT NUMBER
- PIECE# NUMBER
- COPY# NUMBER
- DEVICE_TYPE VARCHAR2(17)
- HANDLE VARCHAR2(513)
- COMMENTS VARCHAR2(64)
- MEDIA VARCHAR2(65)
- MEDIA_POOL NUMBER
- CONCUR VARCHAR2(3)
- TAG VARCHAR2(32)
- STATUS VARCHAR2(1)
- START_TIME DATE
- COMPLETION_TIME DATE
- ELAPSED_SECONDS NUMBER
- DELETED VARCHAR2(3)
- BYTES NUMBER
- IS_RECOVERY_DEST_FILE VARCHAR2(3)
- RMAN_STATUS_RECID NUMBER
- RMAN_STATUS_STAMP NUMBER
- COMPRESSED VARCHAR2(3)
不過通常情況下需要我們關注的并不多,如下所示:
SET_STAMP:用來關聯(lián)V$BACKUP_SET列。
PIECE#:該備份片段在對應備份集中的序號,默認是從1開始。
DEVICE_TYPE:備份片段對應文件存儲的設備類型。
HANDLE:備份片段對應的文件。
STATUS:備份片段狀態(tài),有三個狀態(tài)值:A(可用);D(已刪除);或X(文件存在)。
BYTES:該備份片段大小。
與V$BACKUP_SET一樣,V$BACKUP_PIECE也有一個對應的記錄詳細信息的視圖V$BACKUP_PIECE_DETAILS,該視圖中除了包含V$BACKUP_PIECE中的列外,還提供了一些額外的信息。
8.7.7.4 V$BACKUP_CORRUPTION視圖
這個視圖中記錄了備份集中發(fā)現(xiàn)的損壞的數(shù)據(jù)塊,通常是當你在RMAN中執(zhí)行了BACKUP VALIDATE命令對備份集進行檢查后,如果發(fā)現(xiàn)有操作的數(shù)據(jù)塊,就會向該視圖中插入記錄。注意不包括控制文件或歸檔文件,因為這兩類文件都是獨立個體,一旦損壞就表示徹底完蛋,不可修復,不像數(shù)據(jù)塊,就算某個數(shù)據(jù)塊壞了也沒關系,還可以用其他備份集中匹配的數(shù)據(jù)進行修復。
通過DESC查看:
- SQL> DESC V$BACKUP_CORRUPTION;
- Name Null? Type
- ----------------------------------------------
- RECID NUMBER
- STAMP NUMBER
- SET_STAMP NUMBER
- SET_COUNT NUMBER
- PIECE# NUMBER
- FILE# NUMBER
- BLOCK# NUMBER
- BLOCKS NUMBER
- CORRUPTION_CHANGE# NUMBER
- MARKED_CORRUPT VARCHAR2(3)
- CORRUPTION_TYPE VARCHAR2(9)
該視圖的列定義都比較簡單,字面意義理解即可,就不過多描述了。
8.7.7.5 V$SESSION視圖和V$PROCESS視圖
不僅僅局限于RMAN,在整個數(shù)據(jù)庫運行過程中V$SESSION和V$PROCESS都是非常重要并且常用的視圖。
1.V$SESSION視圖對應"會話"信息
每一個連接到Oracle數(shù)據(jù)庫的會話都能在該視圖中對應一條記錄,根據(jù)該視圖中的信息可以查詢該會話使用的用戶,正在執(zhí)行或者剛剛執(zhí)行的SQL語句,連接者的信息等。
V$SESSION視圖中的列很多,常用到的會有如下幾列:
SID:會話的標識,具有唯一性,通常要對某個會話進行分析前,首先就需要獲得該會話的SID。
SERIAL#:會話的序號。
PADDR:會話所屬進程的地址,關聯(lián)V$PROCESS視圖即可查到該會話的所屬進程,然后再通過V$PROCESS視圖得到對應的操作系統(tǒng)進程號(Windows對應的是線程號)。
USERNAME:創(chuàng)建該會話的用戶名。
CLIENT_INFO:還記得SET COMMAND ID命令嗎?該命令設置的值就會在V$SESSION.CLIENT_INFO中體現(xiàn)。
OSUSER:客戶端操作系統(tǒng)的用戶名。
MACHINE:客戶端的機器名。
TERMINAL:客戶端運行的終端名。
PROGRAM:客戶端執(zhí)行的程序名。
SQL_ADDRESS:執(zhí)行SQL的地址。
SQL_HASH_VALUE:執(zhí)行SQL的HASH值,與SQL_ADDRESS關聯(lián)查詢其他SQL相關視圖后即可查詢會話當前正在執(zhí)行的SQL語句。
EVENT:當前會話的等待事件。
例如:已知設置的client_info值,查詢會話的相關信息:
- SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
- FROM V$SESSION WHERE client_info like '%id=rman%';
2.V$PROCESS視圖對應"連接"信息
V$PROCESS視圖中的一條記錄對應操作系統(tǒng)中的一個進程(Windows中為線程),該視圖中的SPID即操作系統(tǒng)中的進程號,通過該視圖就可以將Oracle中的會話、連接與操作系統(tǒng)中的進程關聯(lián)起來。
例如:通過下列SQL語句,通過關聯(lián)查詢V$PROCESS和V$SESSION獲得執(zhí)行RMAN操作的進程的SID與SPID信息:
- SELECT S.SID, S.SERIAL#, P.SPID, S.CLIENT_INFO
- FROM V$PROCESS P, V$SESSION S
- WHERE P.ADDR = S.PADDR
- AND CLIENT_INFO LIKE '%id=rman%'
8.7.7.6 V$SESSION_LONGOPS視圖
V$SESSION_LONGOPS視圖本意是記錄Oracle數(shù)據(jù)庫中執(zhí)行時間超過6秒的操作,由于RMAN備份操作涉及大量I/O讀寫,多數(shù)情況下肯定會超過6秒,因此通過該視圖查詢RMAN操作正合適。
該視圖中的列并不是很多,需要我們關注的主要有下列幾個:
SID:會話的標識,具有唯一性,通常要對某個會話進行分析前,首先就需要獲得該會話的SID。
SERIAL#:會話的序號。
OPNAME:操作描述信息,如RMAN: full datafile backup或RMAN: full datafile restore。
SOFAR:已完成的工作量。
TOTALWORK:要完成的工作總量。
MESSAGE:當前操作的統(tǒng)計信息。
SQL_ADDRESS:執(zhí)行SQL的地址。
SQL_HASH_VALUE:執(zhí)行SQL的HASH值,與SQL_ADDRESS關聯(lián)查詢其他SQL相關視圖后即可查詢會話當前正在執(zhí)行的SQL語句。
可以通過如下SQL語句獲得正在進行的鏡像復制操作的狀態(tài)信息:
- 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;