awrextr.sql仅支持按连续snap_id导出,需满足快照存在、SELECT_CATALOG_ROLE权限、ARCHIVELOG模式三前提,否则静默失败或导出空文件。

awrextr.sql 不支持按自然时间(如“2026-09-25 09:00 到 2026-09-26 15:00”)直接导出,它只认 snap_id 区间,且必须满足快照连续、权限到位、归档开启三个硬性前提,否则静默失败或导出空 .dmp 文件。
查不到可用 snap_id 就别急着跑 awrextr.sql
脚本执行前必须确认源库真有目标区间对应的快照。AWR 不会“补采”,没快照就无数据可导。
- 先运行
SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot WHERE end_interval_time > SYSDATE - 7 ORDER BY snap_id DESC;查最近 7 天快照 - 若无结果,检查
SELECT * FROM dba_hist_wr_control;中的retention(保留天数)是否为 0,或interval(采集间隔)是否被设为 0 - 再确认
SHOW PARAMETER statistics_level;返回值必须是TYPICAL或ALL;BASIC会彻底停掉 AWR 采集
directory_name 和 snap_id 填错不会报错,但导出必失败
awrextr.sql 的交互式参数里,directory_name 和 begin_snap/end_snap 是两个最易填错却无提示的点。
-
directory_name必须是数据库中已存在的 DIRECTORY 对象名(如DATA_PUMP_DIR),不是操作系统路径;用SELECT * FROM dba_directories;确认存在 -
begin_snap和end_snap必须是真实存在、且属于同一实例的连续snap_id;中间若被DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE清理过,end_snap不能“跳空”,否则部分历史表(如DBA_HIST_SQLSTAT)静默缺失 - 脚本会两次询问
directory_name:第一次列目录对象供选,第二次让你指定写入位置——两次都得填同一个合法对象名
权限和归档模式不达标,脚本会在打包阶段卡死或生成空文件
awrextr.sql 底层调用 DBMS_SWRF_INTERNAL.AWR_EXTRACT,这个包对环境极其敏感。
- 执行用户必须显式拥有
SELECT_CATALOG_ROLE角色(仅SELECT权限不够) - 用户必须对
SYSAUX表空间有READ权限:GRANT READ ON TABLESPACE sysaux TO username; - 数据库必须处于
ARCHIVELOG模式:ARCHIVE LOG LIST输出中必须含Database log mode: Archive Mode;非归档模式下,脚本常卡在最后打包阶段,并抛ORA-13504
导出后文件为空或结构异常,优先检查这三个地方
导出完成不代表数据完整。常见“看似成功、实则无效”的情况集中在以下三点:
- 导出的
.dmp文件体积远小于预期(如只有几 KB):大概率是快照不存在或snap_id跨了 RAC 实例(单实例脚本默认只处理当前实例) - 后续用
awrload.sql加载时报ORA-31600或找不到表:说明导出时缺少SELECT_CATALOG_ROLE,导致元数据视图读取不全 - 加载后
AWR_STAGE模式中表行数极少:检查DBA_HIST_SNAPSHOT在源库中对应snap_id区间内是否有足够多的子表记录(如DBA_HIST_SYSMETRIC_HISTORY),而不仅是快照头存在
真正麻烦的不是步骤多,而是每个环节都可能“不报错但不干活”——尤其是快照连续性、角色权限、归档模式这三项,缺一不可,且错误表现高度隐蔽。


















