分享

与备份有关的动态性能视图

 cinnamon 2011-10-18

 

《涂抹Oracle——三思笔记之一步一步学Oracle》作为一本创作之初就定位于技术应用的实践参考书,虽然前前后后串联了Oracle数据库中十余个常用特性或工具,但在章节的设计上完全遵循这一理念。第8章讲述RMAN说,我能备份。本节说的是V$BACKUP_CORRUPTION视图。

8.7.7  RMAN备份相关的动态性能视图

虽然使用LIST、REPORT等RMAN命令时也能显示备份信息,不过使用那些命令后看到的都是结果,而通过Oracle数据库中的一些动态性能视图,不仅仅能够看到备份信息,甚至还能在备份过程中监控备份进度,查看当前进行的操作等。

提 示

什么是动态性能视图?

可以将其理解成由Oracle提供的存在于内存中的虚拟视图。这批视图由Oracle的后台进程自行维护,访问的时候与普通表或视图一样,但用户只能读取而无法插入、修改或删除这些视图中的内容。这一系列视图在数据库调优方面具有重要的、不可替代的作用,而且功能完善、数量庞大。关于动态性能视图的全面介绍超出本书内容,感兴趣的朋友请参考相关书籍或阅读官方文档,本小节中仅介绍部分与RMAN备份恢复相关的常用动态性能视图。

8.7.7.1  V$ARCHIVED_LOG视图

本视图包含了归档重做日志文件的信息,如归档文件的名称、归档路径等。该视图中数据来自于控制文件,一般是当一个Online Redologs完成归档后,就会在控制文件中插入一条记录,如果归档目录有多个的话,则同时插入对应数量的记录(当然路径肯定不同),另外当通过RMAN恢复归档文件或复制归档文件时,也会插入对应的记录。

通过DESC命令查看可以看到该视图包括的列有很多:

  1. SQL> DESC V$ARCHIVED_LOG  
  2.  Name                       Null?   Type  
  3.  -----------------------------------------------------------  
  4.  RECID                              NUMBER  
  5.  STAMP                              NUMBER  
  6.  NAME                               VARCHAR2(513)  
  7.  DEST_ID                            NUMBER  
  8.  THREAD#                            NUMBER  
  9.  SEQUENCE#                          NUMBER  
  10.  RESETLOGS_CHANGE#                  NUMBER  
  11.  RESETLOGS_TIME                     DATE 
  12.  RESETLOGS_ID                       NUMBER  
  13.  FIRST_CHANGE#                      NUMBER  
  14.  FIRST_TIME                         DATE 
  15.  NEXT_CHANGE#                       NUMBER  
  16.  NEXT_TIME                          DATE 
  17.  BLOCKS                             NUMBER  
  18.  BLOCK_SIZE                         NUMBER  
  19.  CREATOR                            VARCHAR2(7)  
  20.  REGISTRAR                          VARCHAR2(7)  
  21.  STANDBY_DEST                       VARCHAR2(3)  
  22.  ARCHIVED                           VARCHAR2(3)  
  23.  APPLIED                            VARCHAR2(3)  
  24.  DELETED                            VARCHAR2(3)  
  25.  STATUS                             VARCHAR2(1)  
  26.  COMPLETION_TIME                    DATE 
  27.  DICTIONARY_BEGIN                   VARCHAR2(3)  
  28.  DICTIONARY_END                     VARCHAR2(3)  
  29.  END_OF_REDO                        VARCHAR2(3)  
  30.  BACKUP_COUNT                       NUMBER  
  31.  ARCHIVAL_THREAD#                   NUMBER  
  32.  ACTIVATION#                        NUMBER  
  33.  IS_RECOVERY_DEST_FILE              VARCHAR2(3)  
  34.  COMPRESSED                         VARCHAR2(3)  
  35.  FAL                                VARCHAR2(3)  
  36.  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后有可能出现。

其他字段理解起来比较简单,按照字面意义理解即可。

8.7.7.2  V$BACKUP_SET视图

V$BACKUP_SET视图中显示当前创建的备份集信息,该视图比较简单,通过DESC命令查看结构:

  1. SQL> DESC V$BACKUP_SET;  
  2.  Name                   Null?   Type  
  3.  ------------------------------------------------  
  4.  RECID                           NUMBER  
  5.  STAMP                           NUMBER  
  6.  SET_STAMP                       NUMBER  
  7.  SET_COUNT                       NUMBER  
  8.  BACKUP_TYPE                    VARCHAR2(1)  
  9.  CONTROLFILE_INCLUDED           VARCHAR2(3)  
  10.  INCREMENTAL_LEVEL             NUMBER  
  11.  PIECES                          NUMBER  
  12.  START_TIME                      DATE 
  13.  COMPLETION_TIME                DATE 
  14.  ELAPSED_SECONDS               NUMBER  
  15.  BLOCK_SIZE                      NUMBER  
  16.  INPUT_FILE_SCAN_ONLY          VARCHAR2(3)  
  17.  KEEP                            VARCHAR2(3)  
  18.  KEEP_UNTIL                      DATE 
  19.  KEEP_OPTIONS                    VARCHAR2(10) 

