0

What is the standard way of copying data from one oracle database to another.

1) Read data from source table and copy to temp table on destination using configuration( i.e. there are more than 1 table and each table has separate temp table) 2) Right now there is no clob data, but in future clob data might be used. 3) Read everything to memory(if large data read in chunks)

Should not use Oracle links Should not use files Code should be only using C# but not any database procedures.

4

1 に答える 1

1

私がこれを行うために使用した 1 つの方法は、ソース データベースで DataReader を使用し、ターゲット データベースで挿入を実行することです (確実にバインド パラメーターを使用します)。

DataReader は、テーブル内を移動するときにメモリをあまり使用しない点で優れていることに注意してください (デフォルトでは、Fast Forward、Read Only カーソルを使用すると思います)。これは、特定の時点で少量のデータのみがメモリに保持されることを意味します。

注意すべき点は次のとおりです。

関係

リレーションシップを持つデータを扱う場合は、それに対処する必要があります。これに対処するために私が見た2つの方法があります:

  1. コピーを実行する前にターゲット データベース内のリレーションシップを一時的に削除し、コピー後に再作成します。
  2. リレーションシップが正しく機能するように、正しい順序でデータをコピーします (これは通常、かなり困難/非効率的です)。

自動生成された ID 値

これらの列は通常、特定のテーブルの自動インクリメント機能を無効にし、ID 挿入を許可することで処理されます (SQL Server の用語を使用しているため、Oracle での動作を思い出せません)。

取引

大量のデータを移動する場合、トランザクションは高価になります。

再現性・対象データの削除

あなたが私たちよりもはるかに優れていない限り、おそらくこれを複数回実行する必要があります (少なくとも開発中)。つまり、ターゲット データを削除する方法が必要になる場合があります。

プラットフォーム固有のメソッド

SQL Server には、非常に高速な一括挿入を実行する方法があります (参照整合性チェックなどのささいなことを放棄することによって)。Oracle ツールセット内に同様の機能がある可能性があります。

テーブル/列のメタデータ

私はまだ Oracle でこれを行う必要はありませんでしたが、ここで言及されているビューを使用して、テーブルと列のメタデータを取得できるようです。

于 2011-02-22T19:43:55.407 に答える