一、什么是Health Monitor Checks
Health Monitor Checks能够发现文件损坏,物理、逻辑块损坏,undo、redo损坏,数据字典损坏等等。
Health Monitor Checks产生结果报告,它包含了解决问题的办法。

-----
oracle另外一个坏块检查工具DBVERIFY 详见我的这篇文章:
Oracle坏块验证工具:DBVERIFY
http://blog.chinaunix.net/uid-23284114-id-3687810.html
-----

Health Monitor Checks有两种运行模式:只有redo检查需要在DB-offline模式下运行,其他检查都是在DB-online下。
?DB-online mode means the check can be run while the database is open (that is, in OPEN mode or MOUNT mode).
?DB-offline mode means the check can be run when the instance is available but the database itself is closed (that is, in NOMOUNT mode).

--可以手动检查的项目
SELECT name FROM V$HM_CHECK WHERE INTERNAL_CHECK = 'N' ;
NAME
----------------------------------------------------------------
DB Structure Integrity Check
CF Block Integrity Check
Data Block Integrity Check
Redo Integrity Check
Transaction Integrity Check
Undo Segment Integrity Check
Dictionary Integrity Check
ASM Allocation Check

--需要用到的程序包
DBMS_HM.RUN_CHECK (
   check_name     IN  VARCHAR2, --检查的项目名,通过SELECT name FROM V$HM_CHECK WHERE INTERNAL_CHECK = 'N' 可以查到。
   run_name       IN  VARCHAR2 := NULL, --用户自定义的该次运行检查的名称
   timeout        IN  NUMBER := NULL, --超时时间。
   input_params   IN  VARCHAR2 := NULL); --输入参数,多个参数用分号(;)隔开。具体制定检查项目。
                                         --具体参数可以从V$HM_CHECK_PARAM视图中找到。
                                         --例子,'BLC_DF_NUM=1;BLC_BL_NUM=23456'表示检查第1个数据文件的第23456个block。
                                         --通过下面的SQL,可以找出检查项目对应的参数。
                                         --找出Data Block Integrity Check项目对应的参数
                                            SELECT a.* FROM v$hm_check_param a, v$hm_check b
                                                WHERE a.check_id = b.id
                                            AND b.name = 'Data Block Integrity Check';

二、手动运行Health Checks  
1.数据字典完整性检查(Dictionary Integrity Check)
--执行检查
BEGIN
    DBMS_HM.RUN_CHECK('Dictionary Integrity Check', 'run_dict1');
END;
/

--查看检查报告
SET LONG 100000
SET LONGCHUNKSIZE 1000
SET PAGESIZE 1000
SET LINESIZE 512
SELECT DBMS_HM.GET_RUN_REPORT('run_dict1') FROM DUAL;

DBMS_HM.GET_RUN_REPORT('RUN_DICT1')
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Finding
 Finding Name  : Dictionary Inconsistency
 Finding ID    : 336
 Type          : FAILURE
 Status        : OPEN
 Priority      : CRITICAL
 Message       : SQL dictionary health check: syn$.owner fk 95 on object SYN$
               failed
 Message       : Damaged rowid is AAAABEAABAAANWhABE - description: Synonymn
               APEX_THEMES is referenced
 
 .........
 .........
 .........
 Finding Name  : Dictionary Inconsistency
 Finding ID    : 411
 Type          : FAILURE
 Status        : OPEN
 Priority      : CRITICAL
 Message       : SQL dictionary health check: syn$.owner fk 95 on object SYN$
               failed
 Message       : Damaged rowid is AAAABEAABAAANWgAB6 - description: Synonymn
               HTMLDB_ACTIVITY_LOG is referenced

2.检查数据块完整性(Data Block Integrity Check)
和数据字典完整性检查不同,数据块完整性需要指定input_params参数

<1>获得Data Block Integrity Check相关参数
SELECT a.* FROM v$hm_check_param a, v$hm_check b
WHERE a.check_id = b.id
AND b.name = 'Data Block Integrity Check';

ID NAME         CHECK_ID TYPE                 DEFAU      FLAGS DESCRIPTION
---------- ---------- ---------- -------------------- ----- ---------- ----------------------------------------
         8 BLC_DF_NUM          3 DBKH_PARAM_UB4                      0 File number
         9 BLC_BL_NUM          3 DBKH_PARAM_UB4                      0 Block number

<2>执行检查
begin
 DBMS_HM.RUN_CHECK(
 check_name => 'Data Block Integrity Check',
 run_name => 'chk_df5',
 input_params => 'BLC_DF_NUM=5;BLC_BL_NUM=2'
 );
end;
/
 
<3>获得报告
SET LONG 100000
SET LONGCHUNKSIZE 1000
SET PAGESIZE 1000
SET LINESIZE 512
SELECT DBMS_HM.GET_RUN_REPORT('chk_df5') FROM DUAL;

