[20191128]11GR2 asm实例audit文件.txt

[20191128]11GR2 asm实例audit文件.txt

--//例行检查,我发现asm实例产生大量audit文件,一直没有清理.感觉oracle在这方面设计不好.

# cd /u01/app/11.2.0/grid/rdbms/audit
$ ls -ltr | grep "2019-11-28" | awk '{print $6,$7}' | xargs -I{} date -d "{}" "+%Y-%m-%d:%T %s" |  awk 'NR==1 {a=$1;b=$2} NR>1 {print $1,"-",a,$2-b;a=$1;b=$2}'  | tail
2019-11-28:08:23:19 - 2019-11-28:08:08:18 901
2019-11-28:08:38:20 - 2019-11-28:08:23:19 901
2019-11-28:08:53:20 - 2019-11-28:08:38:20 900
2019-11-28:09:08:21 - 2019-11-28:08:53:20 901
2019-11-28:09:23:22 - 2019-11-28:09:08:21 901
2019-11-28:09:38:23 - 2019-11-28:09:23:22 901
2019-11-28:09:53:24 - 2019-11-28:09:38:23 901
2019-11-28:10:08:25 - 2019-11-28:09:53:24 901
2019-11-28:10:23:26 - 2019-11-28:10:08:25 901
2019-11-28:10:38:27 - 2019-11-28:10:23:26 901
--//很明显15分钟产生1个audit文件.
--//注意我定义ls显示时间部分与别人的系统不同,我喜欢显示的格式如下.
$ alias ls
alias ls='ls --color=auto --time-style=+"%Y-%m-%d %H:%M:%S"'

--//如果按照这个规律一天大约1440/15 = 96.不过我也遇到一些奇怪的情况:
--//先清除2016年之前的文件,不然ls -ltr感觉有点慢.

$ ls -ltr | grep "2017-01" | awk '{print $6}' | sort | uniq -c
     99 2017-01-01
     98 2017-01-02
     65 2017-01-03
     59 2017-01-09
     98 2017-01-10
     99 2017-01-11
     98 2017-01-12
    165 2017-01-13
     99 2017-01-14
     96 2017-01-15
    110 2017-01-16
    100 2017-01-17
    112 2017-01-18
    108 2017-01-19
     83 2017-01-23
     96 2017-01-24
     96 2017-01-25
     96 2017-01-26
     96 2017-01-27
     96 2017-01-28
     96 2017-01-29
     96 2017-01-30
     96 2017-01-31
--//没有2017-01-04 到  2017-01-08号的audit.

$ ls -ltr | grep "2017-11" | awk '{print $6}' | sort | uniq -c  | head
     98 2017-11-01
     86 2017-11-02
      5 2017-11-03
      5 2017-11-04
      3 2017-11-05
      3 2017-11-06
      4 2017-11-07
      1 2017-11-08
      7 2017-11-09
      1 2017-11-10
--//2017.11.03 号减少许多.oracle这个版本产生的文件是进程号+时间戳的,不可能出现重名情况.
$ ls -ltr | grep "2017-11-03"
-rw-r----- 1 grid oinstall 750 2017-11-03 10:52:09 +ASM1_ora_8436_20171103105209597022143795.aud
-rw-r----- 1 grid oinstall 752 2017-11-03 11:02:10 +ASM1_ora_20672_20171103110210032622143795.aud
-rw-r----- 1 grid oinstall 752 2017-11-03 14:52:18 +ASM1_ora_31213_20171103145218987768143795.aud
-rw-r----- 1 grid oinstall 752 2017-11-03 20:02:32 +ASM1_ora_22418_20171103200232746081143795.aud
-rw-r----- 1 grid oinstall 750 2017-11-03 22:02:37 +ASM1_ora_9347_20171103220237811439143795.aud
..
--//继续1个月1个月查询..

$ ls -ltr | grep "2018-05-" | awk '{print $6}' | sort | uniq -c  | head -13
      1 2018-05-01
      2 2018-05-02
      3 2018-05-03
      3 2018-05-04
      4 2018-05-05
      1 2018-05-06
      2 2018-05-07
      1 2018-05-08
      6 2018-05-09
     53 2018-05-10
     97 2018-05-11
     97 2018-05-12
     96 2018-05-13
--//奇怪到2018-05-10有开始回复一天96个的情况.不知道什么原因激活这样的操作.
--//观察另外1个实例:
# ls -ltr | grep "2017-01" | awk '{print $6}' | sort | uniq -c
      1 2017-01-01
     21 2017-01-03
     17 2017-01-09
      1 2017-01-11
     73 2017-01-13
      1 2017-01-14
      2 2017-01-15
     27 2017-01-16
      7 2017-01-19
     10 2017-01-23
--//另外的实例依旧没有2017-01-04 到  2017-01-08号的audit.    

# ls -ltr | grep "2017-11" | awk '{print $6}' | sort | uniq -c  | head
      5 2017-11-01
     47 2017-11-02
     96 2017-11-03
     96 2017-11-04
     95 2017-11-05
     96 2017-11-06
     96 2017-11-07
     97 2017-11-08
     97 2017-11-09
     97 2017-11-10