该视图查看的信息与RMAN中命令LIST BACKUP类似,只不过表示形式不同。其中BACKUP_TYPE列标记该备份集中包含的文件类型,有下列几个值:

L:表示包含归档重做日志文件;

D:表示数据文件完全备份;

I:表示增量备份。

还有一个常用的关联视图V$BACKUP_SET_DETAILS,该视图除了包含V$BACKUP_SET中的数据外,还额外记录了备份集的详细信息,比如备份集大小、备份集所在设备等。额外的列也都比较简单,用字面意义理解列定义即可。另外还有一个显示所有备份集统计信息的视图V$BACKUP_SET_SUMMARY,该视图中只有一条记录(统计自所有备份集的数据),不过并不常用,这里就不介绍了。

8.7.7.3  V$BACKUP_PIECE视图

V$BACKUP_PIECE中显示备份片段的信息,通过SET_STAMP列可以与V$BACKUP_SET.SET_STAMP视图关联,从而获得备份集的信息。

使用DESC命令查看该视图,会发现列还是有点儿多的:

  1. SQL> DESC V$BACKUP_PIECE;  
  2.  Name                 Null?   Type  
  3.  -------------------------------------------------  
  4.  RECID                           NUMBER  
  5.  STAMP                           NUMBER  
  6.  SET_STAMP                       NUMBER  
  7.  SET_COUNT                       NUMBER  
  8.  PIECE#                          NUMBER  
  9.  COPY#                           NUMBER  
  10.  DEVICE_TYPE                     VARCHAR2(17)  
  11.  HANDLE                          VARCHAR2(513)  
  12.  COMMENTS                       VARCHAR2(64)  
  13.  MEDIA                           VARCHAR2(65)  
  14.  MEDIA_POOL                     NUMBER  
  15.  CONCUR                          VARCHAR2(3)  
  16.  TAG                             VARCHAR2(32)  
  17.  STATUS                          VARCHAR2(1)  
  18.  START_TIME                      DATE 
  19.  COMPLETION_TIME                DATE 
  20.  ELAPSED_SECONDS               NUMBER  
  21.  DELETED                         VARCHAR2(3)  
  22.  BYTES                           NUMBER  
  23.  IS_RECOVERY_DEST_FILE          VARCHAR2(3)  
  24.  RMAN_STATUS_RECID             NUMBER  
  25.  RMAN_STATUS_STAMP              NUMBER  
  26.  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中的列外,还提供了一些额外的信息。

8.7.7.4  V$BACKUP_CORRUPTION视图

这个视图中记录了备份集中发现的损坏的数据块,通常是当你在RMAN中执行了BACKUP VALIDATE命令对备份集进行检查后,如果发现有操作的数据块,就会向该视图中插入记录。注意不包括控制文件或归档文件,因为这两类文件都是独立个体,一旦损坏就表示彻底完蛋,不可修复,不像数据块,就算某个数据块坏了也没关系,还可以用其他备份集中匹配的数据进行修复。

通过DESC查看:

  1. SQL> DESC V$BACKUP_CORRUPTION;  
  2.  Name                  Null?   Type  
  3.  ----------------------------------------------  
  4.  RECID                          NUMBER  
  5.  STAMP                          NUMBER  
  6.  SET_STAMP                      NUMBER  
  7.  SET_COUNT                      NUMBER  
  8.  PIECE#                         NUMBER  
  9.  FILE#                          NUMBER  
  10.  BLOCK#                         NUMBER  
  11.  BLOCKS                         NUMBER  
  12.  CORRUPTION_CHANGE#             NUMBER  
  13.  MARKED_CORRUPT                 VARCHAR2(3)  
  14.  CORRUPTION_TYPE               VARCHAR2(9) 

该视图的列定义都比较简单,字面意义理解即可,就不过多描述了。

8.7.7.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值,查询会话的相关信息:

  1. SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS  
  2.   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信息:

  1. SELECT S.SID, S.SERIAL#, P.SPID, S.CLIENT_INFO  
  2.   FROM V$PROCESS P, V$SESSION S  
  3.  WHERE P.ADDR = S.PADDR  
  4.    AND CLIENT_INFO LIKE '%id=rman%' 

8.7.7.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语句获得正在进行的镜像复制操作的状态信息:

  1. SELECT SID,  
  2.        SERIAL#,  
  3.        CONTEXT,  
  4.        SOFAR,  
  5.        TOTALWORK,  
  6.        ROUND(SOFAR / TOTALWORK * 100, 2) "%_COMPLETE" 
  7.   FROM V$SESSION_LONGOPS  
  8.  WHERE OPNAME LIKE 'RMAN:%' 
  9.    AND OPNAME NOT LIKE '%aggregate%' 
  10.    AND TOTALWORK != 0  
  11.    AND SOFAR <> TOTALWORK; 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多