讲师中心 微信公众号
AI工具推荐 视频效率加速

SQL触发器审计表数据量过大如何清理

夏宇吖_4370

夏宇吖_4370

发布时间:2026-08-25 13:43:02

|

933人浏览过

|

来源于php中文网

原创

必须用DBMS_AUDIT_MGMT清理sys.aud$,因其为受保护系统表,直接DELETE或TRUNCATE会报ORA-00942或ORA-01031错误,且破坏审计一致性;清理后需手动SHRINK SPACE或MOVE段释放空间。

sql触发器审计表数据量过大如何清理

sys.aud$ 表清理必须用 DBMS_AUDIT_MGMT,不能直接 DELETE

Oracle 审计表 sys.aud$ 是系统级表,位于 SYSTEM 或 SYSAUX 表空间,普通用户甚至 DBA 都无法直接对它执行 DELETE 或 TRUNCATE —— 会报 ORA-00942: table or view does not exist 或权限拒绝。官方唯一支持的清理方式是调用 DBMS_AUDIT_MGMT 包,否则可能破坏审计一致性或引发 ORA-600 错误。

常见错误现象:

  • 用 DELETE FROM sys.aud$ WHERE ntimestamp# 报错退出
  • 误删后发现 SELECT * FROM DBA_AUDIT_TRAIL 查询变慢或缺失历史记录
  • 手动 TRUNCATE TABLE sys.aud$ 导致后续审计开关失败(audit_trail 参数失效)

实操要点:

  • 必须用 SYS 用户登录执行,且需具备 EXECUTE_CATALOG_ROLE 权限
  • 清理前先确认归档时间戳:SELECT * FROM dba_audit_mgmt_last_arch_ts,只允许删「已归档」的数据
  • 首次使用前必须运行 init_cleanup 初始化,否则 clean_audit_trail 会静默失败

清理前务必设置 last_archive_timestamp,否则 clean_audit_trail 不生效

DBMS_AUDIT_MGMT.clean_audit_trail 不接受日期参数,它只按 last_archive_time 标记来判断哪些数据可删。这个标记是独立于物理数据的逻辑开关,不设就等于“没授权删任何数据”,命令会跑完但 sys.aud$ 行数纹丝不动。

典型误操作:

  • 跳过 set_last_archive_timestamp 直接跑 clean_audit_trail,日志显示成功,实际零删除
  • 传入的时间早于 dba_audit_mgmt_last_arch_ts 中记录的归档时间,触发 ORA-46275 错误
  • 用 SYSDATE - 7 但未考虑时区,导致跨天偏差(尤其在 RAC 环境中)

正确写法(清理 7 天前已归档数据):

BEGIN
  sys.DBMS_AUDIT_MGMT.set_last_archive_timestamp(
    audit_trail_type => sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    last_archive_time => SYSTIMESTAMP - 7
  );
END;

注意:SYSTIMESTAMP 比 SYSDATE 更可靠,它带时区信息,避免跨节点时间漂移。

清理后空间不释放?要手动 shrink 或 move segment

clean_audit_trail 只是逻辑删除:把行标记为“可覆盖”,并不回收磁盘空间。你执行完后查 dba_segments,AUD$ 的 BYTES 值几乎不变,SYSAUX 表空间使用率也不会降——这是正常行为,不是清理失败。

释放空间必须额外两步:

  • 如果是非 RAC 单实例,且 AUD$ 在 SYSAUX 中,运行 ALTER TABLE sys.aud$ SHRINK SPACE CASCADE(需表启用行移动)
  • 更稳妥的做法是 ALTER TABLE sys.aud$ MOVE TABLESPACE sysaux,强制重建段并压缩空块
  • 若表空间快满,可先 ALTER DATABASE DATAFILE '...sysaux01.dbf' AUTOEXTEND OFF 防止写满宕机

风险提示:MOVE 操作期间审计功能仍可用,但会短暂阻塞新审计记录写入(通常

自动化清理脚本必须加熔断和校验,别信“一次配好永不动”

生产环境曾有案例:定时任务每小时调用 clean_audit_trail,但某次归档时间戳被误设为 SYSTIMESTAMP - 30,结果连续删掉近一个月审计数据,导致安全合规审计失败。

防误删关键措施:

  • 脚本开头加校验:SELECT COUNT(*) FROM sys.aud$ WHERE ntimestamp# ,若结果 > 100 万行,自动暂停并发邮件告警
  • 每次清理后执行 ANALYZE TABLE sys.aud$ COMPUTE STATISTICS,防止后续查询因统计信息陈旧而走全表扫描
  • 硬编码保留底线,例如在 set_last_archive_timestamp 中写死 last_archive_time => GREATEST(SYSTIMESTAMP - 7, DATE '2025-01-01')

最易被忽略的一点:DBMS_AUDIT_MGMT 的清理是异步的,命令返回成功 ≠ 数据已删完。真正完成要看后台进程 ora_q00x_* 的日志,高峰期可能延迟数分钟。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4203

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

891

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1089

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6121

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2983

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6080

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8181

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1110

2024.04.29

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

80

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL优化与排查(MySQL版)
SQL优化与排查(MySQL版)

共26课时 | 3.2万人学习

MySQL索引优化解决方案
MySQL索引优化解决方案

共23课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn