如何在oracle中将所有约束和数据从一种模式复制到另一种模式

时间:2018-12-26 14:49:26

标签: oracle constraints unique-key

我将Toad用于oracle 12c。我需要将一个表和数据(40M)从一个shcema复制到另一个(进行测试)。但是,有一个唯一的键(不是该表的PK)称为record_Id col,它具有类似3.000 ******* 19E15的数据。大约2M行具有相同的编号(我相信是因为数量很大),在生产中是唯一的。当我尝试将其复制为紫罗兰色时,该列的唯一键。我正在使用蟾蜍“将数据导出到另一个架构”功能来复制数据。

当我在产品中执行查询时

 select count(*) from table_name 

OR

select count(distinct(record_id) from table_name

两个查询都给出完全相同数量的数据。

我没有DBA权限。如何在不违反表的唯一键的情况下复制所有数据。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用UPSERT进行决定性的INSERT或UPDATE,也可以为此编写小型过程。

您可能会考虑使用NOT EXISTS,但是您的数据量很大,并且可能不会节省资源。

insert into prod_tab 
  select * from other_tab t1 where NOT exists (
     select 1 from prod_tab t2 where t1.id = t2.id
  ); 

答案 1 :(得分:0)

在Oracle中,您可以使用MERGE query

以下查询针对每个数据行进行如下操作:

  • 如果源record_id在目标表中尚不存在,则会插入新记录
  • 否则,现有记录将使用源值进行更新

为示例起见,我假设表中还有其他两列:column1column2

MERGE INTO target_table t1
USING (SELECT * from source_table t2)
ON (t1.record_id = t2.record_id)
WHEN MATCHED THEN UPDATE SET
    t1.column1 = t2.column1,
    t1.column2 = t2.column2
WHEN NOT MATCHED THEN INSERT
    (record_id, column1, column2) VALUES (t2.record_id, t2.column1, t2.column2)