# ls -ltr | grep "2018-05-" | awk '{print $6}' | sort | uniq -c  | head -13
     98 2018-05-01
     97 2018-05-02
     97 2018-05-03
     96 2018-05-04
     98 2018-05-05
     97 2018-05-06
     97 2018-05-07
     95 2018-05-08
     96 2018-05-09
     68 2018-05-10
     10 2018-05-11
      3 2018-05-12
      3 2018-05-13
--//噢,跑到另外1个实例做这些操作.
--//像这样的文件命名格式不能使用logrotate清理.只能采用原始的方式:

2.建立脚本如下:

#  cat /usr/local/bin/purge_oracle_aud.sh
#! /bin/bash
# purge oracle audit log
echo
echo "start purge oracle audit asm at : " $(/bin/date +'%Y/%m/%d %T')
/usr/bin/find /u01/app/11.2.0/grid/rdbms/audit/ -mtime +90  -name "+ASM1_ora_*.aud" -print -delete
echo "end   purge oracle audit asm at : " $(/bin/date +'%Y/%m/%d %T')
echo
--//注意另外实例要修改为-name "+ASM2_ora_*.aud".

# chmod 750 /usr/local/bin/purge_oracle_aud.sh

--//crontab.d目录建立一个文件加入如下:
32 6 * * * root /usr/local/bin/purge_oracle_aud.sh >> /var/log/purge_oracle_aud.log 2>&1

--///var/log/purge_oracle_aud.log的清理由logrotate完成.
# cat   /etc/logrotate.d/oracle
/var/log/purge_oracle_aud.log
{
    size=20M
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
}

3.我感到奇怪的是管理的exadata的机器竟然仅仅有2014年的audit文件,以后零星的出现几个,真不知道问题在哪里.也不知道为什么产生
  这样的情况.仔细查看才明白....

--//exadata asm实例配置参数如下:
SQL> show parameter audit
NAME                 TYPE        VALUE
-------------------- ----------- ------------------------------
audit_file_dest      string      /u01/app/11.2.0.4/grid/rdbms/audit
audit_sys_operations boolean     FALSE
audit_syslog_level   string      LOCAL0.INFO

--//噢明白了,exadate oracle的实施人员修改参数audit_syslog_level指向了LOCAL0.INFO.不过audit_sys_operations=false
--//而且实施人员并没有定义在/etc/rsyslog.conf配置参数中,有机会我给自己测试看看.

# grep -i local0 /etc/syslog.conf
# grep -i local0 /etc/rsyslog.conf
--//无显示.

--//当前有问题的系统如下:
SQL> show parameter audit
NAME                 TYPE        VALUE
-------------------- ----------- ------------------------------
audit_file_dest      string      /u01/app/11.2.0/grid/rdbms/audit
audit_sys_operations boolean     FALSE
audit_syslog_level   string

--//这部分内容参考:http://blog.itpub.net/267265/viewspace-2646161/=>[20190530]oracle Audit文件管理.txt

--//我仔细检查exadata的alert文件发现如下:
Fri Oct 10 21:23:09 2014
ALTER SYSTEM SET cluster_interconnects='10.10.10.70:10.10.10.71' SCOPE=SPFILE SID='+ASM1';
ALTER SYSTEM SET cluster_interconnects='10.10.10.72:10.10.10.73' SCOPE=SPFILE SID='+ASM2';
ALTER SYSTEM SET sga_target='2048M' SCOPE=SPFILE SID='*';
ALTER SYSTEM SET pga_aggregate_target='400M' SCOPE=SPFILE SID='*';
ALTER SYSTEM SET memory_target='0' SCOPE=SPFILE SID='*';
ALTER SYSTEM SET processes=1024 SCOPE=SPFILE SID='*';
ALTER SYSTEM SET audit_syslog_level='local0.info' SCOPE=SPFILE SID='*';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ALTER SYSTEM SET asm_power_limit=1 SCOPE=SPFILE SID='*';
Fri Oct 10 21:23:10 2014
ALTER SYSTEM SET memory_max_target='0' SCOPE=SPFILE SID='*';
ALTER SYSTEM RESET memory_max_target SCOPE=SPFILE SID='*';
Fri Oct 10 21:24:05 2014

--//很明显实施人员有文档执行上面的步骤,确忘记了修改/etc/rsyslog.conf或者/etc/syslog.conf配置.导致我仅仅看见2014年的audit.
--//在exadata执行以上操作:
#  grep "local0" /etc/rsyslog.conf
local0.info                                             /var/log/oracleaudit.log
daemon.*                                                /var/log/messages

# service rsyslog restart
Shutting down system logger:  [  OK  ]
Starting system logger:       [  OK  ]

--//在asm实例上登录执行如下:
SYS@+ASM1> select sysdate from dual ;

SYSDATE
---------
28-NOV-19

#  cat /var/log/oracleaudit.log
2019-11-28T16:09:29.980476+08:00 dm01dbadm01 Oracle Audit[63191]: LENGTH : '143' ACTION :[7] 'CONNECT' DATABASE USER:[1]
'/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[0] '' STATUS:[1] '0' DBID:[0] ''

--//仅仅看到登录,没有执行命令的审计.
--//修改/etc/logrotate.d/oracle,追加如下内容,定期清理审计,实际上这个大小足够保持很久的内容.
/var/log/oracleaudit.log {
  size=40M
  rotate 4
  copytruncate
  delaycompress
  notifempty
}

请使用浏览器的分享功能分享到微信等