作为一个 DBA,或者哪怕仅仅是和 Oracle 数据库打交道的技术人员,你都必须知道告警日志是什么,在何处。
而对于 DBA来说,实时的监控数据库的告警日志是必须进行的工作,监控并且应该根据不同的严重级别,发送不同级别的告警信息(通过邮件、短信) ,这可以帮助我们及时了解数据库的变化与异常,及时响应并介入处理。
告警文件错误检查
每日应检查应用数据库警报日志文件(Alert_SID.log),检查是否存在数据库系统错误提示信息,查看有无“ORA-”,Error”,“Failed”等出错信息。根据错误信息进行分析并解决。告警日志文件的路径查看:show parameter background_dump_dest
清除告警日志内容
将每天的告警日志备份好进行清除。具体方法:在$ORACLE_HOME/SID/bdump/ 目录下打开alert_ORACLE_SID.LOG这个文件,然后检查里面是否有错误信息,之后每天把它按日期另存为如:alert_ORACLE_SID070416.LOG。再打开alert_ORACLE_SID.LOG文件可清除掉里面的内容,这样便于查看告警日志内容。
检查Oracle对象的状态
主要介绍如何检查相关Oracle对象的状态,内容共分六个部分,分别为:检查Oracle控制文件状态;检查Oracle在线日志状态;检查Oracle表空间的状态;检查Oracle所有表、索引、存储过程、触发器、包等对象的状态。
检查Oracle控制文件状态
输入:>sqlplus “/as sysdba”
select * from v$controlfile;
输出:
STATUS NAME
-------------------------------------
D:/ORACLE/ORADATA/SFYXF/CONTROL01.CTL
D:/ORACLE/ORADATA/SFYXF/CONTROL02.CTL
D:/ORACLE/ORADATA/SFYXF/CONTROL03.CTL
分析:输出结果应该有3条以上(包含3条)的记录,“STATUS”应该为空。状态为空表示控制文件状态正常。
检查Oracle在线日志状态
select * from v$logfile;
输出:
GROUP# STATUS TYPE MEMBER
---------- ------- --------------------------------------------
3 ONLINE D:/ORACLE/ORADATA/SFYXF/REDO03.LOG
2 ONLINE D:/ORACLE/ORADATA/SFYXF/REDO02.LOG
1 ONLINE D:/ORACLE/ORADATA/SFYXF/REDO01.LOG
分析:输出结果应该有3条以上(包含3条)记录,“STATUS”应该为非“INVALID”,非“DELETED”。 注:“STATUS”显示为空表示正常。
检查Oracle表空间的状态
select tablespace_name,status from dba_tablespaces;
输出:
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
TOOLS ONLINE
RBS ONLINE
TEMP ONLINE
USERS ONLINE
INDX ONLINE
DRSYS ONLINE
WACOS ONLINE
IPAS_SUB_DATA ONLINE
IPAS_SUB_IDX ONLINE
IPAS_USG_DATA ONLINE
IPAS_USG_IDX ONLINE
IPAS_ACCT_DATA ONLINE
IPAS_ACCT_IDX ONLINE
NMS ONLINE
NMS_STAT_DATA ONLINE
NMS_STAT_IDX ONLINE
分析:其中“STATUS”应该都为“ONLINE”, 如果“STATUS”值为“OFFLINE”时应该及时分析其状态原因,并将其改为“ONLINE”状态。
输入:select owner,object_name,object_type from dba_objects where status!='VALID' and owner!='SYS' and owner!='SYSTEM';
输出: no rows selected
分析:如果有记录返回,则说明存在无效的对象。若这些对象与我们应用相关,那么需要重新生成这个对象。具体生成方法可以寻求ORACLE的技术支持。
检查Oracle各个表空间的增长情况
view plainselect A.tablespace_name, (1 - (A.total) / B.total) * 100 used_percent
from (select tablespace_name, sum(bytes) total
from dba_free_space
group by tablespace_name) A,
(select tablespace_name, sum(bytes) total
from dba_data_files
group by tablespace_name) B
where A.tablespace_name = B.tablespace_name;
输出:
TABLESPACE_NAME USED_PERCENT
------------------------------ ------------
DRSYS 30.7578125
FS .19375
INDX .00390625
IPAS_ACCT_DATA 1.2
IPAS_ACCT_IDX 2.2
IPAS_SUB_DATA 7.4
IPAS_SUB_IDX 7.25
IPAS_USG_DATA 12.378125
IPAS_USG_IDX 20.603125
NMS 5.221875
NMS_STAT_DATA 4.5
NMS_STAT_IDX 1.5125
RBS 27.0009766
SA .0375
SYSTEM 34.265625
TEMP 2.71972656
TOOLS .00390625
USERS 608473558
WACOS 10.621875
19 rows selected.
分析:如果使用率“USED_PERCENT”在90%以上,则注意要增加数据文件来扩展表空间而不要是用数据文件的自动扩展功能。
检查system表空间内的内容
view plainselect distinct (owner)
from dba_tables
where tablespace_name = 'SYSTEM'
and owner != 'SYS'
and owner != 'SYSTEM'
union
select distinct (owner)
from dba_indexes
where tablespace_name = 'SYSTEM'
and owner != 'SYS'
and owner != 'SYSTEM';
输出:no rows selected
分析:如果有记录返回,则表明system表空间内存在一些非system和sys用户的对象。应该进一步检查这些对象是否与我们应用相关。如果相关请把这些对象移到非System表空间,同时应该检查这些对象属主的缺省表空间值。