Vin*_*eJS 9 oracle schema ora-00942 remap impdp
可以使用Oracle数据泵导入工具(IMPDP.EXE)使用REMAP_SCHEMA选项将一个模式导入另一个模式.但是,存在一个问题,即触发器未正确重新映射.这导致触发器根本没有创建错误,如下所示:
ORA-39083: Object type TRIGGER failed to create with error: ORA-00942: table or view does not exist Failing sql is: CREATE TRIGGER "**NEW_SCHEMA**"."METER_ALARMS_BI" BEFORE INSERT ON
**OLD_SCHEMA**.METER_ALARMS ...
Run Code Online (Sandbox Code Playgroud)
原因是因为create SQL仍然引用OLD_SCHEMA.它确实在Oracle文档中说:
映射可能不是100%完成,因为某些模式引用导入无法查找.例如,Import将找不到嵌入在类型,视图,过程和包的定义主体中的模式引用.
恕我直言,这是甲骨文的一个警察,但这是另一个讨论!
根据Oracle Metalink说明750783.1,解决方法是:
- 创建一个SQLFILE以包含相关的DDL命令:
impdp system/****** directory=test_dp
DUMPFILE=export_schemas.dmp
remap_schema=u1:u2 sqlfile=script.sql
Run Code Online (Sandbox Code Playgroud)
- 从写入的SQLFILE中提取受影响的DDL并更正模式引用.然后手动执行该命令.
这不是一个好方法,特别是如果你有许多失败的对象,并希望自动化组合多个模式的过程,以便在数据库的字段升级.
有没有人找到更好的方法来做到这一点?如果要在现场使用,我需要一个必须100%可靠的解决方案.我可以解析生成的SQL文件,但可以100%正确吗?是否有一些方法可以拦截IMPDP执行的CREATE SQL语句并在导入时动态更正?可以直接修补DMP文件吗?
你可以看看 DBMS_METADATA
有一个REMAP_SCHEMA选项。不确定它是否会比 DATAPUMP 工作得更好(我怀疑 DATAPUMP 会在幕后使用 DBMS_METADATA)。但对输出进行“后处理”会更容易。
| 归档时间: |
|
| 查看次数: |
19887 次 |
| 最近记录: |