代码之家  ›  专栏  ›  技术社区  ›  OscarRyz

在不同数据库的表之间复制数据而不使用PK(如同步)

  •  0
  • OscarRyz  · 技术社区  · 16 年前

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

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

    我想把表格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)

    要复制的元素的大致数目为20000。

    提前谢谢。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Gary Myers    16 年前

    如果数据量足够小,我将执行以下操作

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

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

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

        2
  •  1
  •   gapple    16 年前

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