0

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

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

我想从表 B 中将丢失的记录复制到表 A 中,当然不复制现有记录。(我可以创建一个数据库链接以使事情变得更容易)

我可以遵循什么策略将 B 中缺少的行成功插入 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

提前致谢。

4

2 回答 2

2

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

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

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

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

于 2009-08-25T00:19:43.633 回答
1

只要表中不存在重复行,您就可以对所有列应用唯一键或主键。如果键/索引的开销需要维护太多,您还可以在应用程序中查询数据库以查看它是否存在,并且仅在不存在时执行插入

于 2009-08-24T23:01:06.983 回答