-
11g 运行状况监控器:
-
==============
-
-
11g Oracle 使用 dbms_hm 包引入了一个免费的“运行状况监控器”:
-
-
自动运行状况监控主动检查数据库的运行状况并识别影响数据库的任何问题。
-
-
甚至在用户遇到问题和造成广泛破坏之前,问题就被检测到。
-
-
Automatic Health Monitoring 的结果反映在一个简单的仪表(Health Meter)中,该仪表旨在让 DBA 能够快速衡量数据库的健康状况。
-
-
在自动健康监控的帮助下,DBA 可以全面了解数据库的当前健康状况,并帮助解决影响数据库的问题。
-
-
自动运行状况监控在问题的生命周期早期主动检测问题,并将用户影响和建议采取的措施通知 DBA。
-
-
根据组件或情况,自动健康监控可以隔离有问题的组件/资源或提供问题的修复。
-
-
Health Monitor 检查(也称为检查器、健康检查或检查)检查数据库的各个层和组件。运行状况检查可检测文件损坏、物理和逻辑块损坏、撤消和重做损坏、数据字典损坏等。运行状况检查会生成关于其发现的报告,并且在许多情况下会生成解决问题的建议。运行状况检查可以通过两种方式运行:
-
-
反应性——故障诊断基础设施可以自动运行健康检查以响应严重错误。
-
-
手动——作为 DBA,您可以使用 DBMS_HM PL/SQL 包或企业管理器界面手动运行健康检查。如果需要,您可以定期运行检查程序,或者 Oracle 支持部门可能会在与您一起处理服务请求时要求您运行检查程序。
-
-
Health Monitor 检查在自动诊断存储库 (ADR) 中存储的结果、建议和其他信息。
-
-
健康检查可以在两种模式下运行:
-
-------------------------------------
-
-
DB-online 模式意味着可以在数据库打开时(即在 OPEN 模式或 MOUNT 模式下)运行检查。
-
-
DB-offline 模式意味着可以在实例可用但数据库本身关闭时(即在 NOMOUNT 模式下)运行检查。
-
-
所有的健康检查都可以在 DB-online 模式下运行。DB离线模式下只能使用Redo Integrity Check和DB Structure Integrity Check。
-
-
-
运行状况监视器运行以下检查:
-
-------------------------------
-
-
* DB 结构完整性检查:
-
-
此检查验证数据库文件的完整性,并在这些文件
-
无法访问、损坏或不一致时报告失败。如果数据库处于装载或打开模式,此检查
-
会检查控制文件中列出的日志文件和数据文件。如果数据库处于 NOMOUNT
-
模式,则只检查控制文件。
-
-
*数据块完整性检查:
-
-
该检查检测磁盘映像块损坏,例如校验和失败、头/尾
-
不匹配以及块内的逻辑不一致。大多数损坏都可以
-
使用 Block Media Recovery 修复。
-
V$DATABASE_BLOCK_CORRUPTION 视图中也捕获了损坏的块信息。此检查不检测块间或
-
段间损坏。
-
-
*重做完整性检查:
-
-
此检查扫描重做日志的可访问性和损坏内容,以及
-
存档日志(如果可用)。重做完整性检查报告诸如归档日志或
-
重做损坏等故障。
-
-
*撤销段完整性检查:
-
-
此检查会发现逻辑撤消损坏。在找到撤销损坏后,此检查使用
-
PMON 和 SMON 来尝试恢复损坏的事务。如果此恢复失败,则 Health
-
Monitor 会将有关损坏的信息存储在 V$CORRUPT_XID_LIST 中。大多数撤消
-
损坏可以通过强制提交来解决。
-
-
*交易完整性检查:
-
-
该检查与撤消段完整性检查相同,只是它只检查一个
-
特定的交易。
-
-
*字典完整性检查:
-
-
此检查检查核心字典对象的完整性,例如 tab$ 和 col$。
-
它执行以下操作:
-
-
o 验证每个字典对象的字典条目的内容。
-
o 执行跨行级别检查,以验证是否对
-
字典中的行实施了逻辑约束。
-
o 执行对象关系检查,以验证是否
-
强制执行字典对象之间的父子关系。
-
-
字典完整性检查对以下字典对象进行操作:
-
-
tab$、clu$、fet$、uet$、seg$、undo$、ts$、file$、obj$、ind$、icol$、col$、user$、 con$、cdef$、ccol$、bootstrap$、objauth$、ugroup$、tsq$、syn$、view$、typed_view$、superobj$、seq$、lob$、coltype$、subcoltype$、ntab$、refcon$ 、opqtype$、dependency$、access$、viewcon$、icoldep$、dual$、sysauth$、objpriv$、defrole$ 和 ecol$。
-
-
如何手动运行 Health Checks
-
========================
-
-
我们可以
-
-
通过以下两种方式手动运行 Health Monitor # 通过使用 DBMS_HM PL/SQL 包
-
-
#通过使用企业管理器界面,可以在 Advisor
-
Central 页面的 Checkers 子页面找到
-
-
How to run Health Checks Using the DBMS_HM(DBMS_HM.RUN_CHECK) PL/SQL Package
-
---------------- -------------------------------------------------- ----------
-
-
DBMS_HM 具有名为 RUN_CHECK 的过程。要调用 RUN_CHECK,
-
我们需要提供检查名称和运行名称,如下所示:
-
-
BEGIN
-
DBMS_HM.RUN_CHECK('Dictionary Integrity Check', 'my_run');
-
结尾;
-
-
要获取健康检查名称列表,请运行以下查询:
-
-
SELECT name FROM v$hm_check WHERE internal_check='N';
-
-
姓名
-
------------------------------------------------- ---------------
-
DB结构完整性检查
-
数据块完整性检查
-
重做完整性检查
-
事务完整性检查
-
撤消段完整性检查
-
字典完整性检查
-
-
大多数健康检查接受输入参数。您可以
-
使用 V$HM_CHECK_PARAM 视图查看参数名称和 描述。有些参数是强制性的,而
-
其他是可选的。如果省略可选参数,则使用默认值。以下查询显示所有健康检查的参数信息:
-
-
SELECT c.name check_name, p.name parameter_name, p.type,
-
p.default_value, p.description
-
FROM v$hm_check_param p, v$hm_check c
-
WHERE p.check_id = c。 id 和 c.internal_check = 'N'
-
ORDER BY c.name;
-
-
输入参数在 input_params 参数中作为名称/值对传递,
-
以分号 (;) 分隔。以下示例说明了如何将事务 ID 作为参数传递给事务完整性检查:
-
-
BEGIN
-
DBMS_HM.RUN_CHECK (
-
check_name => '交易完整性检查',
-
run_name => 'my_run',
-
input_params => 'TXN_ID=7.33.2');
-
结尾;
-
-
如何使用企业管理器运行健康检查
-
------------------------------------------ ------
-
-
Enterprise Manager 提供了一个用于运行 Health Monitor 检查程序的界面。
-
-
要使用 Enterprise Manager 运行 Health Monitor Checker:
-
-
1. 在 Database Home 页面的相关链接部分中,单击 Advisor Central。
-
2. 单击 Checkers 查看 Checkers 子页面。
-
3. 在 Checkers 部分,单击要运行的检查器。
-
4. 输入输入参数的值,或者对于可选参数,
-
接受默认值。
- 5. 单击运行,确认您的参数,然后再次单击运行。
-