SBクラウド株式会社logo

【PolarDBマイグレーションシリーズ】Oracle DatabaseからPolarDB-Oマイグレーション-Part4 データベースマイグレーション実行

Hi, データエンジニアの大原です。
Oracle DatabaseをPolarDB-O(Oracle)へマイグレーションするためのベストプラクティスが揃ってなかったので、SBC社内で実際にOracle Database導入からPolarDB-Oへのマイグレーションシナリオ検証しまとめてみました。
こちら長文になるので、全部でPart5に分けて紹介します。
Databaseマイグレーションはフルマラソンのようで地味に大変な作業なので、マイグレーションを検討もしくは実施中の方はPart1~Part5の記事を通じて、作業方法、現在の位置、道印、ロードマップなどの把握として参考に頂ければ大変幸いです。

Part1 OracleDatabaseセットアップ、事前準備
Part2 Oracle Database評価
Part3 データベースマイグレーション準備
Part4 データベースマイグレーション実行←本記事です
Part5 アプリケーションマイグレーションと改修

本記事では、Oracle DatabaseからPolarDB-Oマイグレーション-Part4 データベースマイグレーション実行 についてを紹介します。

PolarDBとは

PolarDBはAlibaba Cloudが開発したCloud Native Databaseサービスです。MySQL・PostgreSQLは100%、Oracleは高い互換性を持ちながら、ユーザーのワークロードに応じて垂直・水平スケーリングすることが出来るため、コストを大幅に削減できることが特徴です。

f:id:sbc_ohara:20210923094834p:plain f:id:sbc_ohara:20210923095110p:plain f:id:sbc_ohara:20210923095159p:plain

Oracle DatabaseからPolarDBへのマイグレーションについて

www.sbcloud.co.jp

最初に

この記事 Part4では、ターゲットとなるOracle Database(以降ターゲットDBと省略します)から PolarDB-O へデータベースマイグレーションを行うフェーズとなります。

f:id:sbc_ohara:20210922195004p:plain

5-8.データベースマイグレーションを実行

5-8-1.スキーマを一時的に除外します

1)データマイグレーション画面で開始ボタンをクリックし、スキーマを一時的に除外します
①データマイグレーション画面でスキーマを一時的に除外します
マイグレーション前にて、Excluded Schemas(スキーマ除外一覧)にオブジェクトがある場合、スキーマを一時的に除外する必要があります。マイグレーション後、再度スキーマを追加(インクルード)することができます。
スキーマを外す理由は、テーブルにスキーマ(TRIGGER and FOREIGN KEY) がある場合、スキーマを除外しないと、データマイグレーションの処理スピードに影響する可能性があります。それだけでなく、マイグレーションタスクにスキーマロジックを理由にエラーが発生するリスクがあるためです。

f:id:sbc_ohara:20210922214343p:plain

f:id:sbc_ohara:20210922214353p:plain

f:id:sbc_ohara:20210922214402p:plain

②スキーマを一時的に除外します

f:id:sbc_ohara:20210922215411p:plain

5-8-2.マイグレーションプロジェクトを作成します

1)ソースデータベースとターゲットデータベースでホワイトリストを追加します
①ソースデータベースOracleのECSセキュリティグループにてDTSホワイトリストを追加します

47.91.9.0/24,47.91.13.0/24,47.91.27.0/24,47.245.18.0/24,47.245.51.0/24,47.91.0.192/26,47.91.0.128/26,47.245.51.128/26,47.245.51.192/26,47.91.0.128/26,47.91.0.192/26,147.139.23.0/26,147.139.23.128/26,147.139.23.64/26,149.129.165.192/26

f:id:sbc_ohara:20210922215428p:plain

f:id:sbc_ohara:20210922215437p:plain

f:id:sbc_ohara:20210922215447p:plain

f:id:sbc_ohara:20210922215457p:plain

f:id:sbc_ohara:20210922215510p:plain

2)Oracleのsqlnet.oraファイルを編集します
下記の設定を追加し、設定後、Oracleを再起動します

# cd /data/oracle/11gr2/network/admin/samples
# ls
# vim sqlnet.ora
    TCP.VALIDNODE_CHECKING=no

reference link

f:id:sbc_ohara:20210922215526p:plain

f:id:sbc_ohara:20210922215534p:plain

3)ターゲットデータベースにDTSホワイトリストを追加します

47.91.9.0/24,47.91.13.0/24,47.91.27.0/24,47.245.18.0/24,47.245.51.0/24,47.91.0.192/26,47.91.0.128/26,47.245.51.128/26,47.245.51.192/26,47.91.0.128/26,47.91.0.192/26,147.139.23.0/26,147.139.23.128/26,147.139.23.64/26,149.129.165.192/26

f:id:sbc_ohara:20210922215546p:plain

f:id:sbc_ohara:20210922215554p:plain

4)マイグレーションプロジェクトを作成します
①マイグレーションプロジェクトを作成します

f:id:sbc_ohara:20210922220108p:plain

②DTSインスタンスを作成します

f:id:sbc_ohara:20210922220120p:plain

