oracle審計AUD$過大導致的數據庫登錄異常
阿新 • • 發佈:2018-01-03
writing too 本地 names 配置 sys popu eas trunc
今天,省分技術人員反映數據庫登錄異常。
查詢oerr,發現該錯誤是一般性提示,可能導致的原因有數據庫未註冊、本地文件配置問題等。由於平時連接並沒有問題,是突發情況,所以排除了配置問題。
遠程登錄查詢監聽,發現監聽並無問題,但在嘗試本地登錄時出現ora 00020錯誤
[html] view plain copy- oracle@dxxxx:~> sqlplus / as sysdba
- SQL*Plus: Release 11.2.0.4.0 Production on Mon Apr 25 10:40:08 2016
- Copyright (c) 1982, 2013, Oracle. All rights reserved.
- ERROR:
- ORA-00020: maximum number of processes (1200) exceeded
- Enter user-name:
這說明進程數超過了數據庫設定值。嘗試在另一個節點登錄則並無問題。
那麽應用應該不會出現問題才對,因為至少有一個節點是可用的。
為了查找問題根源,我從另一臺服務器上使用輕松連接的方式連接節點2的實例,結果報ora 01653
[html] view plain copy- oracle@xxxx:/myimp/aud> sqlplus yy/yy@node2:1521/xxxx
- SQL*Plus: Release 11.2.0.4.0 Production on Mon Apr 25 10:04:32 2016
- Copyright (c) 1982, 2013, Oracle. All rights reserved.
- 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
- Enter user-name:
問題很明顯了,系統表空間應該是爆了。而aud$是審計相關。因此查詢系統表空間使用情況,並查找系統表空間內數據量最大的表。
- SQL> col file_name for a50
- SQL> select file_name,bytes/1024/1024/1024 GB from dba_data_files where tablespace_name=‘SYSTEM‘;
- FILE_NAME GB
- -------------------------------------------------- ----------
- +DATADG/data/datafile/system.259.783425779 31.9726563
[html] view plain copy
- SQL> select * from (
- 2 select table_name,blocks*8192/1024/1024/1024 GB from user_tables where blocks is not null order by 2 desc)
- 3 where rownum<10;
- TABLE_NAME GB
- ------------------------------ ----------
- AUD$ 27.4380493
- IDL_UB1$ .257354736
- WRM$_SNAPSHOT_DETAILS .232673645
- WRI$_ADV_OBJECTS .193763733
- HISTGRM$ .130683899
- WRH$_ACTIVE_SESSION_HISTORY .11491394
- WRH$_FILESTATXS .112823486
- OBJ$ .068336487
- SOURCE$ .066230774
- 9 rows selected.
可以看出,系統表空間已達到上限32G,且其中審計表AUD$占了27G。
查看審計規則,可以看到數據庫審計了每次的連接。
現在清楚了。新有的連接因為審計策略需要寫入系統表空間的AUD$表,但由於系統表空間已達到空間配額,數據無法寫入,導致連接失敗。
數據庫急需可用,而該表因bug問題不能用數據泵導出,只能exp,耗時太長,因此直接truncate操作。
截斷aud$後,從節點1本地連接數據庫正常。但從B庫連接A庫節點1實例仍報ora 00020錯誤。查看節點1進程數
[html] view plain copy
- SQL> select count(*) from v$process;
- COUNT(*)
- ----------
- 1198
查看參數為1200,節點2進程數為121.因此,懷疑省分配置的tnsnames.ora並未使用LB,導致所有連接只會去節點1.
目前節點1不能連接,是因為之前的連接都hung在這兒,導致連接擁堵。停掉節點一後,B庫遠程可以連到A庫。
[html] view plain copy- SQL> show parameter process
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- aq_tm_processes integer 1
- cell_offload_processing boolean TRUE
- db_writer_processes integer 16
- gcs_server_processes integer 6
- global_txn_processes integer 1
- job_queue_processes integer 1000
- log_archive_max_processes integer 4
- processes integer 1200
- processor_group_name string
- SQL> select count(*) from v$process;
- COUNT(*)
- ----------
- 121
重啟後,節點1進程數降下來,可以正常連接。
oracle審計AUD$過大導致的數據庫登錄異常