YashanDB 提供健康检查框架,用于数据库运行诊断检查。
健康检查也称为检查器,检查数据库的各个组件,如检测文件损坏、数据块损坏、redo 日志损坏等,并生成一份报告,记录发现的错误以及错误带来的影响。
可以通过如下两种方式运行健康检查:
健康检查执行的结果将存储在自动诊断存储库中。 健康检查必须在数据库为 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.description
FROM V$HM_CHECK_PARAM p, V$HM_CHECK c
WHERE 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的定义及参数说明。 如果报告信息太长,系统仅输出显示部分信息,完整信息需从报告文件中获得。
健康检查视图用户可以直接查询创建报告的自动诊断存储库数据,查看运行特定的健康检查的结果,而不是通过健康检查报告。 此数据可以通过视图 VHMRUN和视图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
复制代码
评论