zoukankan      html  css  js  c++  java
  • ORA-00604: error occurred at recursive SQL level 1 ORA-00604: error occurred at recursive SQL level 1 ORA-01653: unable to extend table SYS.AUD$ by 1024 in tablespace SYSTEM

    休息期间甲方baba致电系统不能上了,数据库也登录不上去了,甩过来截图如下:

    在用sqlplus user/password@orcl登录数据库时报如下错误:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-01653: unable to extend table SYS.AUD$ by 1024 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 1024 in tablespace SYSTEM


    ORA-00604: error occurred at recursive SQL level 1的错误指的是 内部的SQL语句执行失败
    ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM 意思是表空间已满

    根据报错的信息看,一般情况是:

    1.磁盘空间满了,无法自增了

    2.表空间不足,已达到自增扩展的上限了

    既然plsal都登不上去,于是便查看了一下存储设备空间,发现:

    阿西吧,空间已耗尽!!!

    看了看耗尽的原因是备份的数据库有好几年前的,没有及时定期清理导致。下面提供一个定期清理指定N天前的备份文件的批处理代码:

    详情见:https://www.cnblogs.com/su-root/p/12348178.html

    如果是表空间满了的话解决如下:

    1、登录plsql查看使用情况:

    SELECT a.tablespace_name "表空间名",
    
    a.bytes / 1024 / 1024 "表空间大小(M)",
    
    (a.bytes - b.bytes) / 1024 / 1024 "已使用空间(M)",
    
    b.bytes / 1024 / 1024 "空闲空间(M)",
    
    round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"
    
    FROM (SELECT tablespace_name, sum(bytes) bytes
    
    FROM dba_data_files
    
    GROUP BY tablespace_name) a,
    
    (SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest
    
    FROM dba_free_space
    
    GROUP BY tablespace_name) b
    
    WHERE a.tablespace_name = b.tablespace_name
    
    ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC

    表空间大小(M):表示表空间所有的数据文件总共在操作系统占用磁盘空间的大小;比如:USER_DATA表空间有2个数据文件,datafile1为300MB,datafile2为400MB,那么USER_DATA表空间的"表空间大小"就是700MB。

    已使用空间(M):表示表空间已经使用了多少;

    空闲空间(M):表示表空间剩余多少;

    使用比:表示已经使用的百分比;

    查看到USER_DATA表空间已使用百分比达到90%以上,可以查看该表空间总共有几个数据文件,每个数据文件是否自动扩展,可以自动扩展的最大值。

    SELECT file_name,
    
    tablespace_name,
    
    bytes / 1024 / 1024 "bytes MB",
    
    maxbytes / 1024 / 1024 "maxbytes MB"
    
    FROM dba_data_files
    
    WHERE tablespace_name = 'USER_DATA';

    查看 MSMS 表空间是否为自动扩展

    SELECT file_id, file_name, tablespace_name, autoextensible, increment_by
    
    FROM dba_data_files
    
    WHERE tablespace_name = 'USER_DATA'
    
    ORDER BY file_id desc;

    查看"autoextensible"对应的值是YES还是NO,若是NO,说明MSMS表空间的自动扩展功能没有开,改成YES就可以了。

    例如:MSMS表空间目前的大小为0.9GB,但最大每个数据文件只能为1GB,数据文件快要写满,那么我们就需要扩大表空间了。

    扩大表空间又分两种做法:

    • 一种是增大数据文件大小
    • 一种是增加数据文件数量

    首先找出该表空间对应的数据文件及路径

    SELECT * FROM dba_data_files t WHERE t.tablespace_name='表空间名称';

    注:查找对应的表空间中的数据文件的全路径,该路径对应FILE_NAME字段。

    解决方法1:增大数据文件

    alter database datafile '全路径的数据文件名称' resize ***M;

    解决方法2:增加数据文件

    获取创建表空间的语句:

    SELECT dbms_metadata.get_ddl('TABLESPACE', 'USER_DATA') FROM dual;

    增加一个数据文件,确认磁盘空间足够,【用操作系统UNIX、Linux中的df -g命令(查看下可以使用的磁盘空间大小)】

    新增一个数据文件,全路径的数据文件名称为该新增数据文件的全路径文件名称。大小为***M,自动扩展功能打开,且该数据文件的最大扩展值为10G。

    alter tablespace 表空间名称 add datafile '全路径的数据文件名称' size ***M  autoextend on maxsize 10G;

    验证已经增加的数据文件

    SELECT file_name, file_id, tablespace_name FROM dba_data_files WHERE tablespace_name = '表空间名称'

    删除表空间数据文件

    altertablespace 表空间名称 DROP datafile '/app/orcl/product/10.2.0/oradata/orcl/USER_DATA.dbf '

    注:表空间一般让空闲百分比保持在10%以上,且数据文件大小最好不要超过2G。当表空间不足时,要么resieze datafile,要么增加datafile。

  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/su-root/p/12349150.html
Copyright © 2011-2022 走看看