re:invent で発表のあった、AWS Database Migration Service の中で紹介されていた、AWS Schema Conversion Tool を SQL Server / MySQL 間で試してみました。
発表については、以下が参考になります。
【AWS発表】プレビュー:AWS Database Migration Service
「現地ラスベガスよりお届け!re:Invent速報」の資料アップロード
[速報]「AWS Database Migration Service」を発表。最小のダウンタイムでオンプレミスからクラウドへデータベース移行。AWS re:Invent 2015
公式のドキュメントについては、What Is the AWS Schema Conversion Tool? から。
ツールについては、AWS Database Migration Service Preview を登録することによってダウンロードをすることができます。
本ツールですが接続元として、SQL Server / Oracle、接続先として MySQL / Amazon Aurora を選択することができますので、SQL Server / Oracle からのスキーマ移行で使用するツールになるかと。
# MySQL は AWS 上のものでなく、オンプレミスのものでもテストすることができます。
ツールでは JDBC 経由で各サーバーに接続をしますので、以下から SQL Server と MySQL 用の JDBC ドライバーをダウンロードしておきます。
Microsoft JDBC Driver 4.2 for SQL Server、Microsoft JDBC Driver 4.1 for SQL Server、および Microsoft JDBC Driver 4.0 for SQL Server
MySQL Connectors
ダウンロードが終了したら Schema Conversion Tool の Settings から JDBC ドライバーの設定を行います。
JDBC ドライバーの設定が完了すれば、SQL Server / MySQL に接続をすることができます。
SQL Server については Windows 認証に対応していないようなので、接続先のインスタンスでは SQL Server 認証が有効になってる必要があります。
JDBC で接続できる準備ができたら新しいプロジェクトを作成し、
「Connect to SQL Server」「Connect to MySQL」から各サーバーに接続をします。
接続が完了すると以下のように、移行元 / 移行先が表示されます。
SQL Server からのスキーマ移行ですが、DB 単位ではなく、スキーマ単位での移行となります。
移行対象のスキーマ選択して、「Convert schema」を選択することで、MySQL のスキーマを作成することができます。
AdventureWorks2014 の dbo のスキーマを移行した場合、AdventureWorks2014_dbo というスキーマとして移行が行われます。
移行に問題があるオブジェクトがあるかどうかは、「Create Report」から確認することができます。
全体としてどれだけ互換性がないかは「Summary」タブから確認することができます。
AdventureWorks の場合は、大体 70% 程度が移行できるようでした。
移行できないオブジェクトを修正するための想定の作業日時も表示されるようです。
(時間が妥当かどうかがわからない、微妙なSIer 泣かせの表示)
互換性については SQL Server to MySQL Supported Schema Conversion でも情報が公開されていますのでこちらを見てもよいかと。
移行対象としては、
- Index
- View
- Trigger
- Constraint
- Column
- Table
- Schema
- Procedure
等を移行できるようですね。
移行対象の確認ができたら、MySQL のペインで「Apply to database」を実行することで、MySQL に実際のデータベースが作成されます。
データベースの移行については、MySQL Workbench の Migration Wizard を使うことでも実行できますが、こちらでは、テーブルは移行できますが、ビュー/関数/ストアドプロシージャといったオブジェクトは移行できないようでしたので、移行できる範囲は AWS Schema Conversion Tool の方が多いようでした。