DBMS_HM.GET_RUN_REPORT('CHK_DF5')
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Basic Run Information
 Run Name                     : chk_df5
 Run Id                       : 781
 Check Name                   : Data Block Integrity Check
 Mode                         : MANUAL
 Status                       : COMPLETED
 Start Time                   : 2014-06-27 02:44:18.704834 +08:00
 End Time                     : 2014-06-27 02:44:19.964315 +08:00
 Error Encountered            : 0
 Source Incident Id           : 0
 Number of Incidents Created  : 0

Input Paramters for the Run
 BLC_DF_NUM=5
 BLC_BL_NUM=2

Run Findings And Recommendations
 
其他类型的检查大同小异,就不一一列举了。
 
 
三、Health Monitor 相关视图
--1.执行过哪些health Monitor
SELECT run_id, name, check_name, run_mode, src_incident FROM v$hm_run;

RUN_ID NAME                             CHECK_NAME                       RUN_MODE SRC_INCIDENT
---------- -------------------------------- -------------------------------- -------- ------------
        41 run_dict1                        Dictionary Integrity Check       MANUAL              0
         1 run_dict                         Dictionary Integrity Check       MANUAL              0  
 
--2.根据run_id获得health Monitor执行细节
SELECT type, description FROM v$hm_finding WHERE run_id = 41;
 
TYPE          DESCRIPTION
------------- ----------------------------------------------------------------------------------------------------
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed
FAILURE       SQL dictionary health check: syn$.owner fk 95 on object SYN$ failed

四、其他

*****11.2.0.3版本执行数据字典完整性检查会报错*****
SQL> BEGIN
  2      DBMS_HM.RUN_CHECK('Dictionary Integrity Check', 'run_dict');
  3  END;
  4  /
BEGIN
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01427: single-row subquery returns more than one row
ORA-06512: at "SYS.DBMS_HM", line 191
ORA-06512: at line 2

非官方解决办法:
-- Determine DDL statements (note: this will take a while to return results!)
 set long 100000
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY',true);
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'TABLESPACE',false);
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',false);
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE',false);

