记一次Oracle审计日志爆满导致用户无法连接的情况

项目上一次因为审计日志爆满导致用户无法连接的检查过程以及处理步骤。

Posted by caosw on August 19, 2019

记一次Oracle审计日志爆满导致用户无法连接的情况


背景:

一早上某项目组的实施人员便发信息给我说PLSQL连接不上数据库了。问了他数据库实例的状态以及监听的状态结果一问三不知,算了直接让他发远程给我,我自己上去看吧。

操作系统以及数据库版本:

windows Server 2012
Oracle11.2.0.1.0

检查过程:

第一步:查看了数据库实例的状态以及监听的情况(乍一看都没什么问题)。

实例状态

SQL> select status from v$instance;
STATUS
------------    
OPEN

监听状态

PS C:\Users\Administrator> lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 19-8月 -2019 10:30:25


Copyright (c) 1991, 2010, Oracle.  All rights reserved.


正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=WIN-A9RRTJSFJDL)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期                  19-8月 -2019 10:05:54
正常运行时间              0 天 0 小时 24 分 30 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
监听程序日志文件          d:\app\administrator\diag\tnslsnr\WIN-A9RRTJSFJDL\listener\alert\log.xml
监听端点概要...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN-A9RRTJSFJDL)(PORT=1521)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
    实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
    实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
    实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
第二步:检查alert.log,无奈告警日志太大了(差不多4G),不想打开一个4G的文件,于是便将数据库关闭,然后将alert.log文件重命名,再启动数据库服务器,跟踪了告警日志。并未发现什么异常情况。
第三步:通过sqlplus / as sysdba是能够进入数据库的,我想着我之前建过一个dba账号,尝试能不能登录。结果果然出了问题。
SQL> conn admin/admin123
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM
ORA-02002: error while writing to audit trail
ORA-00604: error occurred at recursive SQL level 1
ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

通过报错就很明显看出了问题,审计日志无法在system表空间中扩展了。

问题原因:

oracle11g缺省安装数据库启动了audit功能,导致oracle不断累积sys.aud$表以及相关索引的扩展,导致了system系统表空间被撑满。询问了项目组人员是否需要审计功能,确认不需要就关闭审计。

处理过程:

1、system系统表空间撑满,添加一块数据文件
SQL> alter tablespace system add datafile 'D:\app\Administrator\oradata\orcl\system07.dbf' size 10G autoextend on next 100M;

表空间已更改。
2、关闭审计功能,初始化参数audit_trail设置为none
SQL> alter system set audit_trail=none scope=spfile;

系统已更改。
3、重启数据库服务器
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 6831239168 bytes
Fixed Size                  2188728 bytes
Variable Size            3909093960 bytes
Database Buffers         2902458368 bytes
Redo Buffers               17498112 bytes
数据库装载完毕。
数据库已经打开。
4、清空审计表sys.aud$,直接使用truncate
SQL> truncate table sys.aud$;

表被截断。

参考博客:https://blog.51cto.com/zxf261/762048