2011-08-15 16 views
9

SQL ServerデータベースからMYSQLデータベースへの定数および連続ベースのバルクデータの転送を試みています。私はSQL ServerのSSMSのレプリケーションを使用したかったのですが、これは明らかにSQL ServerからOracleまたはIBM DB2への接続のみです。現在、私たちはSSISを使用してデータを変換し、それをコピーされたMYSQLデータベースの一時的な場所にプッシュします。私は、データを転送する最速の方法を希望し、いくつかの方法を複雑にしています。SQL ServerからMySQLへのデータ転送

私は、ほとんどの時間の問題を解決すると確信していますが、私たちは将来的に時間の問題にぶつからないようにしたいと考えています。 MYSQL ODBCドライバを使用してSQL ServerとMYSQLの間で通信するリンクサーバーをセットアップしました。これは非常に遅いようです。私はMicrosoftのODBCドライバも使用するコードをいくつか持っていますが、パフォーマンスを測ることはできません。誰もが、これらの2つのデータベース間で通信する明快な方法を知っていますか?私は、OleDB層と通信するMYSQLのデータプロバイダを研究しています。私は何を信じるべきか、どんな考え方に向かっていくのか、あまりにも確かではありませんか?

答えて

1

これまでJavaでjdbc-odbcブリッジを使用していましたが、ODBCによるパフォーマンスはあまり良くありません。私はあなたが以下のようにシンプルなGroovyスクリプトにドロップすることができ、純粋なJavaドライバであるhttp://jtds.sourceforge.net/のようなものを見てお勧めします:

import groovy.sql.Sql 
sql = Sql.newInstance('jdbc:jtds:sqlserver://serverName/dbName-CLASS;domain=domainName',  
'username', 'password', 'net.sourceforge.jtds.jdbc.Driver') 
sql.eachRow('select * from tableName') { 
    println "$it.id -- ${it.firstName} --" 
    // probably write to mysql connection here or write to file, compress, transfer, load 
} 

次のパフォーマンス番号はあなたにそれを実行する方法について、感じを与える: http://jtds.sourceforge.net/benchTest.html

データをmysqlダンプファイル形式にダンプし、行ごとに書き込むのではなくmysql loaddataを使用すると、パフォーマンス上の利点がいくつか見受けられます。 infileを読み込み、アトミックテーブルスワップのような処理を行うと、MySQLは大きなデータセットに対していくつかの重要なパフォーマンス改善を行います。

大規模なデータファイルをあるシステムから別のシステムに素早くロードするために、このようなものを使用します。これは、mysqlにデータをロードする最も速いメカニズムです。しかし、実際に行単位で行が移動された行を追跡するためにいくつかのテーブルとgroovyで行う単純なループかもしれません。

MySQLの>

select * from table into outfile 'tablename.dat'; 
myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename' 
load data infile 'tablename.dat' into table tablename; 
myisamchk -rq /data/mysql/schema_name/tablename 
flush tables; 
exit; 

RMは「

をtablename.dat
1

SQLデータを転送するための最良の方法は、ある言語でSQLをダンプしてから、変換ソフトウェアツール(またはperlスクリプト)を使用してSQLダンプを変換することですMSSQLからMySQLへあなたが興味を持っている可能性のあるコンバーターについての質問をthisに送ってください。

0

私たちはssisのmysql用にado.netドライバを使用しましたが、かなりの成功を収めました。基本的に、統合サービスがインストールされたマシンにドライバをインストールし、入札を再開すると、ADSL接続マネージャを作成するときにドライバリストに表示されます。

複製に関しては、正確に何を達成しようとしていますか?

変更を監視する場合は、変化の遅いタイプ1(データウェアハウスの用語ですが、同じプリンシパルが適用されます)として扱います。新しいレコードを挿入し、変更されたレコードを更新します。

新しいレコードのみに興味があり、以前にロードされたデータを更新する予定がない場合は、増分ロード戦略を試してみてください。レコードを挿入する場所は、source.id> max(destination.id)です。

パッケージをテストした後、SQL Serverエージェントでジョブをスケジュールしてx分ごとにパッケージを実行します。

0

次も試してみてください。 http://kofler.info/english/mssql2mysql/

私はこれをもっと長い時間前に試してみました。それは私のために働いていました。しかし、私はあなたにそれをお勧めしません。 本当の問題は何ですか、何をしようとしていますか? LinuxからMSSQL DB接続を取得しないでください。