在我的生产数据库中执行 expdp 命令时遇到问题。(Windows 环境中的 Oracle 11g)
cmd> expdp 'sys/123@PROD as sysdba' DUMPFILE=BACKUP_02082017_BACKUP.dmp LOGFILE=BakupLog_02082017_BACKUP.log SCHEMAS=A1,B2,C3,D4.. exclude=统计一致=y
导出大小为 7GB 的数据库需要 1 天多的时间。但我的问题是导出有错误并显示错误消息
ORA-31693: 表数据对象 "owner"."PASSWORD_HISTORY" 加载/卸载失败并且由于错误被跳过: ORA-02354: 导出/导入数据时出错 ORA-01555: 快照太旧: 回滚段号 19名称“_SYSSMU19_255734752$”太小
当我将我的保留策略从默认的 900 设置为 16500 时。即使发生了同样的错误。
因为我计划将保留策略增加到 10 小时,即 36000。它可行吗?我很困惑我的撤消表空间是否能够做到这一点?
提供更多细节:
> show parameter undo_%;
NAME TYPE VALUE
-------------------------------------------------- ----------- --------
undo_management string AUTO
undo_retention integer 16500
undo_tablespace string UNDOTBS1
> select file_name,tablespace_name,trunc(bytes/1024/1024) mb, trunc(maxbytes/1024/1024) mm
FROM dba_data_files
where tablespace_name = 'UNDOTBS1';
FILE_NAME TABLESPACE_NAME MB MM
--------------------------------------------------------------------
C:\APP\ADMIN\ORADATA\PROD\UNDOTBS01.DBF UNDOTBS1 5630 32767
>Size of undo with current undo_retention :
Actual Undo size[MBytes]:5630
UNDO retention[Sec]:16500
Needed Undo Size[MBytes]:909.433359
我被这个问题困住了。任何人请建议我如何处理这个错误?
提前致谢。
ORA-01555
错误的原因是undo_retention
与使用参数完成导出所需的时间相比,参数的值较低consistent=y
(在 11g 中已弃用,应使用flashback_time
orflashback_scn
)。您的撤消保留应该能够保留导出作业期间的撤消信息。
例如,如果您导出开始于
00:00 AM
并且需要 2 小时才能完成,那么undo_retention
如果您希望获得一致的数据,则应该设置至少 2 小时。我已经在我的测试服务器中模拟了这个问题。
我的撤消保留时间设置为 40 分钟。
我的撤消表空间是 32GB 大。
我试图导出我的一个模式。
花了1小时14分钟。并且在数据库中有适度的 DML 操作。
我得到了
ORA-0155
错误。然后我将撤消保留时间增加到 1 小时 20 分钟。
我再次尝试导出架构。
而且再也没有
ORA-01555
了。使用 BLOCKS 方法的总估计:182.9 GB
实际文件大小为 141 GB。
为什么转储文件的估计和实际大小有差异?看看这个帖子就知道答案了。
关于完成导出所需的时间。尝试使用以下参数。
此外,在开始导出作业之前尝试收集数据字典统计信息 -
进一步阅读:
另一种选择是增加突出显示的回滚段的 max_extents 以及所有其他具有相同 max_extents 的部分,或者将它们脱机并离开