1. 程式人生 > >oracle審計AUD$過大導致的數據庫登錄異常

oracle審計AUD$過大導致的數據庫登錄異常

writing too 本地 names 配置 sys popu eas trunc

今天,省分技術人員反映數據庫登錄異常。

技術分享圖片

查詢oerr,發現該錯誤是一般性提示,可能導致的原因有數據庫未註冊、本地文件配置問題等。由於平時連接並沒有問題,是突發情況,所以排除了配置問題。

遠程登錄查詢監聽,發現監聽並無問題,但在嘗試本地登錄時出現ora 00020錯誤

[html] view plain copy
  1. oracle@dxxxx:~> sqlplus / as sysdba
  2. SQL*Plus: Release 11.2.0.4.0 Production on Mon Apr 25 10:40:08 2016
  3. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  4. ERROR:
  5. ORA-00020: maximum number of processes (1200) exceeded
  6. Enter user-name:

這說明進程數超過了數據庫設定值。嘗試在另一個節點登錄則並無問題。

那麽應用應該不會出現問題才對,因為至少有一個節點是可用的。

為了查找問題根源,我從另一臺服務器上使用輕松連接的方式連接節點2的實例,結果報ora 01653

[html] view plain copy
  1. oracle@xxxx:/myimp/aud> sqlplus yy/yy@node2:1521/xxxx
  2. SQL*Plus: Release 11.2.0.4.0 Production on Mon Apr 25 10:04:32 2016
  3. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  4. ERROR:
  5. ORA-00604: error occurred at recursive SQL level 1
  6. ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM
  7. ORA-02002: error while writing to audit trail
  8. ORA-00604: error occurred at recursive SQL level 1
  9. ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM
  10. Enter user-name:


問題很明顯了,系統表空間應該是爆了。而aud$是審計相關。因此查詢系統表空間使用情況,並查找系統表空間內數據量最大的表。

[html] view plain copy
  1. SQL> col file_name for a50
  2. SQL> select file_name,bytes/1024/1024/1024 GB from dba_data_files where tablespace_name=‘SYSTEM‘;
  3. FILE_NAME GB
  4. -------------------------------------------------- ----------
  5. +DATADG/data/datafile/system.259.783425779 31.9726563

[html] view plain copy
  1. SQL> select * from (
  2. 2 select table_name,blocks*8192/1024/1024/1024 GB from user_tables where blocks is not null order by 2 desc)
  3. 3 where rownum<10;
  4. TABLE_NAME GB
  5. ------------------------------ ----------
  6. AUD$ 27.4380493
  7. IDL_UB1$ .257354736
  8. WRM$_SNAPSHOT_DETAILS .232673645
  9. WRI$_ADV_OBJECTS .193763733
  10. HISTGRM$ .130683899
  11. WRH$_ACTIVE_SESSION_HISTORY .11491394
  12. WRH$_FILESTATXS .112823486
  13. OBJ$ .068336487
  14. SOURCE$ .066230774
  15. 9 rows selected.

可以看出,系統表空間已達到上限32G,且其中審計表AUD$占了27G。

查看審計規則,可以看到數據庫審計了每次的連接。

技術分享圖片

現在清楚了。新有的連接因為審計策略需要寫入系統表空間的AUD$表,但由於系統表空間已達到空間配額,數據無法寫入,導致連接失敗。

數據庫急需可用,而該表因bug問題不能用數據泵導出,只能exp,耗時太長,因此直接truncate操作。

截斷aud$後,從節點1本地連接數據庫正常。但從B庫連接A庫節點1實例仍報ora 00020錯誤。查看節點1進程數

[html] view plain copy
  1. SQL> select count(*) from v$process;
  2. COUNT(*)
  3. ----------
  4. 1198

查看參數為1200,節點2進程數為121.因此,懷疑省分配置的tnsnames.ora並未使用LB,導致所有連接只會去節點1.

目前節點1不能連接,是因為之前的連接都hung在這兒,導致連接擁堵。停掉節點一後,B庫遠程可以連到A庫。

[html] view plain copy
  1. SQL> show parameter process
  2. NAME TYPE VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. aq_tm_processes integer 1
  5. cell_offload_processing boolean TRUE
  6. db_writer_processes integer 16
  7. gcs_server_processes integer 6
  8. global_txn_processes integer 1
  9. job_queue_processes integer 1000
  10. log_archive_max_processes integer 4
  11. processes integer 1200
  12. processor_group_name string
  13. SQL> select count(*) from v$process;
  14. COUNT(*)
  15. ----------
  16. 121


重啟後,節點1進程數降下來,可以正常連接。

oracle審計AUD$過大導致的數據庫登錄異常