LoginSignup
4
1

More than 5 years have passed since last update.

Database Conversion WorkbenchとIBM Liftを使ってOracleからDb2 on CloudにDB移行してみた

Last updated at Posted at 2019-01-09

Db2への移行ツールとして、Database Conversion Workbench(以下DCW)とIBM Liftが無償で提供されているということで、これらのツールを使用して、OracleからDb2 on Cloudにデータ移行をしてみました。

ツールの紹介

<Database Conversion Workbenchとは>

IBM社から無償で提供されているDB移行ツールで、
移行データソースとして、Db2等のIBM社のDB製品に加え、OracleやSQLServerなど他社DBもサポートしています。

<IBM Liftとは>

IBM社から無償で提供されているDB移行ツールで、他社DBも対象としている点はDCWと同じです。
IBM Cloudで提供されているDBサービス(Db2 on cloudやDb2 Warehouse on Cloud)をサポートしていることが特徴です。

環境情報

<移行元・移行先環境について>

今回はOracle DB(オンプレミス環境 12cR2)からDb2 on Cloudへの移行を実施します。
スライド3.jpeg

<移行データについて>

移行対象データとして、OracleのHRサンプルスキーマを作成し、使用しました。
EMPLOYEES表のデータに関しては、一部日本語データに変更して使用しています。
サンプル・スキーマの概要とセットアップ方法

<Db2 on Cloudに関して>

Db2 on Cloudの環境として、Db2のレジストリー変数であるDB2_COMPATIBILITY_VECTORをOraにセットし、その上でDBを作成しています。
これによりDb2のOracle互換モードが有効化された状態でDBが作成されます。

Oracle 用の互換フィーチャー
DB2_COMPATIBILITY_VECTOR レジストリー変数

<作業PCについて>

使用するツールは全て上記の図の通り、作業PCに導入しています。
今回は作業PCとしてMac Bookを使用していますが、両ツールはWindowsやLinuxにも対応しています。

移行手順の流れ

以下の手順で移行作業を実施します。(手順1~4はDCW、手順5~8はIBM Liftを使用します)
1. Oracle DBのDDLを抽出
2. Oracle DDLに対するDb2との互換性評価
3. Oracle DDLの自動変換
4. Oracle DDLを手動修正
5. Db2 on Cloudに変換したDDLを実行
6. Oracle DBからデータ抽出
7. データをIBM Cloud上に転送
8. Db2 on Cloudにデータを読み込む

ツールのインストール

両ツール、先述の通り無償で提供されていますが、ダウンロードにはIBM IDの登録をする必要があります。

<DCWインストール手順>

以下のリンクをご参照ください。ダウンロードモジュール・インストールガイド・移行ガイドも公開されています。
IBM Database Conversion Workbench

<IBM Liftのインストール手順>

こちらのQiitaの記事に日本語で紹介されています。
https://qiita.com/azzeten/items/525479b9817cbdd6ce25

全て英語で書かれていますが、IBM Liftの公式サイトにもインストール方法に加えてIBM Liftのコマンドとコマンドオプション等が記載されています。
IBM Lift CLI

DCWのセットアップ

DCWインストール後、移行作業を始める前にDCWのセットアップを行います。

<DCWの起動>

ダウンロードしたのDCWモジュールを解凍すると、以下のようなファイルがあります。
その中のdcwという実行ファイル(黒いアイコン)をクリックし、起動します。
私の場合、最初の起動時に「このJavaアプリケーション”を開くには、以前のJava SE 6ランタイムをインストールする必要があります。」というエラーが出て、うまく起動できなかったため、Java SE 6をインストールをしてから再度起動を行いました。

スクリーンショット 2018-12-18 14.58.43.png
DCWの起動画面
スクリーンショット 2018-12-18 14.59.10.png
Workspaceの場所を聞かれるので、入力し続行します。
(デフォルトはインストールディレクトリーの直下になります)
スクリーンショット 2018-12-18 14.59.27.png
起動が完了するとこのようなワークスペースが開きます。
スクリーンショット 2018-12-19 10.42.49.png

<プロジェクトの作成>

DCW起動後、プロジェクトを作成します。
「File」> 「New」 > 「DCW Project」を選択します。
スクリーンショット 2018-12-18 15.19.04.png
任意のプロジェクト名を入力し、ソースDB、ターゲットDBを選択します。
スクリーンショット 2018-12-14 15.16.03.png
「Project Explorer」以下に新しいプロジェクトが作成されます。
スクリーンショット 2018-12-19 10.50.00.png

<DB接続情報の設定>

