0

PK を持たないデータベースにテーブル ( A ) があり、約 300 k のレコードがあります。

他のデータベースにそのテーブルのサブセット コピー ( B ) があります。これには 50k しかなく、特定の時間範囲 (7 月のデータ) のバックアップが含まれています。

もちろん、既存のレコードを複製せずに、欠落しているレコードをテーブル 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あると言いますが、データセット全体にいくつあるかはわかりません。もう1つのオプションは、コピーの現在の内容を削除し、元のテーブルの内容全体を挿入することです。

完全なデータセットが大きい場合は、ハッシュを使用できますが、それでもデータセット全体をDBリンク全体にドラッグして、ローカルデータベースにハッシュを適用しようとするのではないかと思います。

于 2009-08-25T00:19:43.633 に答える
1

テーブルに重複する行が存在しない限り、一意または主キーをすべての列に適用できます。キー/インデックスのオーバーヘッドが大きすぎて維持できない場合は、アプリケーションでデータベースにクエリを実行して存在するかどうかを確認し、存在しない場合にのみ挿入を実行することもできます

于 2009-08-24T23:01:06.983 に答える