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默认开启了审计功能,要么吧审计表移到非系统表空间,要么关闭审计功能,根据实际状况操做。
相关文章
相关标签/搜索