OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6,@tktk2712,@ritokuna)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。
移行するサービス:Amazon RDS for MySQL
今回、移行対象とするのはAmazon RDS for MySQLです。
SQL DeveloperのオラクルDBへの「移行ウィザード」を用いて、Amazon RDS for MySQLをAutonomous Transaction Processing(以下、ATP)に移行する手順を解説します。
SQL Developerでは、MySQL Database以外にも、Microsoft SQL Server、Sybase Adaptive Server、IBM DB2、Teradataなどの3rd PartyのソースDBから、Oracle Databaseにスキーマ・オブジェクトおよびデータをコピーする機能が用意されています。また、ソースDBおよび移行先のOracle Databaseいずれも、OCIやAWSなどのパブリック・クラウドのDBサービスもサポートしています。
移行方式
クライアントPCにインストールされたOracle SQL Developerから、インターネット経由でRDS for MySQLおよび、ATPそれぞれに接続し、移行ウィザードに沿って移行します。
前提条件
今回はデータの移行検証を目的としているため、リソースは全てパブリック・アクセスすることを前提としています。本番環境の移行時には、リソースのプライベート接続の考慮、両クラウド間の閉域接続を推奨いたします。AWS-OCI間のVPN接続については下記記事をご参照ください。
【OCI クラウド移行ガイド】 AWSとOCIをVPNで接続してみた
https://qiita.com/yama6/items/c188de191269cb604341
- AWS RDS for MySQLがインターネットからのアクセスが可能(パブリックアクセシビリティを[はい]で構築)となっていること。
- MySQLにサンプルデータベース "world" がリストアされていること。(この処理では、Worldデータベースを移行します。)
- ATPがインターネットからのアクセスが可能(アクセス・タイプ:すべての場所からのセキュア・アクセスを許可)となっていること。
移行手順
- クライアントPCへのSQL Developerのインストール
- MySQL JDBC ドライバーの設定
- 移行リポジトリのデータベース作成と接続の指定
- RDS for MySQLへの接続設定
- [移行ウィザード]移行ウィザードの開始
- [移行ウィザード]リポジトリの指定
- [移行ウィザード]プロジェクトの指定
- [移行ウィザード]ソースデータベースの指定
- [移行ウィザード]取得:移行するスキーマの指定
- [移行ウィザード]変換
- [移行ウィザード]翻訳
- [移行ウィザード]ターゲットデータベース
- [移行ウィザード]データを移動する
- [移行ウィザード]要約
- 移行結果の確認
1. クライアントPCへのSQL Developerのインストール
以下のサイトにアクセスし、クライアントのプラットフォームに適合したSQL Developerのイメージをダウンロードします。
※今回は、”Windows 64-bit with JDK 17 included”を選択しました。
ダウンロード後、zipファイルを解凍し、"sqldeveloper"をクリックします。
ロード完了後、SQL Developerが起動します。
SQL Developerのインストール作業は以上になります。
2. MySQL JDBC ドライバーの設定
RDS for MySQLに接続するため、SQL DeveloperにJDBCドライバーを設定します。
JDBCドライバーのダウンロード
以下のサイトから、SQL Developerをインストールしたプラットフォームに適合するパッケージを選択します。
※今回は、プラットフォームがWindowsなので、"Platform Independent (Architecture Independent), ZIP Archive"を選択しました。
ダウンロード後、zipを解凍します。
MySQL JDBC ドライバーのプリファレンス設定
SQL Developerのメニューから、[ツール]→[プリファレンス]を選択します。
[データベース]-> [サード・パーティJDBCドライバ]を選択し、[エントリー追加]にて、上記展開後のファイルから、.jarをパスとしてエントリーします。
※今回は、"mysql-connector-j-9.2.0.jar"
確認
MySQLのJDBCドライバーが正しく設定されたことを確認します。
SQL Developerの接続ペイン内の"+"アイコンをクリックし、[新規データベース接続...]を選択します。
MySQLのJBDCドライバーが正しく設定されると、接続ダイアログの"データベースのタイプ"で、MySQLの選択が可能になります。
ドライバーの設定作業は以上になります。
ここから、RDS for MySQLおよび、ATPに接続し、移行の準備を進めます。
3. 移行リポジトリのデータベース作成と接続の指定
移行先のATPへの接続を作成
SQL Developerの接続ペイン内の"+"アイコンをクリックし、[新規データベース接続...]を選択します。
データベース接続の作成/選択ウィンドウで、以下を設定します。
- Name:接続名称(任意の名称)
- データベースのタイプ:”Oracle”
- ユーザー名:管理アカウント名称
- パスワード:管理アカウントのパスワード
- 接続タイプ:”クラウド・ウォレット”
- 構成ファイル:ATP接続用のWalletファイル(.zip)
上記入力後、"テスト(T)"を実行します。
ウィンドウ左下のステータスが"成功"と表示されたら、"接続(O)"を実行します。
接続に成功すると、接続ペインの"Oracle接続"下に、ATPの接続名が表示されます。
これで、移行先のATPへの接続ができました。
移行リポジトリの作成
次に、移行リポジトリを作成します。移行リポジトリは、SQL Developer が移行のメタデータを管理するために使用するスキーマ オブジェクトのコレクションです。今回は同じATP上に作成します。
まず、MIGRATIONS という名前の Oracle ユーザーを作成します。
SQL Developerの接続ペインで、移行先のATP接続の[+]をクリックし展開します。[他のユーザー]を右クリックし、[ユーザーの作成]を選択します。
”ユーザーの作成”ウィンドウにて、以下を設定します。
- ユーザー名:MIGRATIONS
- パスワード:任意のパスワード
- デフォルト表領域:DATA
- 一時表領域:TEMP
- RESOURCE:”付与済”および"管理"
※”管理”は、マルチ・スキーマ移行する場合に必要となります。
次に、以下のシステム権限を設定します。
- CREATE SESSION:”付与済”
- CREATE VIEW:”付与済”
- CREATE MATERIALIZED VIEW:”付与済”
- CREATE ROLE:”付与済”および”管理オプション”
- CREATE USER:”付与済”および”管理オプション”
- ALTER ANY TRIGGER:”付与済”および”管理オプション”
※CREATE ROLE、CREATE USER、ALTER ANY TRIGGERは、マルチ・スキーマ移行する場合に必要となります。
そして、デフォルト表領域に指定したDATAへの容量を割り当てます。今回は無制限としています。
"適用(A)"を実行し、”成功"のダイアログが表示されたらユーザーの作成は完了です。
移行リポジトリへの接続の作成
作成されたMIGRATIONSスキーマへの接続を作成します。
先程のATPへの接続設定の時と同様に、接続ペイン左上の[+]をクリックし、"新規データベース接続..."を選択します。
”データベース接続の作成/選択"ウィンドウにて、以下を設定します。
- Name:Migration_Repository
- データベースのタイプ:”Oracle”
- ユーザー名:MIGRATIONS
- パスワード:MIHGRATIONSのパスワード
- 接続タイプ:”クラウド・ウォレット”
- 構成ファイル:ATP接続用のWalletファイル(.zip)
"テスト(T)" -> "接続(O)"を実行します。
接続ペインに"Migration_Repository"という新たな接続が表示されたことを確認します。
移行リポジトリの関連付け
作成したMigration_Repositoryを移行リポジトリに関連付けします。
接続ペインの"Migration_Repository"を右クリックし、[移行リポジトリ(P)]->[移行リポジトリの関連付け(A)]を選択します。
リポジトリが正常に作成されたメッセージを確認し、ダイアログを閉じます。
以上で、移行リポジトリのデータベース作成と接続の指定が完了しました。
次は、SQL Developerから移行元のRDS for MySQLデータベースへの接続設定を行います・
4. RDS for MySQLへの接続設定
SQL Developerの接続ペインから、”新規データベース接続...”を選択し、”データベース接続の作成/選択”ウィンドウを表示します。
以下の設定でMySQLデータベースへの接続を作成します。
- Name:RDS4MySQLonAWS
- データベースのタイプ:”MySQL”
- ユーザー名:MySQLの管理アカウント
- パスワード:MySQLの管理アカウントのパスワード
- ホスト名:RDS for MySQLデータベースのエンドポイント(URL)
- ポート:3306
※なお、ホスト名、ポートについては、AWSのコンソールから以下のように確認できます。
[テスト(T)]->[接続]を実行し、成功すると、接続ペインのMySQL接続に”RDS4MySQLonAWS”が表示されます。
以上で、RDS for MySQLへの接続設定はできました。
ここから、移行ウィザードでのデータベース移行のステップに入ります。
5. [移行ウィザード]移行ウィザードの開始
移行ウィザードを開始するには、いくつかの方法があります。ここでは、以下2通りの方法をご紹介します。
a) 接続ペインのメニューから開始する方法
接続ペインの移行元のMySQLデータベース接続(ここでは、”RDS4MySQLonRDS”)を右クリックし、"Oracleへの移行"を選択します。
b) メニューから開始する方法
SQL Developerのメニューの[ツール(T)]->[移行(I)]->[移行(M)...]を選択します。
移行ウィザードの画面が立ち上がります。[次へ(N)>]をクリックして移行ステップを進めます。
6. [移行ウィザード]リポジトリの指定
このステップでは、移行リポジトリを指定します。今回は、先ほど作成した”Migration_Repository”を接続として指定します。
未接続の状態の場合、ユーザー名およびパスワードの入力が必要となります。
[OK]をクリックし、接続に成功したら、[次へ(N) >]をクリックして次の移行ステップに進みます。
7. [移行ウィザード]プロジェクトの指定
続いて、移行プロジェクトの名称を指定します。移行ステップ全体をプロジェクトとして管理することができ、リトライや部分的な修正が簡単に行えます。
名称は任意での設定が可能です。ここでは、”RDS4MySQL2ATP”としています。
また、出力ディレクトリを指定します。
出力ディレクトリには、移行ウィザードによって生成されたすべてのスクリプトが配置されます。
入力後、[次へ(N) >]をクリックして次の移行ステップに進みます。
8. [移行ウィザード]ソースデータベースの指定
ここで、移行元のRDS for MySQLデータベースを指定します。
今回は、あらかじめ作成した、"RDS4MySQLonAWS”を選択します。
なお、モードの選択肢にオンライン(O)とオフライン(L)の2つがあります。
今回はオンライン(O)を指定します。
オンラインの場合、移行元のデータベースに接続しオンライン状態で移行が実行されます。
オフラインの場合、事前に作成されたオフライン・キャプチャ・ソース・ファイル(.ocp ファイル)を読み込んで移行を実行します。
オフライン・キャプチャ・ソース・ファイルは、SQL Developerメニューの[ツール]->[移行]->[データベース取得スクリプトの作成]で作成します。
設定後、[次へ(N) >]をクリックして次の移行ステップに進みます。
9. [移行ウィザード]取得:移行するスキーマの指定
続いて、移行対象とするスキーマを選定します。
この画面では、移行元のMySQL内のスキーマが表示されます。中央の矢印アイコンで移行対象のスキーマを指定します。
設定後、[次へ(N) >]をクリックして次の移行ステップに進みます。
10. [移行ウィザード]変換
ここでは、移行元のDB(今回はMySQL)と移行先のOracleDBのデータ型の変換ルールを設定します。SQL Developerは、対象のDBに対応したデフォルトの変換ルールを表示します。
変換するスキーマの特性や移行計画に沿って、ルールの追加、編集、削除も可能です。
今回は、デフォルトのままの設定としています。
設定後、[次へ(N) >]をクリックして次の移行ステップに進みます。
11. [移行ウィザード]翻訳
次に、翻訳(変換)するSQLオブジェクトを選定します。選定方法は、ひとつ前の変換のステップと同じです。
今回はすべてのSQLオブジェクトを翻訳(変換)対象に指定しています。(デフォルト設定のまま)
設定後、[次へ(N) >]をクリックして次の移行ステップに進みます。
12. [移行ウィザード]ターゲットデータベース
移行先のOracleデータベースを指定します。
今回は、あらかじめ作成した、"RDS4MySQL_migration”を選択します。
なお、ソースデータベースの場合と同様に、モードの選択肢にオンライン(O)とオフライン(L)の2つがあります。
今回はオンライン(O)を指定します。
オンラインの場合、移行先のデータベースに接続しオンライン状態で移行が実行されます。
オフラインの場合、SQL Developer によってスクリプトが生成され、後でそれらのスクリプトを実行して移行を実行する必要があります。
設定後、[次へ(N) >]をクリックして次の移行ステップに進みます。
13. [移行ウィザード]データを移動する
ここでは、移行対象のスキーマのテーブル・データの移行方式を選定します。
ここでも、オンライン(O)とオフライン(L)の2つのモードが選択できます。
今回は、オンラインを指定します。
ソース(S)に移行元のRDS for MySQLの接続名、ターゲット(T)に移行先のATPの接続名がセットされていることを確認します。
確認後、[次へ(N) >]をクリックします。
オンラインの場合、テーブル・データの移動がウィザード内で同時実行されます。
オフラインの場合、テーブル・データ移動のためのスクリプトが生成されます。生成されたスクリプトを実行しない限り、テーブル・データの移動は実行されません。
移行先のOracleDBへの接続に必要なユーザー名とパスワードを入力し、[OK]をクリックして、次の移行ステップに進みます。
14. [移行ウィザード]要約
このステップでは、ここまで実施した、プロジェクト、リポジトリ、アクションの仕様の設定内容が、展開可能なツリー形式で確認できます。
変更が必要な場合は、関連するウィザード・ページに戻って実施します。
確認後、[終了(F)]をクリックし、移行処理を開始・実行します。
必要に応じて、移行処理中の[バックグラウンドで実行]あるいは、[タスクの取消]が可能です。
15. 移行結果の確認
移行処理が正常に完了すると、以下のメッセージ・ダイアログが表示されます。
また、実行された移行作業の内容は、SQL Developer画面左下の”移動”ペインにプロジェクト単位の履歴データとして確認できます。
また、対象のプロジェクトをクリックすると、SQL Developer画面右にプロジェクトでの移行結果の情報が表示されます。
移行結果の各タブ毎の表示内容
データベース・オブジェクトそれぞれの移行結果に関する、詳細な情報を確認することができます。変換などの問題を確認することで、移行先のOracleでの必要な対応も見えてきます。
以上で、SQL Developerの移行ウィザードによるRDS for MySQLからATPへの移行処理は完了です。
テーブル・データの比較
SQL DeveloperのSQLワークシート([ツール(T)]->[SQLワークシート(W)])を使って、移行元のRDS for MySQLおよび、移行先のATPのworldスキーマの各テーブル・データを比較します。
ここでは、world.cityという名称のテーブル・データを例に実行結果を示します。
双方で同じSQLを実行します。
select * from world.city order by ID
select * from world.city order by ID
同じ結果が得られることが確認できました。
まとめ
今回の検証で、SQL Developerの「移行ウィザード」が、パブリック・クラウドのAWSおよびOCIそれぞれのDB(RDS fr MySQLおよび、ATP)に対しても有効に動作することが確認できました。
なお、SQL Developerのマニュアルは、一般的な手順紹介の記述となっており、実際の動作確認に際しては、AWS RDSおよびOCI ATPそれぞれの環境への手順の”解釈(落とし込み)”が必要となりました。
実際に検証をしてみたところ、正しい”解釈”さえできてしまえば、意味不明なエラーに悩まされるような事もなく、素直に動作してくれることが確認できました。
今回検証した「移行ウィザード」では、移行に必要なメタデータ等を格納するリポジトリDBを媒介した、DBオブジェクトおよびテーブル・データの移行を一括で実行できます。また、移行処理の結果を詳細に確認できるため、移行後の修正ポイントを簡単に見つけることができるので、精度の高いデータベースの移行作業ができることが期待できます。
そして、SQLや各DBコマンドの入力も不要で、ウィザードのステップを”プロジェクト”として保存できるため、再現性やリトライ時の修正などが容易にできることから、実プロジェクトやPoCなどの技術検証などでも、高い生産性を実現できるツールであると感じました。
今回は検証環境の制約もあり、パブリック・サブネット上のDBに直接インターネット経由でアクセスする環境での検証となりましたが、VPNやSSHトンネルによる踏み台サーバー(Bastion)経由でのアクセス環境での動作検証を試してみることで、より実践的な手法を見つけることにも繋がるかと思います。
補足情報
-
検証実施時期:2025年1月
-
RDS for MySQLデータベース 詳細
・AWS Region: Asia Pacific(Tokyo) - ap-northeast-1
・Engine Version:8.0.39
・License model:General Public License
・Instance class:db.t4g.micro
・vCPU:2
・RAM:1GB
・Storage type:General Purpose SSD (gp2)
・Storage size:20 GiB -
OCI Autonomous Transaction Processing(ATP)データベース 詳細
・OCI Region: Japan East(Tokyo)
・DB Version:23ai
・ECPU:2
・RAM:1GB
・Storage size:200GB -
SQL Developer 詳細
・OS:Windows11
・Version:24.3.1.347.1826
・MySQL JDBC Driver:MySQL Connector/J 9.2.0
参考文献
3 SQL Developer: サードパーティデータベースの移行
Oracle SQL Developer Migrations:はじめの一歩
日付:2011年3月
このドキュメントは2011年3月時点の記載となっており、メニュー名称、ツールのバージョンなど、当時の情報レベルの記載内容となっています。ご留意ください。
SQL Developerで様々なDBに接続する方法