写点什么

YashanDB 健康检查

作者:YashanDB
  • 2025-03-24
    广东
  • 本文字数:3384 字

    阅读完需:约 11 分钟

YashanDB 提供健康检查框架,用于数据库运行诊断检查。

健康检查也称为检查器,检查数据库的各个组件,如检测文件损坏、数据块损坏、redo 日志损坏等,并生成一份报告,记录发现的错误以及错误带来的影响。

可以通过如下两种方式运行健康检查:

  • 反应式——故障诊断架构自动运行健康检查以响应严重错误。

  • 手动——使用内置高级包手动运行健康检查。如有需要,可以通过定义 JOB 定期运行健康检查。

健康检查执行的结果将存储在自动诊断存储库中。 健康检查必须在数据库为 OPEN 模式或者 MOUNT 模式下运行。

健康检查项

数据库结构完整性检查

此检查验证数据库文件的完整性,在检查到数据库文件(控制文件、redo 文件、数据文件、归档文件)不可访问、损坏或不一致时报告失败。

数据块完整性检查

此检查可检测磁盘映像块损坏,例如 checksum 失败、头尾不匹配以及块内的逻辑不一致。对于页面损坏,通常可以通过备库或者是页面修复工具来修复。

单个数据文件检查

此检查可检测数据文件可访问性,例如数据文件所有的块损坏,包含有效的块可未使用的块等。

redo 完整性检查

此检查可检测数据库的一致性和所有的 redo 文件的头部信息,避免数据库重启后无法恢复到一致性点,数据库不可用。

单个 redo 文件检查

此检查可检测单个 redo 文件的可访问性和 redo 块损坏。

归档日志文件检查

此检查检测单个归档日志文件的可访问性和内容损坏。

死锁检测检查

此检查项检测用户行为上的事务死锁,在检测出死锁后会在 trace 目录下(按 seesion id 的 trace 文件)报告出具体的死锁环信息,即 Wait-For-Graph(WFG)。

手动运行健康检查

用户可以手动调用 DBMS_HM.RUN_CHECK 程序运行健康检查,该程序需提供运行状况检查名称和运行的名称(自定义),如下所示:

BEGIN   DBMS_HM.RUN_CHECK('DB Structure Integrity Check', 'my_run', NULL);END;/
复制代码


若要获取运行状况检查名称的列表,请运行以下查询:

SELECT name FROM V$HM_CHECK;
复制代码


输出的内容如下:

NAME                                                             ---------------------------------------------------------------- DB Structure Integrity Check                                    Data Block Integrity Check                                      Single Datafile Check                                           Redo Integrity Check                                            Redo File Check                                                 Archived Log Check
复制代码


大多数健康检查需要输入参数,可以通过视图 V$HM_CHECK_PARAM 查看参数名称和说明。有些参数是必须的,有些参数是可选的。可选参数输入 NULL 则表示使用默认值。 以下查询显示所有健康检查的参数信息:

SELECT c.name check_name, p.name parameter_name, p.descriptionFROM V$HM_CHECK_PARAM p, V$HM_CHECK cWHERE p.check_id = c.id ORDER BY c.name;
复制代码


输出的内容如下:

CHECK_NAME                       PARAMETER_NAME         DESCRIPTION                 -------------------------------- ---------------------- --------------------------- Archived Log Check               ARC_SEQ_NUM            Archive sequence number    Data Block Integrity Check       BLC_BL_NUM             Block number               Data Block Integrity Check       BLC_DF_NUM             Data file number           Redo File Check                  RF_NUM                 Redo file number           Single Datafile Check            DF_NUM                 Data file number
复制代码


输入参数的名称和值在参数中传递是成对的,以分号;分隔。下面示例演示如何将文件 ID 和块 ID 作为参数传递数据块完整性检查:

BEGIN  DBMS_HM.RUN_CHECK('Data Block Integrity Check','my_run','BLC_DF_NUM=1;BLC_BL_NUM=234');END;/
复制代码