-- Checking the DDL statement
 col DDL form a100 word_wrapped
 select dbms_metadata.get_ddl(RTRIM(UPPER(object_type)),
                              RTRIM(UPPER(object_name)),
                              RTRIM(UPPER(owner))) DDL
  from DBA_OBJECTS
 where object_type='INDEX'
   and object_id
    in (select x from (select obj# x, obj#||','||intcol#,  count(obj#||','||intcol#)
          from ICOLDEP$
         group by obj#, obj#||','||intcol# having count(*) > 1)
 );

返回结果:
DDL
----------------------------------------------------------------------------------------------------
  CREATE UNIQUE INDEX "APEX_030200"."WWV_FLOW_WORKSHEETS_UNQ_IDX" ON "APEX_030200"."WWV_FLOW_WORKSHEETS" (CASE  WHEN "REGION_ID" IS NULL THEN "FLOW_I
D" END , CASE  WHEN "REGION_ID" IS NULL THEN "OWNER" END , CASE  WHEN "REGION_ID" IS NULL THEN "FOLD
ER_ID" END , CASE  WHEN "REGION_ID" IS NULL THEN "NAME" END )

CREATE UNIQUE INDEX "APEX_030200"."WWV_FLOW_WS_UNQ_ALIAS_IDX" ON "APEX_030200"."WWV_FLOW_WORKSHEETS" (CASE  WHEN "ALIAS" IS NOT NULL THEN "FLOW_ID"
 END , "ALIAS")

CREATE UNIQUE INDEX "APEX_030200"."WWV_FLOW_WORKSHEET_RPTS_UK" ON "APEX_030200"."WWV_FLOW_WORKSHEET_RPTS" (CASE  WHEN "SESSION_ID" IS NULL THEN "WO
RKSHEET_ID" END , CASE  WHEN "SESSION_ID" IS NULL THEN "APPLICATION_USER" END , CASE  WHEN "SESSION_
ID" IS NULL THEN "CATEGORY_ID" END , CASE  WHEN "SESSION_ID" IS NULL THEN "NAME" END )

对于安装了APEX 组件或者在DBCA创建数据库时选择了General Purpose从Seed中clone数据库而非Custom Database的DB ,都会创建有”APEX_030200″.”WWV_FLOW_WORKSHEETS_UNQ_IDX”、”APEX_030200″.”WWV_FLOW_WS_UNQ_ALIAS_IDX”、”APEX_030200″.”WWV_FLOW_WORKSHEET_RPTS_UK” 三个函数索引。
如果没有实际使用APEX组件的话,我们可以直接DROP掉APEX_030200:

SQL> drop user "APEX_030200" cascade;

再次执行下面的SQL,
-- Determine DDL statements (note: this will take a while to return results!)

set long 100000
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY',true);
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'TABLESPACE',false);
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',false);
 exec dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE',false);

-- Checking the DDL statement
 col DDL form a100 word_wrapped
 select dbms_metadata.get_ddl(RTRIM(UPPER(object_type)),
                              RTRIM(UPPER(object_name)),
                              RTRIM(UPPER(owner))) DDL
  from DBA_OBJECTS
 where object_type='INDEX'
   and object_id
    in (select x from (select obj# x, obj#||','||intcol#,  count(obj#||','||intcol#)
          from ICOLDEP$
         group by obj#, obj#||','||intcol# having count(*) > 1)
 );

no rows selected --没有结果返回就正确了

官方解决办法:
打Patch:12385172补丁
MOS:ORA-01427 occurs when running Dictionary Integrity Check: dbms_hm.run_check (文档 ID 1410513.1)
*************************************

参考:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/diag007.htm
http://www.oracledatabase12g.com/archives/dbms_hm-run_check-failed-ora-00604-ora-01427.html

转载:
十字螺丝钉
http://blog.chinaunix.net/uid/23284114.html

11g新特性:Health Monitor Checks的更多相关文章

  1. 11g新特性与12c新特性

    1. 11g新特性概图 管理新特性> 开发新特性> 2. 12c 新特性概图

  2. About Health Monitor Checks

    About Health Monitor Checks Health Monitor checks (also known as checkers, health checks, or checks) ...

  3. 11g新特性-自动sql调优(Automatic SQL Tuning)

    11g新特性-自动sql调优(Automatic SQL Tuning) 在Oracle 10g中,引进了自动sql调优特性.此外,ADDM也会监控捕获高负载的sql语句. 在Oracle 11g中, ...

  4. 使用Oracle 11g新特性 Active Database Duplication 搭建Dataguard环境

    Duplication Database 介绍 Duplicate database可以按照用途分为2种: duplicate database(复制出一个数据库) duplicate standby ...

  5. Oracle 11g 新特性 --SQL Plan Management 说明

    Oracle 11g 新特性 --SQL Plan Management 说明 参见大神博主文章: http://blog.csdn.net/tianlesoftware/article/detail ...

  6. Oracle 11g 新特性 – HM(Hang Manager)简介

    在这篇文章中我们会对oracle 11g 新特性—hang 管理器(Hang Manager) 进行介绍.我们需要说明,HM 只在RAC 数据库中存在. 在我们诊断数据库问题的时候,经常会遇到一些数据 ...

  7. 11G 新特性之 密码延迟认证

    11G 新特性之 密码延迟认证 11G 新特性之 密码延迟认证 Table of Contents 1. 特性简述 2. 特性潜在引发问题 3. 关闭特性 1 特性简述 为了防止用户密码的暴力破解,从 ...

  8. Oracle 11g新特性

    文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...

  9. 11g新特性-概述 (转)

    一.新特性提纲 1.数据库管理部分 ◆数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负责以测试 ...

随机推荐

  1. 关于apue.3e中apue.h的使用

    关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: # url: http://http//www.apuebook.com/code3e.htm ...

  2. Linux Hadoop2.7.3 安装(单机模式) 一

    Linux Hadoop2.7.3 安装(单机模式) 一 Linux Hadoop2.7.3 安装(单机模式) 二 java环境安装 http://www.cnblogs.com/zeze/p/590 ...

  3. thinkphp - 复合查询(or、and 联合使用的方法)

    条件:查询今天内邮箱和QQ其中一项都不为空的有效数据的查询 释义:(or 条件)email  不为空 或者 qq_no 不为空    (and 条件) is_deleted 为0 并且 create_ ...

  4. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  5. PHP 高级编程(3/5) - 使用SPL(标准PHP库)实现观察者模式

    SPL(标准PHP库 - Standard PHP Library)是PHP5面向对象功能中重要的部分.原文解释是这样的“The Standard PHP Library (SPL) is a col ...

  6. 窥探Vue.js 2.0

    title: 窥探Vue.js2.0 date: 2016-09-27 10:22:34 tags: vue category: 技术总结 --- 窥探Vue.js2.0 令人兴奋的Vue.js 2. ...

  7. Ios生产证书申请(含推送证书)

    一.Mac机上生成请求文件. Mac机上点击证书助手 => 从证书颁发机构请求证书 => 得到CertificateSigningRequest.certSigningRequest请求文 ...

  8. c 进程和系统调用

    这一篇博客讲解进程和系统调用相关的知识 有这样一个场景,我需要输入一串文字,然后把我输入的文字加上一个本地的时间戳 保存在一个文件中,可以初步理解为一个备忘录也行 #include <stdio ...

  9. Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...

  10. Sass学习笔记之入门篇

    Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样 ...