2010-12-03 5 views
1

チャンクであるデータベースから別のデータベースに大量のデータを移動:データを移動するための効率的な方法だろう何 私はこのようになりますテーブル内のデータの少なくとも1200万行を持つテーブルがある

Id (varchar(10) | Image (varbinary(max) 
---------------- ------------------------- 
X123456789  | 0x.... 
1121132121  | 0x.... 
JF13232131  | 0x.... 

このテーブルからチャンク内の別のテーブルに移動します。 私はこれを行うための簡単な.netコンソールアプリケーションを書いています。私は一度に1200万の行を読み込もうとすると、アプリケーションがクラッシュする恐れがあります。任意のヘルプ

補遺#1の

ありがとう:ソースDBは、Oracleで、宛先DBには、SQL Serverの

追補#2:私も

をJPEGするTIFFから画像データを変換しています
+0

このポスターは、データのコピーに関するものではなく、全体的な虚偽の表現であることに注意してください。バイナリデータはTIFFであり、ターゲットデータベースにJPEGとして書き込まなければならない。したがって、これはデータ転送の問題ではありません。 – TomTom

答えて

2

SSISを使用する代わりにツール。 「最初のプル後にデータを変換/変換する」ために、SSISを使用できないと考えています。どのような変換を適用したいと思っていますが、SSISではできないと思いますか?私はSSISが多くのことをすることができることを意味します。 Find out more

独自のツールを使用する方が、自分で作成するよりも効率的です。もう1つは、テーブル全体を1回の操作で移行することは、データの破損やデータの損失を避けるという点で、より安全な方法です。


「私は、JPEGファイルにTIFFを から画像を変換しています。SSISは私のためにこれを行うことができますか?」

これはかなり特殊な要件であり、SSISが組み込みとして持つと期待しているものではありません。しかし、SSISはcustom transformationsをサポートしているので、イメージを変換するコンポーネントを書くことができます。

+0

イメージをtiffからjpegに変換しています。 SSISは私のためにこれを行うことができますか? – zSynopsis

+0

いいえ。しかし、あなたのスピードの問題は、読んだりデータを書いているのではありません.tifff/jpegの記録はあなたのCPUを燃やします。問題を虚偽で表現するのはいい点です。 – TomTom

2

まず、.NETアプリケーション経由で12Mの行を移動しようとはしません。私はこれを行うためにSSIS(SQL Server統合サービス)のようなツールを使用します。 SSISは非常に高速で、トランザクションをサポートし、高度なデータ変換をサポートします。 SSISはこのようなことをするように設計されています。

ただし、.NETアプリケーション内でこれを行う必要がある場合。おそらく、一度に1K〜5K行のようなものを読んでターゲットデータベースに挿入し、次の1Kを5K行などにすることになります。しかし、これはSSISのようなツールよりもはるかに遅くなります。

+0

2フィールドしか持たないので、一度に1kを5k行に引き上げるにはどうすればよいですか?これは実際に実装する方法を理解していない部分です – zSynopsis

+0

私は初期の後にデータを変換/なぜ私はssisを使用していないのですか。 – zSynopsis

+0

@zSysop - 各行にある列の数はどのように違うのですか?一度に1〜5Kの行を移動します。各行には2列のデータがあります。 –

2

SqlBulkCopy classをご覧になると、テーブル全体をワンショットで移動することができます。

+0

これは、ターゲットがSQL Serverであれば、これは良いことです。質問はオラクルのタグ付けされているので、明確ではありません。 –

0

あなたはBCPを見ましたか?私たちも同様の問題を抱えており、私たちにとってはうまくいきました。あなたが手にローリングしているので、あなたがチャンクでデータを移動する必要があると思う「チャンク内の別の のテーブルにこのテーブルから 移動データへの効率的な方法だろうどのような」

1

問題は、.NETでOracleデータベースに接続し、行ごとにデータを読み取るときにDataReaderを使用することです。次に、各行を処理して画像変換を行い、新しいデータをSql Serverデータベースに挿入するだけです。今、これはすばらしいことではないと思いますが、データがOracleからストリーミングされてからSQL Serverに直接プッシュされるとクラッシュする理由はありません。

これを少し速くしたいのであれば、複数のスレッドで変換を行いSql Serverに挿入するのは難しくありません。

関連する問題