ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 诊断oracle数据库的问题

诊断oracle数据库的问题

原创 Linux操作系统 作者:kevinhong1986 时间:2012-05-18 13:59:54 0 删除 编辑

1 告警日志

实例启动的时刻开始,重要消息以及某些报告消息会被写至告警日志。

告警日志以及所有后台跟踪文件都会被写至BACKGOUND_DUMP_DEST参数所指定的目的地。

告警日志的名称为alert_.log,其中SID为实例名。

BACKGOUND_DUMP_DEST参数是动态的。

告警日志中的报告消息的内容如下:

。启动时间以及操作模式的启动和关闭命令。

。涉及物理结构的操作,使用ALTER DATABASE命令。

。表空间操作。

。所有日志切换与归档,包括所影响文件的名称。

。用于启动实例的非默认初始化参数,还包括ALTER SYSTEM命令修改这些参数。

告警日志包含了影响数据库结构和实例的各种操作的连续历史记录。

告警日志不包含sql语句(DML,DDL)

告警日志包含常见的告警与错误:

。检查点不完全:说明日志文件过小而引起日志切换频繁。

。无法打开文件:在数据库启动过程中产生。

。块讹误:某个数据文件损坏引起。与DBA_EXTENTS视图一起查看。

。归档存在问题:归档目的地满和不可用。

。死锁。

2 后台跟踪文件

所有后台跟踪文件都会被写至BACKGOUND_DUMP_DEST参数所指定的目的地。

所有后台跟踪文件都具有一个头部,这个头部给出了文件的名称以及操作系统和生成该文件的oracle相关的版本信息。接下来的内容是实际的错误。

跟踪文件的命名为:实例的名称+该实例的进程的名称+该进程的操作系统进程号或线程号+后缀.trc

与告警日志不同,跟踪文件始终意味着错误。

DBA能控制放置跟踪文件的位置和其最大大小。

Alter system set max_dump_file_size=’5m’;

告警文件没有最大值,如果没有删除,其将一直增长。

3 服务器生成的告警

服务器告警系统是一种完全可配置的机制,这种机制能够监视数据库、实例和用户的会话,并且能够在达到某些限制以发生特定事件时发生警告。使用MMON监视进程和MMNL辅助进程。

3.1 告警类型

。阀值(threshold)告警:表空间使用

。非阀值告警:ora-1555

V$ALERT_TYPES视图可以查看能够配置告警的指标。

3.2 告警体系结构

实例自身会累积告警系统所使用的统计量。收集统计量不存在任何系统开销。

检索用于计算指标(metric)的统计量是由后台进程MMON完成的。MMON进程是实例的一部分,所以它能够直接访问存储相关信息的数据结构。

MMON进程将告警信息写入至ALERT_QUE队列。订阅者从ALERT_QUE队列读取信息。如果队列存在问题,那么MMON进程会将告警直接写入到告警日志。

告警日志与服务器告警系统完全分离。

3.3 告警信息

DBA_OUTSTANDING_ALERTS:会列出所有已被引发但是尚未处理的有状态的告警。

DBA_ALERT_HISTORY:包括处理的有状态的告警和直接写入到该视图的无状态的告警。

3.4 告警通知机制

该告警通知机制通常会在引发某些告警时向DBA发送邮件消息。DBA可以自定义配置。

3.5 设置阀值

标准的告警有预定义阀值:表空间85%时发出一条告警消息,在97%发出一条临界告警。

使用DATABASE CONTROL工具和DBMS_SERVER_ALEERT程序包设置和编辑阀值。

DBMS_SERVER_ALEERT程序包常用的过程有:

set_threshold

Tablespace_pct_full:指定要监视的指标。

Operator_ge:大于等于。

Object_type_tablespace:被监视对象的类型。

例子:设置、查看和清除告警

1 创建表空间

sys@ORCL> create tablespace small datafile 'e:\oracle\small.dbf' size 1m;

表空间已创建。

2 设置警告告警和临界告警

sys@ORCL> BEGIN

