暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从日志管理看Oracle自治数据库

数据最前线 2018-05-12
21

 

2017年的OOW大会上,Oracle推出自治数据库—Oracle 18C,宣告关系型数据库产品进入一个崭新的时代。

就像当年乔布斯推出划时代的IPhone手机,其使用的并非全新的技术一样,号称自治的Oracle 18C数据库,其中很多的技术也并不是一夜之间冒出来的,而是经过不断的迭代逐步完善和成熟起来的。

 

今天我们就来看看Oracle数据库的日志管理是如何逐步实现自治管理的。

 

在数据库运维管理中,经常出现的,和日志管理相关的主要问题有:

  • 日志文件暴增,导致文件系统使用率增加触发告警,甚至出现文件系统使用率100%,数据库因为不能写入日志而夯住的情况;

  • 个别日志文件过大,引发性能问题。比如,早先版本中因为监听日志文件过大,导致数据库连接异常;

  • 分析数据库故障时,经常需要从海量的日志中寻找和故障问题相关的日志,影响故障诊断效率。

 

Oracle数据库日志可以分成以下几类:

  • 后台进程日志

  • 内核转储日志

  • 用户日志

  • 监听日志

  • 如果是RAC环境,还包括一系列RAC相关后台进程的日志。

 

为了更好的管理繁多的数据库日志,Oracle自11g开始逐步改进日志管理机制。

 

Pre-11g日志管理

 

在11g之前,Oracle数据库日志目录结构如下:

数据库相关日志:$ORACLE_BASE/instance_name/bdump、cdump、udump等目录

监听日志:$ORACLE_HOME/network/log

RAC相关的日志:$CRS_HOME/log

 

数据库自身没有提供任何手段管理日志,只能靠人工的定期清理。

 

11g日志管理

 

自11g开始,Oracle引入自动诊断库(Automatic Diagnostic Repository)架构,重新规划了数据库日志目录结构,将整个数据库环境中各个组件的日志统一整合到$ORACLE_BASE/diag目录下,并提供了一个全新的工具—adrci,用于日志管理。

 

图一: ADR目录结构

 

adrci提供了很多的命令用于帮助管理数据库日志,比如:

 

show problem/incident

 该命令可以显示数据库日志中记录的问题,和相关问题发生的次数(事件)。使用这个命令,我们不用手工在alert日志中去查找ORA-等错误了。

 

adrci> show problem

 

ADR Home =/u01/app/oracle/diag/rdbms/ora12c/ora12c:

*************************************************************************

PROBLEM_ID           PROBLEM_KEY                                                LAST_INCIDENT        LASTINC_TIME                            

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

1                    ORA 7445[ksws_switch_svc]                                  106059               2018-05-02 15:39:29.750000+08:00      

2                    ORA 700 [kskvmstatact:excessive swapping observed]         108117               2018-05-03 11:38:04.033000+08:00      

2 rows fetched

 

adrci> show incident

 

ADR Home =/u01/app/oracle/diag/rdbms/ora12c/ora12c:

*************************************************************************

INCIDENT_ID          PROBLEM_KEY                                                CREATE_TIME                             

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

108116               ORA 700 [kskvmstatact: excessiveswapping observed]         2018-05-0310:37:52.996000 +08:00      

108117               ORA 700 [kskvmstatact: excessiveswapping observed]         2018-05-03 11:38:04.033000 +08:00      

2 rows fetched

 

Ips命令

该命令可以帮助我们将与某事件或故障相关的日志打包,不用再一个个的文件去找了。

 

adrci> ips pack incident 108117;

Generated package 1 in file/home/ora12c/ORA700ksk_20180512160558_COM_1.zip, mode complete

 

Purge命令

该命令可以帮助我们清理相关的数据库日志,比如我们制定一个时间周期,即可清理掉时间周期之外的相关日志。

 

adrci> purge -age 60 -type incident

 

日志自动清理机制

11g支持两种日志保留策略:

  • SHORTP_POLICY,指定短生命周期文件的保留时间,如dump文件,默认30天;

  • LONGP_POLICY,指定长生命周期文件的保留时间,如事件日志,默认365天。

 

set control (SHORTP_POLICY = 1440)

 

12c日志管理

 

虽然指定日志文件的保留时间,但仍然存在因为日志文件的暴增撑满文件系统的隐患。基于11g的ADR架构,12c进一步增强了数据库日志自动清理机制,引入了基于文件大小的保存策略,只需要指定系统允许保存的最大日志文件大小,Oracle自动进行日志文件的清理。

 

此外,12c adrci还支持使用SQL语句查询日志文件信息。^_^黑科技有木有

 

select * from problem where"PROBLEM_KEY like '%600%'"

 

通过上述的介绍我们不难发现,Oracle数据库的日志管理已经从之前的纯人工管理,逐步进化到自动管理。我们是否可以说12c的Oracle数据库,已经实现了日志管理的自治呢?

 


文章转载自数据最前线,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论