事前にソースDB及びターゲットDB(今回であれば、OracleとDb2両方のJDBC Driverをダウンロードする必要があります。
「Database Connection」>「New」を選択し、新規のDB接続情報を追加します。
スクリーンショット 2018-12-19 14.59.38.png
登録するDBの種類を選択します。(今回はOracle DBの接続情報を追加します)
スクリーンショット 2018-12-19 15.00.35.png
接続情報を入力する前に画面右上の車輪のようなアイコンを選択します 
これです→スクリーンショット 2018-12-19 15.01.23.png
ここからJDBC Driverの接続設定を行います。
先に接続情報を入力した後にJDBC Driverの値を設定すると、せっかく入力したユーザー情報が初期設定に戻ってしまい、結局再度入力するはめになりますのでご注意を!
スクリーンショット 2018-12-19 15.01.01.png

Driverの種類を選択します。今回のVersionは12ですが、見当たらないため、ひとまず11を選択しました。
スクリーンショット 2018-12-19 15.01.45.png
「JAR List」タブを選択すると、デフォルトで設定されている「ojdbc14.jar」を選択し、左側の「Edit」を選択します。
スクリーンショット 2018-12-19 15.02.28.png
実際にJDBC Driverをダウンロードしたディレクトリーを指定し、「OK」を選択します。
スクリーンショット 2018-12-19 15.02.51.png
元の接続情報を入力する画面に戻るので、ここで接続情報を登録します。
「Test Connection」を選択し、Ping succeeded!というメッセージが表示されたら、「Finish」を選択し、設定を保存します。
スクリーンショット 2018-12-19 15.03.36.png
接続が完了すると、接続先DBのオブジェクトやデータを参照できるようになります。
スクリーンショット 2018-12-19 15.04.52.png

同様の手順でDb2の接続情報も追加します。
スクリーンショット 2018-12-19 15.20.28.png

ここまで準備が完了したら、移行作業に取り掛かります。

1.Oracle DBのDDLを抽出

まずソースDBのDDLを抽出します。
プロジェクトを右クリックすると以下のようなプルダウンメニューが表示されます。
「Database Conversion 」>「Extract DDL」を選択します。
スクリーンショット 2018-12-18 14.57.20.png

DDLの抽出方法として、以下の2つの方法がありますが、前者の方法で行います。
1. DDL抽出スクリプトをDCWで作成し、ソースDBのローカル環境でスクリプトを実行しDDLを抽出
2. DCWから直接ソースDBにアクセスしてDDLを抽出
スクリーンショット 2018-12-18 14.55.30.png
任意のスクリプト名を入力し、今回はHRスキーマのみのDDLの抽出を実施するためAdvanced schema selectionを選択します。
スクリーンショット 2018-12-18 14.56.36.png
今回の移行元となるOracleサーバーにあるスキーマが全てリストされますが、
HR以外は削除します。
スクリーンショット 2018-12-18 14.56.58.png
Finishを選択すると、先ほど指定したファイル名でスクリプトが作成されます。
スクリーンショット 2018-12-18 15.15.50.png

作成したスクリプトをOracleサーバー上へコピーし、実行します。
<スクリプト実行コマンド例>
sqlplus / as sysdba @hr_extract.sql

実行完了すると以下のようなファイルが出力されます。
複数ファイルが出力されますが、extract_ddl_script_ddl.sqlにDDLが出力されてます。
スクリーンショット 2018-12-14 15.25.08.png

2.Oracle DDLに対するDb2との互換性評価

1でOracleサーバー上に抽出したDDLを作業用PCにコピーします。
その後、プロジェクトをクリックし、「Data Conversion」>「Import SQL Files」を選択し、DCWに取り込みます。
スクリーンショット 2018-12-14 15.26.10.png
取り込みたいファイルを指定し、「Finish」を選択します。
スクリーンショット 2018-12-14 15.34.37.png
読み込まれたDDLファイルを選択し、「Database Conversion」>「Evaluate Compatibility」を選択します。
スクリーンショット 2018-12-14 15.28.04.png
移行元DBと移行先DBの種類を選択し「Fininsh」を選択します。
スクリーンショット 2018-12-14 15.28.17.png

HTML形式の互換性評価レポートが作成されます。
スクリーンショット 2018-12-18 15.26.30.png

レポートのサマリーにはソースDBのDDLについて、Db2との互換性レベルが記載されています。
スクリーンショット 2018-12-14 15.28.35.png

3.Oracle DDLの自動変換

DCWにはOracle DDLをDb2に対応できるように自動変換する機能があります。

DDLファイルを選択し、「Database Conversion」>「Convert Code」を選択します。
スクリーンショット 2018-12-14 15.40.38.png

移行元DBと移行先DBの種類をと区切り文字を選択し、「Finish」を選択します。
スクリーンショット 2018-12-14 15.40.52.png

変換されたDDLは変換前のDDLとは別ファイルとして作成されます。
ファイル名の最後に「converted」が付きます。
スクリーンショット 2018-12-14 15.39.16.png

4.Oracle DDLを手動修正

自動変換対象外のDDLに関しては、手動でDCWの画面から直接ファイルを編集します。
互換性評価レポートには自動変換対象外のDDLがリストされています。
互換性評価レポートの「PL/SQL Evaluation」や「SQL Evaluation」タブを選択すると見ることができます。
スクリーンショット 2018-12-18 16.30.43.png
+ボタンを展開すると、「Solution」の箇所に修正内容が書いてあるので、それを参考にしながらどう修正するか検討します。(必ずここに記載している内容通りに修正する必要があるわけではありません。ケースバイケースで最適な修正プランを考えます)

<自動変換ができないDDLのリスト>
スクリーンショット 2018-12-19 18.25.50.png

このレポートによると、EMP_DETAILS_VIEWのWITH READ ONLYオプションはDb2ではサポートされていないということなのでここを修正します。

スクリーンショット 2018-12-19 18.34.47.png

WITH READ ONLYオプションをコメントアウトします。
スクリーンショット 2018-12-19 18.34.54.png

このように全ての自動変換で対応できないDDLを修正していきます。

ちなみに、修正したDDLに再度互換性評価を行えば、互換性レベルが100%になるはず!と思いましたが、修正済みDDLファイルに対しては互換性評価は行えないようです・・・。残念!
スクリーンショット 2018-12-18 16.36.56.png

5.Db2 on Cloudに変換したDDLを実行

ここからはIBM Liftを使用します。
修正したDDLを移行先のDb2 on Cloudに対して実行します。
DDLの実行はexecuteコマンドを使用します。

実行オプションをファイルにconfigファイルとして定義します
コマンドライン上でオプションを指定することも可能ですが、コマンド自体が長々としたものになり、修正しにくいため、今回はIBM Liftのコマンドオプションは全てファイルに書いて、コマンドライン上でファイル名を指定します。
<executeコマンドのconfigファイル>
スクリーンショット 2018-12-14 16.05.16.png
<executeコマンド例>

lift execute --file extract_ddl_script_ddl_converted.sql --properties-file ddl_execute.cfg

実行完了後、がDb2 on Cloudコンソールにログインをして、テーブル等のオブジェクトが作成されていることを確認します。
<ログイン画面>
スクリーンショット 2018-12-14 16.15.39.png
<EXPLORE画面>
スクリーンショット 2018-12-14 16.15.16.png

6.Oracle DBからデータ抽出

移行元DBのデータを出力にはexportコマンドを使用します。
exportされたデータはCSVファイルとして、IBM Lift CLIが導入されている環境に出力されます。
ワイルドカードや区切り文字を使って一気に全表のファイルを出力しようと試みましたが、どうやらできないようで、表ごとにコマンドを実行しました。
<exportコマンドのオプション>
スクリーンショット 2018-12-14 16.39.43.png
<exportコマンド例>
lift export --source-table REGIONS --properties-file data_export.cfg

7.データをIBM Cloud上に転送

putコマンドでコマンドでCSVファイルをIBM Cloud上に転送します。
CSVファイルはIBM Cloud上のランディングゾーンという場所に転送されます。
<IBM Liftのサイトに掲載されているイメージ図>
スクリーンショット 2018-12-18 16.45.16.png

<putコマンドのconfigファイル>
putコマンドでは、ワイルドカードを使用したファイル指定が可能なようです。
「HR」から始まるcsvファイル全てを一気に転送することができました。
スクリーンショット 2018-12-14 16.42.04.png
<putコマンド例>
lift put --properties-file data_put.cfg
ランディングゾーンに転送されたファイルはlsコマンドで確認できます。rmコマンドで転送されたファイルを削除することもできます。
<lsコマンドのconfigファイル>
スクリーンショット 2018-12-14 16.42.22.png
全てのファイルが転送されていることを確認します。
RSamplesはデフォルトであるファイルです。
<lsコマンド例>
lift ls --properties-file data_load.cfg

<lsコマンド出力例>
スクリーンショット 2018-12-14 16.46.59.png

8.Db2 on Cloudにデータを読み込む

loadコマンドでDb2 on Cloudにランディングゾーンに転送されているファイルからデータを読み込みます。
今回は少ないデータ量でデータ移行を行っていますが、Load機能には高速データ転送ソフトウェアであるAsperaが使用されており、大量のデータの場合でも高速に読み込みを行うことができるようです。

<loadコマンドのconfigファイル>
スクリーンショット 2018-12-14 17.01.53.png
<loadコマンド>
lift load --filename HR.REGIONS.csv --target-table REGIONS --properties-file data_load.cfg

最後にデータの確認

Db2 on Cloudコンソール上でデータを確認します。
スクリーンショット 2018-12-14 17.10.58.png

おまけ

今回はDDLの実行手順ではIBM Liftを使用していますが
Db2 on CloudのコンソールからGUI操作でDDLの実行・データのロードを行うことができます。(今回はEMPLOYEES2という表を定義し、データをロードします)
DDLの実行は、RUN SQLから直接SQLを入力します
スクリーンショット 2018-12-14 17.14.29.png
データのロードはLOADから、CSVファイルを指定します。
スクリーンショット 2018-12-14 17.14.49.png
ターゲット表を選択します。
スクリーンショット 2018-12-14 17.15.17.png
文字コードや区切り文字などロードオプションを指定します。
スクリーンショット 2018-12-14 17.15.33.png
DateやTime型等のフォーマット定義を変更する場合は変更します。
ここではロードされるデータイメージを参照することが可能です。
スクリーンショット 2018-12-14 17.16.00.png
ロードを実行します。無事に全てのデータのロードに成功しました。
スクリーンショット 2018-12-14 17.16.24.png

参考動画

これらの手順は動画にもまとめてあります。よろしければご参照ください。
OracleからDb2への移行(3分版/10分版)

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1