Note: 详细使用信息请参考开发手册DBMS_HM的定义及参数说明。 健康检查的数据存储的上限是 1000000 条记录,如果超过该上线,新的诊断数据将覆盖掉最旧的诊断数据。


查看健康检查报告

健康检查运行的结果和其他信息存储在自动诊断存储库中,但不会立即生成报告。 如果需要查看报告,用户可以通过执行 DBMS_HM 包生成,如果该报告尚不存在,系统首先从自动诊断存储库中的检查器运行数据生成,并以 TEXT 格式文件存储在自动诊断存储库主目录的 HM 子目录下,然后向用户输出显示。如果报告文件已存在,则系统仅执行输出显示。

DBMS_HM.GET_RUN_REPORT 程序用于查看健康检查的报告,默认格式为文本。示例如下:

SELECT DBMS_HM.GET_RUN_REPORT('HM_RUN_13') FROM DUAL;
DBMS_HM.GET_RUN_REPO ---------------------------------------------------------------- Run Name : hm_run_13 Run Id : 13 Check Name : Data Block Integrity Check Mode : MANUAL status : COMPLETED Start Time : 2022-07-22 10:21:40 End Time : 2022-07-22 10:21:40 Error Encountered : 0 Source Incident Id : 0 Number of Incidents Created : 0
Input Parameters for the Run BLC_DF_NUM=6 BLC_BL_NUM=132
Run Findings And Recommendations Finding Finding Name : block corruption Finding ID : 12 Message : block 132 in datafile 6: '/data/yashan/dbdata/dbfiles/hm_test' is corrupted Message : object might be unavailable
复制代码


Note: 详细使用信息请参考开发手册DBMS_HM的定义及参数说明。 如果报告信息太长,系统仅输出显示部分信息,完整信息需从报告文件中获得。


健康检查视图用户可以直接查询创建报告的自动诊断存储库数据,查看运行特定的健康检查的结果,而不是通过健康检查报告。 此数据可以通过视图 VHM_FINDING 获得。 下面的示例查询视图 V$HM_RUN 以确定检查器运行的历史记录:

SELECT run_id, name, check_name, run_mode FROM V$HM_RUN;	  RUN_ID NAME              CHECK_NAME                            RUN_MODE  ------- ----------------- ------------------------------------- ---------       1 hm_run_1          Single Datafile Check                 REACTIVE       2 hm_run_2          Single Datafile Check                 REACTIVE       3 hm_run_3          DB Structure Integrity Check          REACTIVE       4 hm_run_4          DB Structure Integrity Check          MANUAL         .                   .                   .                  39 hm_run_39         Redo Integrity Check                  REACTIVE      40 hm_run_40         DB Structure Integrity Check          REACTIVE      41 hm_run_41         Data Block Integrity Check            MANUAL              42 hm_run_42         Single Datafile Check                 MANUAL        43 hm_run_43         DB Structure Integrity Check          REACTIVE      44 hm_run_44         Single Datafile Check                 REACTIVE        45 hm_run_45         Redo Integrity Check                  MANUAL        46 hm_run_46         Redo File Check                       MANUAL        47 hm_run_47         Archived Log Check                    MANUAL        48 hm_run_48         Redo File Check                       REACTIVE 
复制代码


下面示例查询视图 V$HM_FINDING,获取 run_id=44(反应式单个数据文件检查)的结果详细信息:

SELECT finding_id, description FROM V$HM_FINDING WHERE run_id = 44;
FINDING_ID DESCRIPTION ------------ ---------------------------------------------------------------- 16 block 1432 in datafile 6: '/data/yashan/dbdata/dbfiles/hm_test' is corrupted 17 block 1549 in datafile 6: '/data/yashan/dbdata/dbfiles/hm_test' is corrupted
复制代码


发布于: 刚刚阅读数: 4
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB健康检查_数据库_YashanDB_InfoQ写作社区