以下各节介绍如何监视数据库错误和警报. 它包含以下主题:
使用跟踪文件和警报日志监视错误
使用服务器生成的警报监视数据库操作
监视数据库中错误和警报的最简单和最好的方法是在企业管理器中的数据库主页. 本节提供了使用数据字典视图, PL / SQL 包和其他命令行工具进行监视的备用方法.
使用跟踪文件和警报日志监视错误
每个服务器和后台进程都可以写入关联的跟踪文件. 当进程检测到内部错误时, 它将有关错误的信息转储到其跟踪文件. 写入跟踪文件的某些信息专供数据库管理员使用, 其他信息用于 Oracle 支持服务. 跟踪文件信息也用于调整应用程序和实例.
严重错误还会在自动诊断信息库中创建事件和事件转储. 有关更多信息, 请参阅第 9 章 "管理诊断数据 https://docs.oracle.com/cd/E11882_01/server.112/e25494/diag.htm#adminChapterDiagnosability".
警报日志是按时间顺序排列的消息和错误日志, 包括以下项目:
所有发生的内部错误 (ORA-00600), 块损坏错误(ORA-01578) 和死锁错误(ORA-00060)
管理操作, 例如 CREATE,ALTER 和 DROP 语句以及 STARTUP,SHUTDOWN 和 ARCHIVELOG 语句
与共享服务器和调度程序进程相关的消息和错误
物化视图自动刷新期间发生的错误
在数据库和实例启动时具有非缺省值的所有初始化参数的值
Oracle 数据库使用警报日志来记录这些操作, 作为在操作员控制台上显示信息的替代方法(尽管某些系统也在控制台上显示信息). 如果操作成功, 则会在警报日志中写入 "已完成" 消息以及时间戳.
警报日志保持为 XML 格式的文件和文本格式的文件. 您可以使用任何文本编辑器查看警报日志的任何一种格式, 也可以使用 ADRCI 实用程序查看剥离了 XML 标签的文件的 XML 格式版本.
定期检查实例的警报日志和跟踪文件, 以了解后台进程是否遇到错误. 例如, 当日志写入进程 (LGWR) 无法写入日志组的成员时, 指示问题性质的错误消息将写入 LGWR 跟踪文件和警报日志. 这样的错误信息意味着媒体或 I / O 问题已发生, 应立即予以纠正.
除了其他重要的统计数据外, Oracle 数据库还将初始化参数的值写入警报日志.
后台和服务器进程的警报日志和所有跟踪文件被写入自动诊断信息库, 其位置由 DIAGNOSTIC_DEST 初始化参数指定. 跟踪文件的名称是特定于操作系统的, 但每个文件通常都包含写入文件的进程的名称(如 LGWR 和 RECO).
有关自动诊断信息库的信息, 请参见第 9 章 "管理诊断数据 https://docs.oracle.com/cd/E11882_01/server.112/e25494/diag.htm#adminChapterDiagnosability".
"警报日志 https://docs.oracle.com/cd/E11882_01/server.112/e25494/diag.htm#CHDHEGBH" 获取有关警报日志的其他信息.
"查看警报日志 https://docs.oracle.com/cd/E11882_01/server.112/e25494/diag.htm#CHDGCEIH"
有关 ADRCI 实用程序的信息, 请参阅 Oracle 数据库实用程序 https://docs.oracle.com/cd/E11882_01/server.112/e22490/adrci.htm#SUTIL700 .
您的操作系统特定的 Oracle 文档, 以获取有关跟踪文件名称的信息
控制跟踪文件的大小
您可以使用初始化参数 MAX_DUMP_FILE_SIZE 来控制所有跟踪文件 (不包括警报日志) 的最大大小, 该参数将文件限制为指定数量的操作系统块. 要控制警报日志的大小, 您必须在不再需要时手动删除该文件. 否则, 数据库将继续附加到该文件.
您可以安全地删除实例运行时的警报日志, 尽管您应该考虑先制作它的存档副本. 如果您有将来需要调查实例历史记录的问题, 则此存档副本可能会有价值.
控制 Oracle 数据库写入跟踪文件的时间
后台进程总是在适当的时候写入跟踪文件. 对于 ARCn 后台进程, 可以通过初始化参数来控制生成的跟踪信息的数量和类型. 此行为在 "控制由 Archivelog 进程生成的跟踪输出 https://docs.oracle.com/cd/E11882_01/server.112/e25494/archredo.htm#i1006885" 中描述. 其他后台进程没有这种灵活性.
跟踪文件是在发生严重错误时代表服务器进程编写的. 此外, 设置初始化参数 SQL_TRACE = TRUE 会导致 SQL 跟踪功能为处理实例的所有 SQL 语句生成性能统计信息, 并将它们写入自动诊断信息库.
或者, 您可以请求为服务器进程生成跟踪文件. 无论 SQL_TRACE 初始化参数的当前值如何, 每个会话都可以使用 SQL 语句 ALTER SESSION SET SQL_TRACE 代表关联的服务器进程启用或禁用跟踪日志记录. 此示例为特定会话启用 SQL 跟踪工具:
ALTER SESSION SET SQL_TRACE TRUE;
使用 DBMS_SESSION 或 DBMS_MONITOR 包来控制会话的 SQL 跟踪.
用于服务器进程的 SQL 跟踪功能可能会导致严重的系统开销, 从而导致严重的性能影响, 因此您只应在收集统计信息时启用此功能.
第 9 章 "管理诊断数据 https://docs.oracle.com/cd/E11882_01/server.112/e25494/diag.htm#adminChapterDiagnosability" 以获取有关数据库如何处理严重错误的更多信息, 也称为 "事件".
读取共享服务器会话的跟踪文件
如果启用了共享服务器, 则每个使用调度程序的会话都会路由到共享服务器进程, 并且仅当会话启用了跟踪 (或者遇到错误) 时才将跟踪信息写入服务器跟踪文件. 因此, 要跟踪使用调度程序进行连接的特定会话的跟踪, 您可能需要研究几个共享服务器跟踪文件. 为了帮助您, Oracle 提供了一个命令行实用程序 trcsess, 它将与用户会话有关的所有跟踪信息合并到一个地方, 并按时间排序信息
Oracle 数据库性能调优指南 https://docs.oracle.com/cd/E11882_01/server.112/e41573/sqltrace.htm#PFGRF010 , 获取有关使用 SQL 跟踪工具和使用 TKPROF 和 trcsess 解释生成的跟踪文件的信息
使用服务器生成的警报监视数据库操作
服务器生成的警报是来自 Oracle 数据库服务器的即将发生问题的通知. 通知可能包含纠正问题的建议. 问题条件清除后还会提供通知.
警报在问题发生时或数据与指标的期望值不匹配时自动生成, 例如以下内容:
每秒物理读取次数
用户每秒提交次数
SQL 服务响应时间
服务器生成的警报可以基于阈值级别, 也可以仅由于发生事件而发生. 基于阈值的警报可以在阈值警告和临界级别触发. 这些级别的值可以是客户定义的或内部值, 某些警报具有默认阈值级别, 您可以根据需要进行更改. 例如, 默认情况下, 当空间使用率超过 85%警告或 97%临界阈值级别时, 会为表空间空间使用率生成服务器生成的警报. 不基于阈值级别的警报示例如下:
快照太旧
可恢复的会话暂停
恢复区空间使用情况
将警报消息发送到用户 SYS 拥有的预定义持久队列 ALERT_QUE. Oracle Enterprise Manager 读取此队列并提供关于未完成服务器警报的通知, 并且有时会提出纠正问题的操作. 警报显示在企业管理器数据库主页上, 可以配置为向选定的管理员发送电子邮件或寻呼机通知. 如果警报无法写入警报队列, 则有关警报的消息将写入 Oracle 数据库警报日志.
后台进程会定期将数据刷新到自动工作量存储库以捕获度量值的历史记录. 系统会定期自动清除警报历史记录表和 ALERT_QUE.
设置和检索服务器生成警报的阈值
您可以使用 DBMS_SERVER_ALERT PL / SQL 程序包的 SET_THRESHOLD 和 GET_THRESHOLD 过程来查看和更改服务器警报指标的阈值设置. 以下部分提供了使用这些过程的示例:
设置阈值级别
检索阈值信息
设置和检索阈值的最方便的方法是使用企业管理器的图形界面. 有关说明, 请参阅 Oracle Database 2 Day DBA https://docs.oracle.com/cd/E11882_01/server.112/e10897/montune.htm#ADMQS1014
Oracle 数据库 PL / SQL 包和类型参考 https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_server_alert.htm#ARPLS016 了解关于 DBMS_SERVER_ALERT 包的信息
设置阈值级别
以下示例显示了如何使用 SET_THRESHOLD 过程为实例的每个用户调用的 CPU 时间设置阈值:
- DBMS_SERVER_ALERT.SET_THRESHOLD(
- DBMS_SERVER_ALERT.CPU_TIME_PER_CALL, DBMS_SERVER_ALERT.OPERATOR_GE, '8000',
DBMS_SERVER_ALERT.OPERATOR_GE, '10000', 1, 2, 'inst1',
DBMS_SERVER_ALERT.OBJECT_TYPE_SERVICE, 'main.regress.rdbms.dev.us.example.com');
在此示例中, 如果每次用户呼叫的 CPU 时间超过 8000 微秒时发出警告警报, 并且当每次用户呼叫的 CPU 时间超过 10,000 微秒时发出严重警报. 论据包括:
CPU_TIME_PER_CALL 指定度量标识符. 有关支持度量标准的列表, 请参阅 Oracle 数据库 PL / SQL 包和类型参考 https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_server_alert.htm#ARPLS016
观察期设定为 1 分钟. 此期限指定发出警报之前条件必须偏离阈值的分钟数.
连续出现次数设置为 2. 此数字指定在警报生成之前度量值必须违反阈值的次数.
实例的名称设置为 inst1.
常量 DBMS_ALERT.OBJECT_TYPE_SERVICE 指定设置阈值的对象类型. 在这个例子中, 服务名称是 main.regress.rdbms.dev.us.example.com.
检索阈值信息 要检索阈值, 请使用 GET_THRESHOLD 过程. 例如:
- DECLARE
- warning_operator BINARY_INTEGER;
- warning_value VARCHAR2(60);
- critical_operator BINARY_INTEGER;
- critical_value VARCHAR2(60);
- observation_period BINARY_INTEGER;
- consecutive_occurrences BINARY_INTEGER;
- BEGIN
- DBMS_SERVER_ALERT.GET_THRESHOLD(
- DBMS_SERVER_ALERT.CPU_TIME_PER_CALL, warning_operator, warning_value,
critical_operator, critical_value, observation_period,
- consecutive_occurrences, 'inst1',
- DBMS_SERVER_ALERT.OBJECT_TYPE_SERVICE, 'main.regress.rdbms.dev.us.example.com');
- DBMS_OUTPUT.PUT_LINE('Warning operator:' || warning_operator);
- DBMS_OUTPUT.PUT_LINE('Warning value:' || warning_value);
- DBMS_OUTPUT.PUT_LINE('Critical operator:' || critical_operator);
- DBMS_OUTPUT.PUT_LINE('Critical value:' || critical_value);
- DBMS_OUTPUT.PUT_LINE('Observation_period:' || observation_period);
- DBMS_OUTPUT.PUT_LINE('Consecutive occurrences:' || consecutive_occurrences);
- END;
- /
您还可以使用 DBA_THRESHOLDS 视图检查特定的阈值设置. 例如:
SELECT metrics_name, warning_value, critical_value, consecutive_occurrences
- FROM DBA_THRESHOLDS
- WHERE metrics_name LIKE '%CPU Time%';
查看服务器生成的警报
查看服务器生成的警报的最简单方法是访问企业管理器的数据库主页. 以下讨论介绍了查看这些警报的其他方法.
如果使用自己的工具而不是企业管理器来显示警报, 则必须订阅 ALERT_QUE, 读取 ALERT_QUE, 并在设置警报的阈值级别后显示警报通知. 要创建代理并将代理订阅到 ALERT_QUE, 请使用 DBMS_AQADM 包的 CREATE_AQ_AGENT 和 ADD_SUBSCRIBER 过程.
接下来, 您必须将数据库用户与订阅代理相关联, 因为只有与订阅代理关联的用户才能访问安全 ALERT_QUE 中的排队消息. 您还必须将排队特权分配给用户. 使用 DBMS_AQADM 包的 ENABLE_DB_ACCESS 和 GRANT_QUEUE_PRIVILEGE 过程.
或者, 您可以注册 DBMS_AQ.REGISTER 过程, 以在警报入队 ALERT_QUE 时接收异步通知. 通知可以是电子邮件, HTTP post 或 PL / SQL 过程的形式.
要阅读警报消息, 可以使用 DBMS_AQ.DEQUEUE 过程或 OCIAQDeq 调用. 消息出列后, 使用 DBMS_SERVER_ALERT.EXPAND_MESSAGE 过程来展开消息的文本.
Oracle 数据库 PL / SQL 包和类型参考 https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm 以获取有关 DBMS_AQ 和 DBMS_AQADM 包的信息
服务器生成的警报数据字典视图
以下数据字典视图提供有关服务器生成警报的信息
View | Description |
DBA_THRESHOLDS | 列出为实例定义的阈值设置 |
DBA_OUTSTANDING_ALERTS | 描述数据库中的未完成警报 |
DBA_ALERT_HISTORY | 列出已清除警报的历史记录 |
V$ALERT_TYPES | 为每个警报提供信息,例如组和类型 |
V$METRICNAME | 包含有关系统指标的名称,标识符和其他信息 |
V$METRIC | 包含系统级度量值 |
V$METRIC_HISTORY | 包含系统级度量值的历史记录 |
Oracle 数据库参考 https://docs.oracle.com/cd/E11882_01/server.112/e40402/toc.htm , 以获取关于静态数据字典视图和动态性能视图的信息
参考资料
https://docs.oracle.com/cd/E11882_01/server.112/e25494/monitoring.htm#ADMIN005
来源: https://www.cnblogs.com/sorliran/p/9068347.html