③マイグレーションタスクを設定します

f:id:sbc_ohara:20210922220129p:plain

④データ収集アカウントとSIDを設定します

f:id:sbc_ohara:20210922220139p:plain

f:id:sbc_ohara:20210922220146p:plain

⑤フルマイグレーションを選択し、マイグレーションテーブルを設定します
ここでもしマイグレーションタスクが失敗したら、エラー詳細を確認し、必要に応じて修正対応しつつ再度マイグレーションを実行することができます

f:id:sbc_ohara:20210922220155p:plain

⑥今回のプロジェクトはDemoなので、TAB_ANYDATAはサポートしていないため、今回は除外します

f:id:sbc_ohara:20210922220204p:plain

⑦作成ボタンをクリックし、マイグレーションタスクを作成します

f:id:sbc_ohara:20210922220213p:plain

5-8-3.データマイグレーションを実行します

①DTSコンソール画面でマイグレーションタスクを確認します

f:id:sbc_ohara:20210922220224p:plain

②タスクを開始します

f:id:sbc_ohara:20210922220234p:plain

f:id:sbc_ohara:20210922220241p:plain

f:id:sbc_ohara:20210922220248p:plain

f:id:sbc_ohara:20210922220256p:plain

③次へをクリックすると、マイグレーションタスクを実行開始します

f:id:sbc_ohara:20210922220310p:plain

④マイグレーションが無事成功したので確認します

f:id:sbc_ohara:20210922220319p:plain

⑤マイグレーション詳細を確認します

f:id:sbc_ohara:20210922220329p:plain

f:id:sbc_ohara:20210922220336p:plain

f:id:sbc_ohara:20210922220342p:plain

5-8-4.スキーマを追加(インクルード)します

①データマイグレーション実行完成したら、ADAMコンソール画面でスキーマを追加(インクルード)します

f:id:sbc_ohara:20210922220353p:plain

f:id:sbc_ohara:20210922220401p:plain

f:id:sbc_ohara:20210922220408p:plain

5-8-5.マイグレーション後テーブルを検証します

1)マイグレーションデータ一致するかをチェックします
①ターゲットデータベースでデータを確認します
ソースデータベーステーブル:

f:id:sbc_ohara:20210922220423p:plain

ターゲットデータベーステーブル:

f:id:sbc_ohara:20210922220432p:plain

②マイグレーションしたデータが一致するかをチェックします
ソースデータテーブル、ターゲットデータテーブルとの比較方法は色々ありますが、そこはアプリケーションシナリオや普段のSQLクエリなどを使って確認します。
或いは、Alibaba Cloud Ticket Center へチケットをあげて、サポートチームにデータが一致するかの確認を依頼することもできます。
注意として、サポートチームでのチェックはIndexが張ってないテーブルだと最大で1000行までのチェックとなります。もし10000行を超えるとサポートチームのチェックシステム側によるチェックができなくなります。

5-8-6.マイグレーション後ビューを検証します

1)改修後のビューをチェックします
①KANA_HIRAGANA_VIEWを確認します

CREATE OR REPLACE VIEW NANCYTEST.KANA_HIRAGANA_VIEW(KANA_HIRAGANA_NAME) AS
SELECT
    nancytest.h2z_hana(name) AS kana_HIRAGANA_name
FROM
    ignore_case_products
where not regexp_like(name, '^[a-zA-Z0-9]'); 

f:id:sbc_ohara:20210922220448p:plain

②Oracle Databaseにはあったregexp_likeがPolarDBには対応されていなかったので、合わせて改修します

CREATE OR REPLACE VIEW NANCYTEST.KANA_HIRAGANA_VIEW(KANA_HIRAGANA_NAME) AS
SELECT
    nancytest.h2z_hana(name) AS kana_HIRAGANA_name
FROM
    ignore_case_products
where name not SIMILAR to '^[a-zA-Z0-9]';

f:id:sbc_ohara:20210922220501p:plain

SELECT * FROM NANCYTEST.KANA_HIRAGANA_VIEW;

f:id:sbc_ohara:20210922220511p:plain

②KANA_FWKATAKANA_VIEWを確認します

CREATE OR REPLACE VIEW NANCYTEST.KANA_FWKATAKANA_VIEW(KANA_FWKATAKANA_NAME) AS
SELECT
    nancytest.h2z_kana(name) AS kana_fwkatakana_name
FROM
    ignore_case_products
where name not SIMILAR to '^[a-zA-Z0-9]';

f:id:sbc_ohara:20210922220524p:plain

SELECT * FROM NANCYTEST.KANA_FWKATAKANA_VIEW;

f:id:sbc_ohara:20210922220539p:plain

③num_en_name_viewを確認します

SELECT * FROM num_en_name_view;

f:id:sbc_ohara:20210922220548p:plain

ここまでDTSによるOracle DatabaseからPolarDBへのデータマイグレーションが完了しました。Oracle Databaseにはあって、PolarDBにはない関数とかの改修対応もスムーズに対応できました。
次はPart5 アプリケーションマイグレーションと改修に移りたいと思います。

www.sbcloud.co.jp