こんにちは。インサイトテクノロジーの松尾です!
Insight Database Testing では、移行元と移行先のそれぞれに対して、Oracle Database、SQL Server、PostgreSQL、MySQL を選ぶことができますが、移行先が AWS 上のデータベースの場合には、AWS ( Amazon Web Services, 以下 AWS ) が提供するツールである AWS SCT ( AWS Schema Conversion Toolとは? ) と連携し、より便利に使うことが可能です。
本ブログでは、Insight Database Testing と AWS SCT を組み合わせて、OracleからRDS for PostgreSQLへの移行アセスメント、および SQL の修正確認を行う手順を紹介します。
なお、本ブログでは製品自体の詳細な説明などは行っておりません。Insight Database Testing については 製品ページ:Insight Database Testingとは? 等を参照してください。画面の詳細な説明については、Insight Database Testing マニュアル を参照してください。
少し長くなってしまいましたので、2 回に分けてご紹介します。このブログ「パート 1 準備編」では、SQL アセスメントを実施するための準備するところまで行います。実際のアセスメントの実行は、パート 2 アセスメント編 を参照してください。
本ブログでの説明の前提条件
本ブログでの説明は以下を前提としています。前提が異なる場合などは、適宜自分の環境へ読み替えて考えてください。
- Oracle Database → Amazon RDS for PostgreSQL への移行を前提とします。
- Amazon Aurora PostgreSQL などへも同様の手順で行うことができます。
- ソース DB からの SQL 収集については本ブログでは扱いません。
- Oracle Database で実行された SQL は既に収集されて IDT Manager 上に蓄積されていることとします。
- そのため、下図における Oracle Database から IDT Manager への接続は、本ブログの中では発生しません。
- SQL 収集も、Insight Database Testing の特徴のひとつです。SQL の 収集については、SQL Capture:本番環境のSQLを自動的にキャプチャー を参考にしてください。
- 移行先データベース ( Amazon RDS for PostgreSQL ) は事前に起動しておいてください。
- Insight Database Testing は AWS Marketplace から起動した Ver 3.1 を使用します。
- AWS SCT は Ver 1.0.659 を使用して確認しています。
また、Oracle Database では以下のような SQL 文が既に実行済で、IDT Manager 上へ蓄積されていることを前提に説明を記載します。前者は PostgreSQL でも有効な SQL 文、後者は PostgreSQL で実行するにあたって変換が必要な SQL 文です。
select /* TEST SQL 1 */ empno, ename from emp order by empno;
select /* TEST SQL 2 */ 1/3 from emp;
select /* TEST SQL 3 */ d.deptno,d.dname,e.empno,nvl(e.ename,'(no employee)') ename
from dept d,emp e
where d.deptno=e.deptno(+)
order by deptno,empno;
本ブログで説明する手順
本ブログで説明する手順は、以下の流れに従います ( 順序が前後しても問題ない場合もあります ) 。
- 移行先データベースの準備
- ( AWS SCT ) AWS SCT のインストール
- ( AWS SCT ) AWS SCT の接続
- ( AWS SCT ) 移行先データベース ( Amazon RDS for PostgreSQL ) にテーブルを作成
- SQL アセスメントの実行
- ( PISO Manager ) 評価 SQL セットの作成 ( PISO Manager からマイニングサーチ実行時に作成 )
- ( Insight Database Testing ) ターゲット DB の登録 ( ↓ここから先は、パート 2 にて実施 )
- ( Insight Database Testing ) アセスメントの実行
- AWS SCT での SQL 修正と再アセスメント
- ( Insight Database Testing ) 失敗 SQL のダウンロード
- ( AWS SCT ) 失敗 SQL の取り込み
- ( AWS SCT ) SQL の変換と保存
- ( Insight Database Testing ) 保存した SQL を修正 SQL セットとして登録
- ( Insight Database Testing ) 再度アセスメントを実行
なお、( パート 1 準備編 ) では、評価 SQL セットの作成まで行います。
移行先データベースの準備
まず最初に移行先のデータベースを準備します。
2022年2月現在、Insight Database Testing には、移行先へデータベースへテーブルを用意する機能はありません。AWS SCT や DBeaver などのツールや、自前の SQL スクリプトなどを用いて事前にテーブルを用意します。
本ブログでは AWS SCT を使用した手順を説明します。AWS SCT は AWS が提供する無償ツールで、既存のデータベースを AWS へ移行する際のスキーマ変換や SQL の修正を行う機能があります。
なお、移行先のテーブルに既にスキーマを移行している場合 ( 移行先データベースを準備済みの場合 ) には、AWS SCT によるスキーマ移行は不要です。AWS SCT によるスキーマ移行自体は不要ですが、後の SQL の修正に AWS SCT を使用しますので、データベースへの接続は行っておいてください。
( AWS SCT での操作 ) AWS SCT のインストール
AWS SCT と接続に必要な JDBC ドライバーを作業 PC にインストールします。
- AWS SCT をダウンロードしてインストールします
- AWS SCT のインストール のページから、自身の作業 PC の OS に合わせたインストーラをダウンロードします。
- インストーラファイルをダウンロードした後、ファイルを展開し、インストーラを起動 ( Windows の場合は展開された msi ファイルをダブルクリック ) して、インストールを実行します。
- インストールが終了したら、インストールした AWS SCT を起動します。
- Oracle Database の JDBC ドライバーをインストールします
- Oracle 社の JDBCドライバーのダウンロードサイト から
ojdbc11.jar
ファイルなどをダウンロードし、適当なフォルダへ配置します ( インストールするJDBCドライバーは最新のものを選択します )。 - 起動した AWS SCT のメニューから、Sttings – Global settings を選択し、表示されたダイアログで Drivers を選択し、Oracle Database に対して、配置した ojdbc11.jar を設定します。
- Oracle 社の JDBCドライバーのダウンロードサイト から
- PostgreSQL の JDBC ドライバーをインストールします
- PostgreSQLのドライバーダウンロードサイトより、最新の JDBC ドライバーを選択しインストールします。
- Oracle Database の JDBC ドライバーと同様、任意のフォルダーにダウンロードした jar ファイルを配置し、Global settings にてドライバーを設定します。
これで AWS SCT のインストールと必要な初期設定は終了です。
( AWS SCT での操作 ) AWS SCT の接続
AWS SCT を移行元データベースと移行先データベースに接続します。
- AWS SCT のメニューから、File – New project を選択します。
- New project ダイアログで以下のように設定します。
- Project name: 適当な名称
- Location: プロジェクトファイルの作成場所
- OK をクリックすると、以下のように “Add source” と “Add target” がメニューに追加されます。
- Add source メニューをクリックすると、ソースを選択するダイアログが開きます。
- Oracle をクリックすると、Oracle Database への接続情報を入力するダイアログが開きます。Type から指定方法を選択し、必要な情報を入力して Test connection をクリックして接続が可能なことを確認します。指定方法の詳細は Using Oracle as a source for AWS SCT を参照してください。Permissions required when using Oracle as a source database には、Oracle Database へ接続にあたり、使用するユーザーの権限として要求される権限についても記載があります。権限がない場合は事前に付与してください。Test connection で接続が確認されると、接続が成功したメッセージが表示されます。
- OK をクリックすると、Oracle Database へ接続し、Oracle Database のスキーマ情報の読み取りが行われ、AWS SCT の画面内の Sources に、接続した Oracle Database が追加されます。
- 同様に Add target メニューをクリック後に Amazon RDS for PostgreSQL を選択し、Amazon RDS for PostgreSQL へ接続します。Server name には、Amazon RDS for PostgreSQL の画面で表示されるエンドポイントを指定します。Oracle Database 同様に Test connection が成功したら、OK をクリックして接続します。接続すると、右側のTargets の中へ、接続した Amazon RDS for PostgreSQL が表示されます。
( AWS SCT での操作 ) 移行先データベース ( Amazon RDS for PostgreSQL ) にテーブルを作成
移行元データベースのテーブルを移行先データベースに作成します。
- Mapping View の状態で、右側の Targets で移行先の RDS for PostgreSQLを選択します。次に左側のOracleを展開し、今回の対象のスキーマを選択し、右クリックをして Create Mapping を選択します。
- 選択したスキーマに対する Mapping が作成されます。
- Main View に変更し、左側の移行元データベース ( Oracle Database ) で、移行したいスキーマのツリーを展開し、Tables に移行したいテーブルが含まれていることを確認します。
- Tables を選択した状態で、右クリックで表示されるメニューから、Convert schema を選択します。既に存在する場合は上書きする旨の確認メッセージに対しては、問題なければ Yes を選択します。
- 処理が終了すると、Amazon RDS for PostgreSQL のツリー ( 右側 ) の Schemas の中に、Oracle Database で選択したスキーマとテーブルが表示されます。
- Tables を選択した状態で、右クリックで表示されるメニューから、Apply to database を選択します。確認メッセージが表示されたら Yes を選択します。
これで、移行先データベースへテーブルが反映されました。
psql コマンドなどで Amazon RDS for PostgreSQL へ接続すると、選択したスキーマとテーブルが作成されていることを確認できます。
scott=> dn
List of schemas
Name | Owner
--------------------+-------
aws_oracle_context | scott
aws_oracle_data | scott
aws_oracle_ext | scott
public | scott
scott | scott
(5 rows)
移行先データベースへのテーブルの準備が終了しました。
SQL アセスメントの実行
本ブログでは、移行元データベース ( Oracle Database ) で実行された SQL は既に収集されて IDT Manager 上に蓄積されていることとします。IDT Manager で蓄積した SQL については、PISO Manager Web コンソールのマイニングサーチ機能を使用して、Insight Database Testing に連携します。
( PISO Manager での操作 ) 評価 SQL セットの作成 ( PISO Manager からマイニングサーチ実行時に作成 )
PISO Manager からマイニングサーチを実行する際に、評価 SQL セットを作成するには、以下の手順に従います。なお、本手順では、ユニーク SQL を指定した評価 SQL の作成を行うことはできないため、ユニーク SQL の指定を行う必要がある場合は、先の手順にて、CSV ファイル出力としてマイニングサーチを実行した後に評価 SQL セットを作成します。詳細は、Insight Database Testing マニュアル – PISO ManagerとIDT Managerを接続して蓄積したSQLを転送する(方法2) も参照ください。
- PISO Manager で PISO Manager 設定の外部サーバー接続にて以下の接続設定を作成します。接続タイプには IDT 連携を選択し、IPアドレス、ポート番号には、それぞれ、
127.0.0.1
、7778
を指定します。ユーザー名とパスワードには、使用する Insight Database Testing のユーザー名とパスワードを指定します。 - マイニングサーチ実行時には出力形式に外部サーバー接続を選択し、IDT連携として作成した接続識別子を指定したうえで、マイニングサーチを実行します。
- マイニングサーチが終了すると、以下のように、評価 SQL セットが自動で作成されます。
- 評価 SQL セットには、マイニングサーチのジョブ名から自動的に名前が付与されるため、必要に応じて評価 SQL セット名を変更します。
- 評価 SQL セットの中を見てみると、実行した SQL を取得できていることを確認できます。
おわりに
ここまで、Insight Database Testing と AWS SCT を用いて、評価の準備である、 評価 SQL セットの作成までを行いました。
実際のアセスメントの実行は、こちらのブログ パート 2 アセスメント編 にて紹介いたしますので、どうぞお楽しみに。
Insight Database Testing をまだご利用いただいていない方で実際に試されたい場合は、製品の説明やデモ、トライアルなどについてInsight Database Testingに関するお問い合わせ よりお問い合わせいただければと思います。
2022/2/28 追記
Insight Database Testing 3.1 のリリースに伴い、画像の差し替えおよび手順を更新しました。