在没有PK的情况下在不同数据库中的表之间复制数据(如同步)

时间:2009-08-24 22:41:55

标签: sql oracle backup data-recovery

我在没有PK的数据库中有一个表(A),它有大约300 k记录。

我在其他数据库中有该表的子集副本(B),它只有50k并且包含给定时间范围的备份(7月数据)。

我想从表B中将缺失的记录复制到表A中,当然不会复制现有的记录。 (我可以创建一个数据库链接以简化操作)

我可以遵循什么策略成功插入A中缺少的行。

这些是表格列:

IDLETIME    NUMBER  
ACTIVITY    NUMBER      
ROLE    NUMBER          
DURATION    NUMBER      
FINISHDATE  DATE    
USERID  NUMBER
.. 40 extra varchar columns here ... 

我最担心的是缺乏PK。我可以使用所有列创建类似哈希或PK的东西吗?

在这种情况下,有什么可能的办法?

我在表A中使用Oracle 9i,在B

中使用Oracle XE(10)

要复制的元素的大致数量是20,000

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果数据量足够小,我会选择以下

CREATE DATABASE LINK A CONNECT TO ... IDENTIFIED BY ... USING ....;
INSERT INTO COPY
SELECT * FROM table@A
MINUS
SELECT * FROM COPY;

你说有大约20,000个要复制,但不是整个数据集中有多少。 另一种选择是删除副本的当前内容并插入原始表的全部内容。

如果完整数据集很大,你可以使用hash,但我怀疑它仍然会尝试在整个数据库链接中拖动整个数据集以在本地数据库中应用哈希。

答案 1 :(得分:1)

只要表中不存在重复行,您就可以将Unique或Primary键应用于所有列。如果密钥/索引的开销要维护很多,您还可以查询应用程序中的数据库以查看它是否存在,并且只有在缺少时才执行插入