雖然使用LIST、REPORT等RMAN命令時也能顯示備份資訊,不過使用那些命令後看到的都是結果,而通過Oracle資料庫中的一些動態效能檢視,不僅僅能夠看到備份資訊,甚至還能在備份過程中監控備份進度,檢視當前進行的操作等。
提 示
什麼是動態效能檢視?
可以將其理解成由Oracle提供的存在於記憶體中的虛擬檢視。這批檢視由Oracle的後臺程式自行維護,訪問的時候與普通表或檢視一樣,但使用者只能讀取而無法插入、修改或刪除這些檢視中的內容。這一系列檢視在資料庫調優方面具有重要的、不可替代的作用,而且功能完善、數量龐大。關於動態效能檢視的全面介紹超出本書內容,感興趣的朋友請參考相關書籍或閱讀官方文件,本小節中僅介紹部分與RMAN備份恢復相關的常用動態效能檢視。
1.1 V$ARCHIVED_LOG檢視
本檢視包含了歸檔重做日誌檔案的資訊,如歸檔檔案的名稱、歸檔路徑等。該檢視中資料來自於控制檔案,一般是當一個Online Redologs完成歸檔後,就會在控制檔案中插入一條記錄,如果歸檔目錄有多個的話,則同時插入對應數量的記錄(當然路徑肯定不同),另外當通過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環境下適用。
SEQUENCE#:歸檔檔案序號。
FIRST_TIME:等同於建立時間。
CREATOR:該條記錄的建立者(告訴你究竟是哪個程式乾的)。
APPLIED:是否被應用,Data Guard環境下適用。
STATUS:該條記錄的狀態。
其中,CREATOR列標識該條記錄的建立者,有下列幾個值:
ARCH:表示由歸檔程式建立。
FGRD:表示由前臺程式建立。
RMAN:表示由RMAN建立。
SRMN:表示由Standby端的RMAN建立。
LGWR:表示由Logwriter程式建立。
STATUS列標識該條記錄的狀態,有下列幾個值:
A:指正常歸檔狀態。
D:指該記錄指向的歸檔檔案已被刪除。
U:指該記錄指向的歸檔已不存用。
X:指該條記錄失效,通常是當你在RMAN中執行了CROSSCHECK ARCHIVELOG後有可能出現。
其他欄位理解起來比較簡單,按照字面意義理解即可。
V$BACKUP_SET檢視中顯示當前建立的備份集資訊,該檢視比較簡單,通過DESC命令檢視結構:
點選(此處)摺疊或開啟
-
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:表示資料檔案完全備份;
I:表示增量備份。
還有一個常用的關聯檢視V$BACKUP_SET_DETAILS,該檢視除了包含V$BACKUP_SET中的資料外,還額外記錄了備份集的詳細資訊,比如備份集大小、備份集所在裝置等。額外的列也都比較簡單,用字面意義理解列定義即可。另外還有一個顯示所有備份集統計資訊的檢視V$BACKUP_SET_SUMMARY,該檢視中只有一條記錄(統計自所有備份集的資料),不過並不常用,這裡就不介紹了。
1.3 V$BACKUP_PIECE檢視
V$BACKUP_PIECE中顯示備份片段的資訊,通過SET_STAMP列可以與V$BACKUP_SET.SET_STAMP檢視關聯,從而獲得備份集的資訊。
使用DESC命令檢視該檢視,會發現列還是有點兒多的:
點選(此處)摺疊或開啟
-
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:用來關聯V$BACKUP_SET列。
PIECE#:該備份片段在對應備份集中的序號,預設是從1開始。
DEVICE_TYPE:備份片段對應檔案儲存的裝置型別。
HANDLE:備份片段對應的檔案。
STATUS:備份片段狀態,有三個狀態值:A(可用);D(已刪除);或X(檔案存在)。
BYTES:該備份片段大小。
與V$BACKUP_SET一樣,V$BACKUP_PIECE也有一個對應的記錄詳細資訊的檢視V$BACKUP_PIECE_DETAILS,該檢視中除了包含V$BACKUP_PIECE中的列外,還提供了一些額外的資訊。
1.4 V$BACKUP_CORRUPTION檢視
這個檢視中記錄了備份集中發現的損壞的資料塊,通常是當你在RMAN中執行了BACKUP VALIDATE命令對備份集進行檢查後,如果發現有操作的資料塊,就會向該檢視中插入記錄。注意不包括控制檔案或歸檔檔案,因為這兩類檔案都是獨立個體,一旦損壞就表示徹底完蛋,不可修復,不像資料塊,就算某個資料塊壞了也沒關係,還可以用其他備份集中匹配的資料進行修復。
通過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)
該檢視的列定義都比較簡單,字面意義理解即可,就不過多描述了。
1.5 V$SESSION檢視和V$PROCESS檢視
不僅僅侷限於RMAN,在整個資料庫執行過程中V$SESSION和V$PROCESS都是非常重要並且常用的檢視。
1.V$SESSION檢視對應"會話"資訊
每一個連線到Oracle資料庫的會話都能在該檢視中對應一條記錄,根據該檢視中的資訊可以查詢該會話使用的使用者,正在執行或者剛剛執行的SQL語句,連線者的資訊等。
V$SESSION檢視中的列很多,常用到的會有如下幾列:
SID:會話的標識,具有唯一性,通常要對某個會話進行分析前,首先就需要獲得該會話的SID。
SERIAL#:會話的序號。
PADDR:會話所屬程式的地址,關聯V$PROCESS檢視即可查到該會話的所屬程式,然後再通過V$PROCESS檢視得到對應的作業系統程式號(Windows對應的是執行緒號)。
USERNAME:建立該會話的使用者名稱。
CLIENT_INFO:還記得SET COMMAND ID命令嗎?該命令設定的值就會在V$SESSION.CLIENT_INFO中體現。
OSUSER:客戶端作業系統的使用者名稱。
MACHINE:客戶端的機器名。
TERMINAL:客戶端執行的終端名。
PROGRAM:客戶端執行的程式名。
SQL_ADDRESS:執行SQL的地址。
SQL_HASH_VALUE:執行SQL的HASH值,與SQL_ADDRESS關聯查詢其他SQL相關檢視後即可查詢會話當前正在執行的SQL語句。
EVENT:當前會話的等待事件。
例如:已知設定的client_info值,查詢會話的相關資訊:
- SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
- FROM V$SESSION WHERE client_info like '%id=rman%';
2.V$PROCESS檢視對應"連線"資訊
V$PROCESS檢視中的一條記錄對應作業系統中的一個程式(Windows中為執行緒),該檢視中的SPID即作業系統中的程式號,通過該檢視就可以將Oracle中的會話、連線與作業系統中的程式關聯起來。
例如:通過下列SQL語句,通過關聯查詢V$PROCESS和V$SESSION獲得執行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%'
1.6 V$SESSION_LONGOPS檢視
V$SESSION_LONGOPS檢視本意是記錄Oracle資料庫中執行時間超過6秒的操作,由於RMAN備份操作涉及大量I/O讀寫,多數情況下肯定會超過6秒,因此通過該檢視查詢RMAN操作正合適。
該檢視中的列並不是很多,需要我們關注的主要有下列幾個:
SID:會話的標識,具有唯一性,通常要對某個會話進行分析前,首先就需要獲得該會話的SID。
SERIAL#:會話的序號。
OPNAME:操作描述資訊,如RMAN: full datafile backup或RMAN: full datafile restore。
SOFAR:已完成的工作量。
TOTALWORK:要完成的工作總量。
MESSAGE:當前操作的統計資訊。
SQL_ADDRESS:執行SQL的地址。
SQL_HASH_VALUE:執行SQL的HASH值,與SQL_ADDRESS關聯查詢其他SQL相關檢視後即可查詢會話當前正在執行的SQL語句。
可以通過如下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;