玖叶教程网

前端编程开发入门

一文看懂生产数据库如何有效清理Oracle审计文件

概述

今天主要分享下Oracle审计方面的内容,之前其实有分享过审计表空间的转移及数据清理,但是在操作系统层面的清理还没介绍,今天补一下这块。


1、Oracle审计

通常我们新装好一个数据库中查询审计开关的时候,可能会发现它的设置为DB。(预装设置,如果为其他表示被认为设置过)

SQL>show parameter audit_trail 

audit_trail=DB,代表的是,oracle将把每次审计跟踪记录在数据库的一张叫做AUD$的表中。

SQL>select owner,table_name,tablespace_name from dba_tables a where a.table_name ='AUD
;

而这张表所在的表空间,正式oracle数据库最重要的SYSTEM表空间。

由于这个表空间非常特殊:如果此时它正好被设置为自动扩展(AUT=YES)的话:

SQL>select a.tablespace_name,a.bytes,a.autoextensible from dba_data_files a where a.tablespace_name='SYSTEM';

长此以往,SYSTEM表空间最终会因为过度肥胖把磁盘撑爆。(反过来,如果SYSTEM表空间的autoextensible=NO,AUD$表就没地方写就会报错无法分配空间)

所以有些数据库会根据情况,将审计功能“关闭”:

--1.设置审计参数关闭
SQL>alter system set audit_trail=none scope=spfile;
--2.重启数据库
SQL>shutdown immediate;
SQL>startup;

2、Oracle强制审计

但即使关闭审计功能,Oracle还是会强制审计,以下这些操作系统会强制记录:用管理员权限连接Instance;启动数据库;关闭数据库。

oracle早有准备,有一个叫强制审计的变态功能在等着你。

强制审计变态的功能:

(1)用SYSDBA或者SYSOPER权限登录数据库(conn / as sysdba)

(2)startup数据库

(3)shutdown数据库

oracle就给你在$ORACLE_BASE/admin/$ORACLE_SID/adump 目录中记.aud的文件,所以,

开了DB功能,会同时将审计日志记在AUD$表中和操作系统aud文件中。设置为NONE,仍然会而且毫无其他办法的将记录在操作系统aud($ORACLE_BASE/admin/实例名/adump/)文件中。

所以这个目录长期不清理的话,会积压大量*.aud文件,长期大量不删除的话,会影响到操作系统inodes。


3、定期情况aud$表和清理操作系统审计日志

3.1、如果为DB,记得定期清空aud$表

SQL>truncate table sys.aud$;

3.2、清理操作系统审计日志(一个aud文件为4k)

--进入审计日志目录:
cd $ORACLE_BASE/admin/$ORACLE_SID/adump
--删除1年前的审计文件:
find ./ -type f -name "*.aud" -mtime +360|xargs rm -f
--一次清空所有审计文件
find ./ -type f -name "*.aud"|xargs rm-f

注意:不要直接删除adump目录,否则,你会sqlplus不了数据库。


后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言