SYS.AUD$沒法擴容致使沒法登陸的問題

保存信息 linux

  ORA-00604: error occurred at recursive SQL level 1 數據庫

  ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM windows

  ORA-02002: error while writing to audit trail 網絡

  ORA-00604: error occurred at recursive SQL level 1 oracle

  ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM 測試

問題處理步驟:
1.查看系統表空間使用狀況,首先要肯定表空間數據文件是否超過單個文件上限
select b.name,sum(a.bytes/1000000) from v$datafile a,v$tablespace b where a.ts#=b.ts# group by b.name;
確認system表空間數據文件大小是否達到單個文件上限32G(默認oracle數據塊是8k,支持最大的單個數據文件大小是32G),計算方法參考下面的一段文字(網絡摘要):

-------------------------------------------------------------------------------------------------------------------- spa

表空間數據文件容量與DB_BLOCK_SIZE的設置有關,而這個參數在建立數據庫實例的時候就已經指定。DB_BLOCK_SIZE參數能夠設置爲4K、8K、16K、32K、64K等幾種,Oracle的物理文件最大隻容許4194304個數據塊(這個參數具體由操做系統決定,通常應該是此數字),表空間數據文件的最大值對應關係就能夠經過4194304×DB_BLOCK_SIZE/1024M計算得出。 操作系統

4k最大表空間爲:16384M unix

8K最大表空間爲:32768M get

16k最大表空間爲:65536M

32K最大表空間爲:131072M

64k最大表空間爲:262144M

而Oracle默認分配的爲8K,也就是對應於32768M左右的空間大小,若是想繼續增大表空間的話,只須要經過alter tablespace name add datafile ‘path/file_name’ size 1024M;添加數據文件的方式就能夠了。

數據塊是oracle中最小的空間分配單位,各類操做的數據就的放在這裏,oracle從磁盤讀寫的也是塊。一旦create database,db_block_size就是不可更改的。由於oracle是以塊爲單位存儲數據的,任何一個存儲元素最少佔用一個塊,若是你改變了db_block_size,必然致使部分塊不能正常使用。

其實在unix類操做系統中,文件塊和oracle塊的關係很是緊密(建議相等),這樣才能保證數據庫的執行效率。在windows下可能就不這麼講究了。建議使用8k以上的塊,有人作過測試,一樣的配置,8k的塊比4k快大約40%,比2k快3倍以上。

---------------------------------------------------------------------------------------------------------------------------
2.接着上面說,若是達到文件大小上限32G,就須要新增表空間數據文件,腳本以下:
alter tablespace system add datafile '系統表空間數據文件絕對路徑(通常爲system01.dbf,記着序號加1後是system02.dbf)' size 20000M

若是沒達到上限,就擴展表空間大小,固然不能超過32g,腳本以下:
alter database datafile '數據文件絕對路徑' resize 30524M;

以上所述爲解決此問題的臨時解決方案,已通過驗證,最終的解決方案仍是比較麻煩的,畢竟不是專業的dba,就不在此贅述,仍是要dba來搞,如今都用oracle11g,11g默認開啓了審計功能,要麼吧審計表移到非系統表空間,要麼關閉審計功能,根據實際狀況操做。
相關文章
相關標籤/搜索