2 DBMS_SERVER_ALERT.SET_THRESHOLD (

3 metrics_id=>DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,

4 warning_operator=>DBMS_SERVER_ALERT.OPERATOR_GE,

5 warning_value=>50,

6 critical_operator=>DBMS_SERVER_ALERT.OPERATOR_GE,

7 critical_value=>75,

8 observation_period=>1,

9 consecutive_occurrences=>1,INSTANCE_NAME=>'null',

10 object_type=>DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,

11 object_name=>'SMALL');

12 END;

13 /

PL/SQL过程已成功完成。

查看设置

sys@ORCL> select metrics_name, WARNING_OPERATOR,status from dba_thresholds where object_name='SMALL';

METRICS_NAME WARNING_OPER STATUS

----------------------------------- ------------ -------

Tablespace Space Usage GE VALID

3 创建表及插入足够记录,从而使空间超过警告阀值

sys@ORCL> create table toobig(c1 char(1000)) tablespace small;

表已创建。

sys@ORCL> begin

2 for n in 1..500 loop

3 insert into toobig values('a row');

4 end loop;

5 commit;

6 end;

7 /

PL/SQL过程已成功完成。

4 使用DBA_OUTSTANDING_ALERTS视图查询

sys@ORCL> select object_name, reason from dba_outstanding_alerts;

OBJECT_NAME

------------------------------------------------------------------

REASON

------------------------------------------------------------------

UNDO_NOGUARANTEE

表空间[UNDO_NOGUARANTEE]已占用[86 percent]

SMALL

表空间[SMALL]只有[0 megabytes]空闲空间

5 small表空间添加数据文件解决空间告警问题

sys@ORCL> alter tablespace small add datafile 'e:/oracle/small2.dbf' size 2m;

表空间已更改。

6 使用DBA_OUTSTANDING_ALERTSDBA_ALERT_HISTORY视图查看

sys@ORCL> select object_name, reason from dba_outstanding_alerts;

OBJECT_NAME

-------------------------------------------------------------------

REASON

-------------------------------------------------------------------

UNDO_NOGUARANTEE

表空间[UNDO_NOGUARANTEE]已占用[86 percent]

sys@ORCL> select object_name, reason, suggested_action, resolution from dba_alert_history where object_name='SMALL';

OBJECT_NAME

--------------------------------------------------------------------------------

REASON

--------------------------------------------------------------------------------

SUGGESTED_ACTION

--------------------------------------------------------------------------------

RESOLUT

-------

SMALL

"表空间的空间使用情况"度量的阈值已更新

查看DBA_THRESHOLDS视图以验证结果

cleared

SMALL

表空间[SMALL]只有[2 megabytes]空闲空间

给表空间添加空间

cleared

7 删除small表空间

sys@ORCL> drop tablespace small including contents and datafiles;

表空间已删除。

8 用户跟踪文件

a) 实例级别的SQL跟踪

启动实例级别的SQL跟踪

Alter system set sql_trace=true;

关闭实例级别的SQL跟踪

Alter system set sql_trace=false;

生成的跟踪文件名为_ora_.trc,由USER_DUMP_DEST参数指定存储位置。

通过以下查询获得

sys@ORCL> select s.username,s.sid,p.spid from v$session s, v$process p where

s.paddr=p.addr;

然后通过获得_ora_.trc文件

b) 会话级别的SQL跟踪

启动会话级别的SQL跟踪

Alter session set sql_trace=true;

关闭会话级别的SQL跟踪

Alter session set sql_trace=false;

生成的跟踪文件由USER_DUMP_DEST参数指定存储位置。

针对任何用户会话的跟踪,首先找出会话的标识符与序列号

sys@ORCL> select sid, serial# from v$session where username=’TIM’;

SID SERIAL#

---------- ----------

130 51

其次,使用DBMS_MONITOR程序包,开始写跟踪信息;

sys@ORCL> execute dbms_monitor.session_trace_enable( -

session_id=>130,serial_num=>51);

PL/SQL过程已成功完成。

停止写跟踪信息

sys@ORCL> execute dbms_monitor.session_trace_disable( -

session_id=>130,serial_num=>51);

PL/SQL过程已成功完成。

c) 使用DATABASE CONTROL进行跟踪

DBMS_MONITOR程序包可以跟踪:

会话级别

模块级别

客户ID级别

服务级别

动作级别

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26912144/viewspace-730145/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-04-23

  • 博文量
    16
  • 访问量
    21682