1

Oracle データベース テーブルの列の内容を SQL Server データベースの別の列にコピーしたいと考えています。転送する行が 300 万行以上あります。この種の問題を解決する簡単な方法はありますか。Oracle テーブルには約 400 万行あるため、Oracle テーブルのすべてのコンテンツが転送されるわけではありません。

4

2 に答える 2

1

まあ、あなたが SQL/Server を意味すると仮定すると、私は SQL Server Integration Services (SSIS) を使用します。VARCHAR2主なヒントの 1 つは、SQL/Server で Oracle列 (ある場合) がマップされるインデックスなしのテーブルにデータをステージングすることですNVARCHAR。これにより、SSIS でのデータ変換手順を回避できます。ステージング テーブルから、それらを正しい宛先テーブルに配置し、後でステージング テーブルを取り除くことができます。これが私がやった方法です。

データを MS/Access データベースにインポートし、SQL/Server インポート/エクスポート ウィザードを使用できます。これは非常に迅速で、Ms/Access が手元にある場合はおそらく最良のオプションです。

SQL/Server でリンク サーバーを作成し、そこからデータを単純にデータベースに吸い込むことができます。このアプローチではさまざまな結果が得られました。それは機能しますが、時々不安定になることがあることがわかりました。これは、Oracle Linked Server 固有の弱点ではなく、インフラストラクチャに関係している可能性があります。問題が発生した場合は、データを論理的に分割し、SQL/Server に断片的にプルすることができます。リンクサーバーは、機能させることができれば非常にエレガントです。OPENQUERY()たとえば、Oracle からデータを取得するために使用します。

Select * Into SqlServerTableName 
  From OpenQuery(Oracle_Linked_Server,'Select * from OracleTable
                                        Where etc');

データをフラット (または CSV) ファイルにエクスポートしてインポートすることもできます。これも SSIS で実行できますが、それほど簡単ではありません。これは、フォーマットとエクスポート/インポートの不一致が発生しやすい傾向があります

于 2012-12-18T20:27:43.907 に答える
0

Ciaránの回答の最後の文を明確にするために。私はこのようにしていた:

  • sqlplus と SPOOL を使用して Oracle テーブルからデータをエクスポートする ( sample );
  • MS SQL への高速ロードには bcp ユーティリティを使用します (ドキュメント)。
于 2012-12-19T11:18:19.733 に答える