Oracle データベース テーブルの列の内容を SQL Server データベースの別の列にコピーしたいと考えています。転送する行が 300 万行以上あります。この種の問題を解決する簡単な方法はありますか。Oracle テーブルには約 400 万行あるため、Oracle テーブルのすべてのコンテンツが転送されるわけではありません。
2 に答える
まあ、あなたが 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 で実行できますが、それほど簡単ではありません。これは、フォーマットとエクスポート/インポートの不一致が発生しやすい傾向があります