首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Datapump:在克隆架构时修改完全限定的对象

Oracle Datapump:在克隆架构时修改完全限定的对象
EN

Database Administration用户
提问于 2013-10-09 10:35:23
回答 1查看 2K关注 0票数 3

我所面临的一个问题,我还没有找到一个优雅的解决办法:

我需要在同一个数据库中克隆一个模式,所以我使用datapump的remap_schema导入参数。

问题是PL/SQL包包含大量完全限定的对象名称(如select * from FROM_SCHEMA_A.table_name )。这些限定符被克隆。这使得克隆的包无效。

我显然可以用grant all on FROM_SCHEMA_A ... to TO_SCHEMA_A来解决问题,但这不是我想要的。我更想把名字也改一下。

输出参数为

代码语言:javascript
复制
content=metadata_only
directory=DATAPUMP_DIR
dumpfile=clone_schema.dmp
schemas=from_schema_a
exclude=trigger

导入参数如下

代码语言:javascript
复制
directory=DATAPUMP_DIR
dumpfile=clone_schema.dmp
remap_schema=from_schema_a:to_schema_a
transform=OID:n
EN

回答 1

Database Administration用户

发布于 2013-10-11 15:22:34

如果您授予特权(正如您前面提到的),问题可能会消失,但是在SCHEMA_B中执行的代码可能正在从SCHEMA_A中的表访问数据,除非这正是您想要的。

不幸的是,对于这个问题没有简单的答案,因为datapump的remap_schema选项并不真正支持您想要做的事情。但是,您可以尝试以下选项(我以前已经这样做过),

  1. 提取所有plsql代码和/或视图定义(datapump可以为您使用选项),
  2. 使用sed或您选择的任何其他工具,并将SCHEMA_A.替换为SCHEMA_B。要小心,偶尔会更改不需要的行,因此您必须跟踪它并实现解决方案。
  3. 对SCHEMA_B的表、索引、约束
  4. 使用sqlplus连接到SCHEMA_B并运行步骤2中修改的脚本来加载所有plsql代码、创建视图和其他依赖对象等。

这很麻烦,但如果不能修复您的源模式,我认为您没有太多的选择。幸运的是,如果您所处的情况是代码不经常更改,则可以保留转换后的文件,并避免使用这些手动步骤,直到发生故障。

对了,如果您的pl/sql代码看起来像“创建或替换schema_a.package_name",那么remap_schema也不支持它(在11.2之前,我还没有在12c中进行测试)。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/51267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档