Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669746
  • 博文数量: 128
  • 博客积分: 265
  • 博客等级: 二等列兵
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-27 20:44
个人简介

just do it

文章分类

全部博文(128)

文章存档

2023年(1)

2020年(1)

2019年(1)

2018年(3)

2017年(6)

2016年(17)

2015年(16)

2014年(39)

2013年(34)

2012年(10)

分类: Oracle

2015-06-30 12:47:15

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


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

提 示

什么是动态性能视图?

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

1.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后有可能出现。

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

1.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,该视图中只有一条记录(统计自所有备份集的数据),不过并不常用,这里就不介绍了。

1.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中的列外,还提供了一些额外的信息。

1.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)


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

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

  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%' 

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

点击(此处)折叠或打开

  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;
阅读(1426) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~