虽然使用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;