1

我正在使用 Oracle 数据泵来执行模式“重命名”。所有 (2000) 表上都有一个主键列。例如,我需要在所有表上运行它:

更新 mytable set mykey='foo2' where mykey='foo';

我会使用 expdp 的 remap_data 选项来执行此操作。问题是我需要对 10+ 列进行重命名。有没有人遇到过这样的问题并找到了解决方法?

以前,我曾尝试使用“创建表为”。问题是必须为所有表(视图/触发器/授权/索引/约束)重新创建模式结构。我知道 DBMS_METADATA.GET_DDL 包。顺便说一下,在前后对数据库模式进行差异并重新创建差异似乎很难看。

我也尝试过在没有任何约束或索引的情况下对表进行插入,因此我只需要重新启用约束并重新创建索引,但我想尝试更快的方法。

我正在使用 Oracle 11.2.0.3.0。

4

1 回答 1

0

如果我理解正确,您真正的问题(或目标)是“重命名”模式。您选择使用 oracle 数据泵导出/导入(使用不同的 NAME 来实现 RENAME)。然后 DROP old schema (如果你觉得多余的话)。

如果这是正确的,那么您可以按照以下步骤来实现您的目标。我在我的 DEV 环境中成功地做到了。所有对象(包括 PK、FK)均已成功导入。

-- Export RMCORE_QA
expdp DIRECTORY=DMPDIR DUMPFILE=RMCORE_QA.dmp SCHEMAS='RMCORE_QA' LOG=RMCORE_QA_EXP_DP.lst  

-- Import using RMCORE_QA3
impdp DIRECTORY=DMPDIR DUMPFILE=RMCORE_QA.dmp REMAP_SCHEMA='RMCORE_QA:RMCORE_QA3' SCHEMAS='RMCORE_QA' LOG=RMCORE_QA_IMP_DP.lst TRANSFORM=OID:N 

您还可以通过以下方式比较对象 b/w 模式 -

SELECT OBJECT_NAME, STATUS, object_type FROM dba_objects WHERE owner LIKE 'RMCORE_QA'
MINUS
select OBJECT_NAME, STATUS, object_type from dba_objects where owner like 'RMCORE_QA3';

HTH。如果我没有得到您的问题,请告诉我...

于 2014-02-04T18:45:54.840 回答