技術課の柏尾です。
前回の「準備編」に続き、今回は「AWS スキーマ移行ツール(AWS Schema Conversion Tool)」を利用したスキーマ変更を試してみたいと思います。
事前準備
事前設定でJDBCドライバの設定をしていない場合は、「Global Settings」から「Oracle Driver Path」「MySQL Driver Path」にダウンロードした、それぞれのJDBCドライバへのパスを入力します。
AWS スキーマ移行ツール(AWS Schema Conversion Tool)によるスキーマ変換
AWS スキーマ変換ツール(以下SCT)を起動し、「File」→「New Project」 を選択します。
「New Project」で「DMSDemoProject」という名前でプロジェクトを作成します。
ステップ 5: AWS スキーマ変換ツール (AWS SCT) を使用して、Oracle スキーマを Aurora MySQL に変換する
https://docs.aws.amazon.com/ja_jp/dms/latest/sbs/CHAP_RDSOracle2Aurora.Steps.ConvertSchema.html
「Source Database Engine」には「Oracle」、「Target Database Engine」には「Amazon Aurora(MySQL combatible)」を選択します。
「Connect to Oracle」で接続情報を入力します。
「Server name」の部分は、Stack作成時に「出力」タブで確認した「OracleJDBCConnectionString」の値を使用します。
その際、「jdbc:oracle:thin:@」と「:1521:ORCL」の部分を削除し、「xxxxxxxxxxxxxxx.xxxxxxxxxxxx.<リージョン名>.rds.amazonaws.com」の部分のみを入力します。
「Test Connection」で接続ができればOKです。
「OK」ボタンでダイアログボックスを閉じると、Oracle DB インスタンスへの接続が開始され、インスタンス上の情報が表示されます。
ここで「HR」スキーマのみを選択します。
「Connect to Amazon Aurora」を選択します。 「Server name」の部分は、Stack作成時に「出力」タブで確認した「AuroraJDBCConnectionString」の値を使用します。
その際、「jdbc:mysql://」と「:3306」を削除し、サーバー名「xxxxxxxxxxx.cluster-xxxxxxxxxxxx.<リージョン名>.rds.amazonaws.com」のみを使用します。
「Test Connection」で接続ができればOKです。
「OK」ボタンでダイアログボックスを閉じると、Amazon Aurora MySQL DB インスタンスへの接続が開始されます。
HR スキーマを右クリックし、[Create Report] を選択します。
下記のようなレポートが生成されます。
レポートには、AWS SCTで変換可能なオブジェクトのタイプや、移行に伴って発生する可能性がある問題、およびそれら問題の解決策についてのレポートがあります。
またこのレポートは下記のようにPDFとして出力することも可能です。
チュートリアルの方では、
・Oracleのチェック制約が、MySQLではサポートされていない
・Oracleのシーケンスオブジェクトが、MySQLではサポートされていない
という2点がレポートされていますが、今回私が実行した際には、下記のように「チェック制約」のみレポートされ、「シーケンス」に関する問題はレポートされませんでした。
Aurora側を見てみると、「AWS Oracle Extensions」→「Database sequence emulation」というものがあり、その機能によりOracleシーケンスの問題がレポートされなかったようです。
※ AWSサポートに、この「Database sequence emulation」というものついて問い合わせて見たところ、
「現状では、Sequence emulators がシーケンスとして正しく動作していないように見受けられましたため、MySQL ネイティブの機能である auto_increment をご利用頂くことを推奨します。」
との回答がありました。
実際の移行では、MySQL側は auto_increment の機能を利用した方が良さそうですが、今回はDMSによるデータ移行の流れを把握するだけなのでそのまま進めたいと思います。
「HR」スキーマを右クリックし、「Convert Schema」を選択します。
確認メッセージで、「Yes」を選択すると、スキーマがターゲットデータベース形式に変換されます。
Aurora側の「HR」スキーマを選択し、「Apply to database」を選択してスキーマスクリプトをAuroraインスタンスに適用します。
Aurora側の「HR」スキーマを選択し、「Refresh from Database」を選択すると、データベーススキーマが変換されてソース(Oracle)からターゲット(Aurora)へインポートされます。
スキーマ変換結果をチェックする
スキーマ変換結果をチェックするため、SQL Workbench/J を使用して、Aurora MySQLに接続し、データベース上のオブジェクトを確認します。
詳細な確認手順は下記を参照してください。
「auto_increment」 オプションを有効にし、Oracleのシーケンス機能を代替する方法も下記に記載があります。
ステップ 6: スキーマ変換を検証する
https://docs.aws.amazon.com/ja_jp/dms/latest/sbs/CHAP_RDSOracle2Aurora.Steps.ValidateSchemaConversion.html
まとめ
ここまでで、スキーマの変換およびターゲットデータベースへのインポートが完了しました。
「AWS スキーマ移行ツール(AWS Schema Conversion Tool)」を利用することで、DB間のスキーマ変換のチェックや、問題の検出、実際のスキーマ変換ができることがわかりました。
次回は「AWS DMS レプリケーションインスタンス」を作成し、実際のデータをOracleからAuroraに移行させてみたいと思います。