OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6,@tktk2712,@ritokuna)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。
移行するサービス:Amazon RDS for SQL Server
今回の移行対象は Amazon RDS for SQL Serverです。
Oracle SQL Developerの移行機能を使って、Amazon RDS for SQL Server をAutonomous Transaction Processing(ATP)に移行する手順をまとめます。
移行方式
OCI Compute VM上のOracle SQL Developerから Amazon RDS for SQL Server(以下SQL Server)、および Autonomous Transaction Processing (以下ATP)に接続し、SQL Developer の移行ウィザードに従ってデータを移行します。
Oracle SQL Developerは、SQL*Plusをグラフィカルにしたものです。データベースに接続して、データの参照、作成、編集と削除、SQL文およびスクリプトの実行、PL/SQLコードの編集とデバッグ、データの操作とエクスポートなどの基本的なタスクを簡単に行うことができます。
Microsoft SQL Serverの他に、MySQL、Sybase Adaptive Server、IBM DB2など特定のサード・パーティ・データベースのスキーマに接続し、Oracle Databaseに移行することができます。
前提条件
今回はデータの移行検証を目的としているため、リソースは全てパブリックアクセスすることを前提とします。
本番環境の移行時には、リソースのプライベート接続考慮、両クラウド間の閉域接続を推奨いたします。AWS-OCI間のVPN接続については下記記事をご参照ください。
【OCI クラウド移行ガイド】 AWSとOCIをVPNで接続してみた
https://qiita.com/yama6/items/c188de191269cb604341
- SQL Server がインターネットからのアクセス可能(パブリックアクセス[はい]で構築)
- SQL Server にサンプルデータベースをリストアされている(今回は、Microsoft 公式にあるAventureWorks というサンプルデータベースを移行します)
- ATPがインターネットからのアクセス可能(アクセス・タイプ:すべての場所からのセキュア・アクセスを許可)
移行手順
1. SQL Developer環境準備
1−1. Windows VM作成
1-2. SQL Developerインストール
1-3. SQL Server JDBC ドライバー設定
2. 移行元SQL Server環境構築
2-1. SQL Server 作成
2-2. セキュリティグループの設定
2-3. サンプルデータベースのリストア
2-4. SQL DeveloperからSQL Serverへの接続確認
3. 移行先ATP環境構築
3-1. ATP作成
3-2. SQL DeveloperからATPへの接続確認
3-3. 移行リポジトリの作成
4. データ移行
4−1. 移行ウィザードによる移行
4-2. 移行結果の確認
1. SQL Developer環境準備
OCI上にWindows VM を作成し、SQL Developerをインストールします。
1−1. Windows VM 作成
OCI上にWindows Server 2019 のCompute VMを作成します。
Windows Server 2019の設定は下記記事を参考にさせていただきました。
Windows Serverの日本語化は、Windowsの言語追加から日本語を選択してインストール後、
再起動すると反映されました。
1-2. SQL Developerインストール
Windows VM に RDP で接続後、下記サイトにアクセスし、SQL Developer の Windows 64-bit with JDK 17 included をダウンロードします。
ダウンロードしたzipファイルを解凍し、sqldeveloperをクリックしてインストールすると、
SQL Developerが起動します。
1-3. SQL Server JDBC ドライバー設定
SQL DeveloperからJDBC ドライバーでSQL Server に接続するための設定をします。
- SQL Server JDBC ドライバーのダウンロード
下記サイトよりJTDS を Windwos Serverにダウンロードし、zipファイルを解凍します。
JTDSは Microsoft SQL Server対応のオープンソースのJDBC ドライバーです。SQL Server 2012までの対応となっていますが、問題なくSQL Serverに接続できました。
画面左から、「データベース」 →「サード・パーティJDBCドライバ」 を選択し、エントリの追加ボタンを押下します。
ダウンロード&解凍したフォルダから、"jtds-1.3.1.jar" を選択します。
エントリ登録されたことを確認したら、OKボタンを押下します。
- 設定確認
SQL Developer画面左上の接続にある「+」ボタンをクリックし、「新規データベース接続」を選択します。
データベースのタイプのリストに 「SQL Server」が表示されます。
これでSQL DeveloperからSQLサーバーに接続することができるようになります。
2. 移行元SQL Server環境構築
(既存SQL Serverがある場合は 2-4 から実施してください。)
下記手順を参考に、RDS for SQL Server を作成します。
セキュリティの観点から、RDSにはEC2インスタンス経由での接続が推奨されます。今回はデータ移行手順を確認するため、インターネットから接続できるように設定します。
2-1. SQL Server作成
RDS のデータベースの作成画面で、データベース作成方法は「標準作成」、エンジンのタイプには「Microsoft SQL Server」 を選択します。
データベース管理タイプは「Amazon RDS」、エディションは「SQL Server Express Edition」、バージョンは 2019最新を、テンプレートは「無料利用枠」を選択します。
DBインスタンス識別子、マスターユーザーとパスワードなどの設定情報を入力します。
インスタンスやストレージを設定します。(今回はデフォルトのまま)
接続は、今回は「EC2コンピューティングリソースに接続しない」、パブリックアクセスは「あり」を選択します。
VPC、セキュリティグループなどを選択します。(今回はデフォルトのまま)
Windows認証はデフォルトの無効のままにします。
最後にデータベースの作成を押下します。しばらく待つとステータスが利用可能に変わります。
詳細画面を確認し、接続先のエンドポイントを確認します。
2-2. セキュリティグループの設定
Windows VM から RDS Serverに接続できるようにインバウンドルールを追加します。
SQL Serverの詳細画面にあるVPCセキュリティグループをクリックし、
表示されたセキュリティグループの画面でセキュリティグループIDをクリックします。
「ルールを追加」をクリックし、タイプには「MSSQL」、ソースには接続元となるWindows VM のIPアドレス設定し、「ルールを保存ボタン」を押下します。
インバウンドルールを追加しないとSQLServerに接続できないので忘れずに。
2-3. サンプルデータベースのリストア
サンプルデータベースのファイルをS3にuploadし、SSMSを使ってSQL Serverにリストアします。
手順や具体的な設定について、下記記事を参考にさせていただきました。
RDS for Microsoft SQL Serverでbakファイルを使用したネイティブバックアップとリストアをしてみた
RDSのSQL ServerのDBをS3にバックアップする
- サンプルデータベースファイルをS3にupload
下記サイトよりサンプルデータベースAdventureWorks2019.bak(204MB)ファイルをダウンロードします。
( 今回は SQL Server 2019 で作成したので、同じバージョンを選択しました。)
AWS上でS3バケットを作成し、AdventureWorks2019.bakをupload します。
作成したオプショングループを選択し、オプションの追加で「SQLSERVER_BACKUP_RESTORE」を指定して作成します。
RDSのデータベースから対象インスタンスを選択し、インスタンスの設定を変更します。
追加設定のオプショングループには、先ほど作成したオプショングループを選択します。
- SSMS からリストア
以下よりSQL Server Management Studio (SSMS) をダウンロードし、Windows VM上にインストールします。
SSMSを起動し、「Connect」 → 「Database Engine」を選択します。
「Server Name」にSQL Server のエンドポイント、SQL Server の「Login」、「Password」 を入力して「Connect」ボタンを押します。
SSMS画面の「New Query」をクリックし、リストアのプロシージャーを入力し、「Execute」ボタンをクリックします。
exec msdb.dbo.rds_restore_database
@restore_db_name='Test_AdventureWorks',
@s3_arn_to_restore_from='arn:aws:s3:::<S3バケット名>/AdventureWorks2019.bak'
リストアの進捗状況を確認し、LifeCycleがSuccess になったら完了です。
exec msdb.dbo.rds_task_status @db_name='TEST_AdventureWorks'
Databases配下にリストアしたデータベースができたことを確認します。
2-4. SQL DeveloperからSQL Serverへの接続確認
SQL Developer画面左上の接続にある「+」ボタンをクリックし、「新規データベース接続」を選択します。
データベース接続の作成画面で以下入力し、「データベースの取得」をクリックします。
* データベースのタイプ :SQLServer
* ユーザー名 :admin
* パスワード :SQLServerのマスターパスワード
* ホスト名 :SQL Serverのエンドポイント名
* ポート番号 :1433
データベースのリストからTest_AdventureWorksを選択し、「接続」をクリックします。
SQL Server接続の配下にSQL Serverの接続名 が追加され、Test_AdventureWorksがあることを確認します。
これで、SQL Developerから移行元の SQL Serverサンプルデータベースに接続できました。
3. 移行先ATP環境構築
3-1. ATP作成
下記手順に沿ってATPインスタンスを作成します。
3-2. SQL DeveloperからATPへの接続確認
- クラウド・ウォレットのダウンロード
SQL Developerから接続するため、ATPのクラウド・ウォレットが必要です。
Windows VM上でOCIコンソールにアクセスし、ATP詳細画面から「データベース接続」を押下し、ウォレットをダウンロードします。(下記参照)
- SQL Developerからの接続
SQL Developer画面左上の接続にある「+」ボタンをクリックし、「新規データベース接続」を選択します。
データベース接続の作成画面で以下入力し、「データベースの取得」ボタンを押下します。
* データベースのタイプ :Oracle
* ユーザ名 :ADMIN
* パスワード :ATPインスタンス作成時に入力したパスワード
* 接続タイプ :クラウド・ウォレット
* 構成ファイル:参照をクリックし、ウォレットファイルのパスを選択
* サービス : デフォルトhight のまま
「構成」ファイルの「参照」ボタンをクリックし、事前準備でダウンロードしたクラウド・ウォレットのzipファイルを選択します。
テストボタンを押してステータス:成功になったら、「接続」ボタンを押下します。
Oracle接続の配下にATPの接続名 が追加されたことを確認します。
これで、SQL Developerから 移行先のATPへの接続ができました。
3-3. 移行リポジトリの作成
移行リポジトリを作成します。移行リポジトリは、SQL Developer が移行のメタデータを管理するために使用するスキーマ オブジェクトのコレクションです。今回は同じATP上に作成します。
-
移行用ユーザー作成
MIGRATIONS という名前の Oracle ユーザーを作成します。
移行先のATP接続をクリックし、「他のユーザー」から「ユーザーの作成」を選択します。
ユーザー作成画面で、以下入力または選択します。
* ユーザー名:MIGRATIONS
* パスワード:任意のパスワード
* デフォルト表領域:DATA
* 一時表領域:TEMP
隣の「付与されたロール」タブで以下のように設定します。
* RESOURCE:”付与済”および"管理"
(管理はマルチ・スキーマ移行の場合に必要です。)
「システム権限」タブで以下のように設定します。
* ALTER ANY TRIGGER:”付与済”、および”管理オプション”
* CREATE MATERIALIZED VIEW:”付与済”
* CREATE ROLE:”付与済”、および”管理オプション”
* CREATE SESSION:”付与済”
* CREATE USER:”付与済”、および”管理オプション”
* CREATE VIEW:”付与済”
(CREATE ROLE、CREATE USER、ALTER ANY TRIGGERは、マルチ・スキーマ移行の場合に必要です。)
「割り当て容量」タブで以下のように設定し、適用ボタンを押します。
-
移行リポジトリへの接続作成
MIGRATIONS ユーザーに接続するデータベース接続を作成します。
SQL Developer画面左上の接続にある+ボタンをクリックし、新規データベース接続を選択します。
データベース接続の作成/選択画面で、以下を設定します。
テストで成功になったら接続ボタンを押下します。
* Name:Migration_Repository
* データベースのタイプ:”Oracle”
* ユーザー名:MIGRATIONS
* パスワード:MIHGRATIONSのパスワード
* 接続タイプ:”クラウド・ウォレット”
* 構成ファイル:ATP接続用のWalletファイル(.zip)
Migration_Repositoryという接続が作成されたことを確認します。
-
移行リポジトリの関連付け
Migration_Repository接続を右クリックし、「移行リポジトリ」→「移行リポジトリの関連付け」を選択して、リポジトリを作成します。
これで、移行先のATPの設定は完了です。
4. データ移行
4−1. 移行ウィザードによる移行
-
移行ウィザードの開始
移行元のSQL Server接続から移行対象データベースTest_AdvetureWorksを右クリックし、
「Oracleへの移行」を選択します。
移行ウィザードが起動したら、「次へ」をクリックします。
-
リポジトリ
移行リポジトリの接続として、先ほど作成したMigration_Repositoryを選択し、「次へ」をクリックします。
-
プロジェクト
移行プロジェクトを指定します。このデータ移行ステップをプロジェクトとして管理することで、リトライや部分的な修正が簡単に行うことができます。
「名前」には任意のプロジェクト名を入力します。
「出力ディレクトリ」には、移行ウィザードで生成されるスクリプトの保管先を指定します。
「次へ」をクリックします。 -
ソース・データベース
移行元SQL Serverの接続を選択します。
モードにはオンラインとオフラインがありますが、今回はオンラインを選択します。
「次へ」をクリックします。
オンラインを選択した場合は、移行元のデータベースに接続しオンライン状態で移行します。オフラインの場合は、事前作成したオフライン・キャプチャ・ソース・ファイル(.ocp)を読み込んで移行します。オフライン・キャプチャ・ソース・ファイルは、SQL Developerメニューの「ツール」→「移行」→「データベース取得スクリプトの作成」で作成します。
-
変換
移行元SQL Serverと移行先ATPのデータ型の変換ルールを設定します。対象データベースに対応した変換ルールを表示されますが、ルールの追加、編集、削除ができます。
今回はそのままの設定で「次へ」をクリックします。
-
ターゲット・データベース
移行先ATPの接続を選択します。ソース・データベースと同様、モードにはオンラインとオフラインがありますが、今回はオンラインを選択します。
-
データの移動
表データの移行を設定します。
ここでもオンラインとオフラインのモードがありますが、今回はオンラインを選択します。
「次へ」をクリックします。 -
サマリ
これまで設定した内容を確認し、終了をクリックします。
するとデータベースの移行が開始され、移行状況が表示されます。
数分後、移行が正常に完了すると下記メッセージが表示されます。
4-2. 移行結果の確認
-
移行プロジェクトのステータス確認
SQL Developer画面左下の移行より移行プロジェクトをクリックすると、移行結果を確認できます。一番左の「ステータス」タブでは「Complete」になっています。
隣のタブを選択していくと、移行結果の詳細を確認できます。
「オブジェクト」「列」「サマリー」タブ
「概要」タブではCaptureは100%ですが、Convertが80%でした。
-
移行元/移行先のテーブル名の確認
移行プロジェクトを確認すると、変換されたデータベース・オブジェクト名が変わっていました。
-
移行元/移行先のテーブル・データの確認
同じデータが表示されることを確認しました。
(移行元SQL Server)
(移行先ATP)
すべてのデータまでは確認できていませんが、移行プロジェクトの各データ・オブジェクトをクリックし、変換のステータスや問題の詳細について確認することができます。
まとめ
Oracle SQL Developer の移行ウィザードを使うことで、RDS for SQL Serverから OCI Autonomous Transaction Processing に簡単にデータ移行を行うことができました。
今回の検証ではデーターベース・オブジェクト名が変換されたため、やはり実際のデータ移行を行う際には、移行ウィザード内の「変換」でデフォルトのルールで問題がないか事前調査しておくことをお勧めします。
移行ウィザードの中で指定した出力ディレクトリ配下のログを確認すると、非常に多くのSQLコマンドが実行されていたことが分かります。GUIベースの移行ウィザードに沿って設定すれば、移行レポジトリ経由でデータベースのオブジェクトやテーブルデータをまとめて一度にデータ移行でき、実行結果の詳細確認までできるのはかなり便利だと実感しました。
最後に、今回移行元となるRDS for SQL Serverへの接続に関する情報が見つからず苦労したので、読者の方の参考になれば幸いです。
参考情報
- 3 SQL Developer: サード・パーティ・データベースの移行
- Oracle SQL Developer Migrations:はじめの一歩
- SQL Developerで様々なDBに接続する方法 (7.MS SQL Serverへの接続)