2009-08-24 70 views
0

我在沒有PK的數據庫中有一個表(A),它有大約300 k條記錄。在沒有PK的情況下在不同數據庫中的表之間複製數據(如同步)

我有一個在其他數據庫中的表副本(B),這隻有50k,幷包含給定時間範圍(7月數據)的備份。

我想從表B中將缺失的記錄複製到表A中,而不重複現有的記錄。 (我可以創建一個數據庫鏈接,使事情變得更容易)

我可以按照成功地插入到缺少的行從B.

什麼策略這些都是表列:

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

我最大的擔憂是缺乏PK。我可以使用所有列創建類似散列或PK的東西嗎?

在這種情況下可能有什麼方法可行?

我表A使用Oracle 9i和甲骨文XE(10)在乙

元件的大致數量來複制是預先20000和

感謝。

+0

表A中的行是否存在唯一性約束? – pilcrow 2009-08-25 02:14:24

+0

nope therent are not' – OscarRyz 2009-08-25 02:34:23

回答

1

只要表中不存在重複的行,您可以將唯一或主鍵應用於所有列。如果密鑰/索引的開銷需要維護很多,您還可以查詢應用程序中的數據庫以查看它是否存在,並且只在缺失時才執行插入操作

+0

「...你也可以在你的應用程序中查詢數據庫,看它是否存在,只執行插入,如果它是缺席的......」嗯,是的,但是..怎麼了?關於第一個選項,我沒有權限創建PK – OscarRyz 2009-08-24 23:07:04

2

如果數據量足夠小,我會去以下

CREATE DATABASE LINK A CONNECT TO ... IDENTIFIED BY ... USING ....; 
INSERT INTO COPY 
SELECT * FROM [email protected] 
MINUS 
SELECT * FROM COPY; 

你說有大約20,000複製,但不是整個數據集中有多少。 另一種選擇是刪除副本的當前內容並插入原始表的全部內容。

如果完整的數據集很大,您可以使用hash,但我懷疑它仍然會嘗試將整個數據集拖動到數據庫鏈接上以將散列應用到本地數據庫中。

+0

+1數據大概是300k。我嘗試了minus操作符,但是我得到了:錯誤:ORA-12704:字符集不匹配我猜這是因爲它們是不同的安裝或其他東西。 – OscarRyz 2009-08-25 00:40:37

+0

埃姆好我知道我不能從只有數字和日期列獲得該錯誤消息。事實證明,我有更多的列多:( – OscarRyz 2009-08-25 00:44:52

相關問題