使用Oracle DataPump迁移ABC完整模式:是否包含所有对象?
关于Oracle Data Pump导出ABC模式的对象覆盖范围及参数说明
首先直接给你答案:你当前的expdp命令会复制指定ABC schema下的绝大多数核心对象,包括你提到的包、存储过程、触发器,还有表、视图、序列、同义词、约束、权限等元数据,同时也会导出表中的数据(默认CONTENT=ALL)。
不过得补充几个细节,帮你确认是否完全符合你的需求:
默认行为覆盖的对象类型:
- 数据库对象:表(含分区、索引、约束)、视图、同义词、序列
- 编程对象:存储过程、函数、包(包体+规范)、触发器、自定义类型
- 权限与角色:授予该schema的系统权限、对象权限,以及关联的角色
- 统计信息:默认会导出优化器统计信息,方便导入后数据库直接使用这些数据做查询优化
默认不导出的特殊情况:
- 系统级对象(如SYS用户下的对象)不会被导出,这是合理的,因为你指定了
schemas=ABC,只会处理该schema归属的对象。 - 外部表、目录对象这类依赖系统物理资源的对象,数据泵只会导出它们的元数据定义,实际的外部文件(比如外部表关联的CSV)需要你手动复制到目标主机的对应路径。
- 系统级对象(如SYS用户下的对象)不会被导出,这是合理的,因为你指定了
是否需要添加额外参数?
大多数完整复制schema的场景下,你当前的命令已经足够。但如果有特殊需求,可以考虑添加这些参数让导出更精准:GRANTS=Y:明确导出所有权限(默认就是Y,写上更直观)CONSTRAINTS=Y:确保所有约束都被导出(同样默认Y)STATISTICS=ALL:导出所有统计信息(默认行为,若需要强调可以明确指定)EXCLUDE=TEMPORARY_TABLE:如果你想排除schema内的临时表,可以加这个参数INCLUDE=PACKAGE,PROCEDURE:反之,若只想导出特定类型对象(比如只存程序逻辑),可以用这个参数
最后提醒一下,导入时要对应使用impdp命令,示例如下:
impdp target_user/target_pass@target_host dumpfile=test1.dmp logfile=test1_imp.log schemas=ABC
如果目标主机的schema名称不同,还可以用REMAP_SCHEMA=ABC:NEW_ABC参数来完成名称映射。
内容的提问来源于stack exchange,提问作者4est




