SBクラウド株式会社logo

【PolarDBマイグレーションシリーズ】Oracle DatabaseからPolarDB-Oマイグレーション-Part5 アプリケーションマイグレーションと改修

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マイグレーション-Part5 アプリケーションマイグレーションと改修 についてを紹介します。

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へマイグレーションを完了しました。Oracle Databaseにはあって、PolarDBにはない関数とかの改修対応もスムーズに対応できました。
この記事 Part5では、PolarDB-O に対し、アプリケーションのマイグレーションと改修を行うフェーズとなります。
Oracle DatabaseからPolarDB-Oへデータベースマイグレーション後、その後どのようなアクションが適切かを追って説明します。

f:id:sbc_ohara:20210922223627p:plain

6.アプリケーションマイグレーションと改修

6-1.アプリケーションを収集します

6-1-1.アプリケーション収集ツールをダウンロードします

1)application collectorツールをダウンロードします

①ADAMコンソール画面でapplication collectorツールをダウンロードします

f:id:sbc_ohara:20210922225333p:plain

f:id:sbc_ohara:20210922225341p:plain

f:id:sbc_ohara:20210922225349p:plain

②application collectorツールをダウンロードしました f:id:sbc_ohara:20210922225401p:plain

2)application collectorをアップロードします
①application collectorをアプリケーションECSにアップロードします
f:id:sbc_ohara:20210922225409p:plain

②application collectorを解凍します

# gunzip adam-appagent-guard.tar.gz
# tar -xmvf adam-appagent-guard.tar
# ls

f:id:sbc_ohara:20210922225418p:plain

f:id:sbc_ohara:20210922225425p:plain

f:id:sbc_ohara:20210922225432p:plain

3)application collectorの設定
application collectorは「Collector」「javaagent」の二つのアプリケーションがあります。

  • javaagentはアプリケーションのデータを収集します。
  • Collectorではすべてのjavaagentアップロードしたデータを収集し保存します。

Collectorとjavaagentは1つのサーバー(ECS)へ導入、もしくはそれぞれ異なるサーバー(ECS)に導入しデプロイすることができます。中にはjavaagentは監視したいアプリケーションと同じサーバーにデプロイします。Collectorでは単独的にデプロイできます。javaagentとCollector分離デプロイする場合、javaagentの設定ファイルを変更する必要があります。
javaagentの設定ファイルの修正方法は次の通りです。

vim /root/javaagent-package-1.2.6/javaagent/javaagent.config

f:id:sbc_ohara:20210922225446p:plain

f:id:sbc_ohara:20210922225454p:plain

今回はDemoとして一つのアプリケーションをモニタリングするため、1つのサーバー(ECS)へ導入します。デプロイ方法として設定ファイルは変更しません。

6-1-2.アプリケーションデータを収集します

1)アプリケーションが起動されることを確認します
①バクエンドでアプリケーションを起動します

# nohup ./run.sh &

f:id:sbc_ohara:20210922225509p:plain

②shopアプリケーションのPIDを確認します

# ps -ef | grep java

f:id:sbc_ohara:20210922225530p:plain

③shopアプリケーションのPIDをアタッチします

# ./attach.sh -p #{pid}
# cd /root/javaagent-package-1.2.6/javaagent
# ./attach.sh -p 12943

f:id:sbc_ohara:20210922225541p:plain

④アプリケーションを操作します
※一定のデータを収集するために、データ収集中アプリケーションを操作します。

ECS上で構築した、アプリケーションで仮オーダー操作をします
PolarDBらデータベース側へ反映されるような操作アクションであれば、何でも良いです。以下スクリーンショットはアプリケーション上で処理完了するまでのDemo動作となります。
f:id:sbc_ohara:20210922225557p:plain

f:id:sbc_ohara:20210922225605p:plain

f:id:sbc_ohara:20210922225613p:plain

f:id:sbc_ohara:20210922225621p:plain

②収集されたデータを確認します

# cd /root/javaagent-package-1.2.6/collector/data
# ls
# cd app/
# ls
# cd adamApp17216097/
# ls
# cd 172.16.0.97/
# ls
# cd 7001/
# ls

f:id:sbc_ohara:20210922225657p:plain

③収集されたデータを圧縮します

# zip appData.zip *.csv

f:id:sbc_ohara:20210922225709p:plain

④appData.zipをローカルにダウンロードします

# sz appData.zip

f:id:sbc_ohara:20210922225721p:plain

⑤ローカルにappData.zipを確認します

f:id:sbc_ohara:20210922225734p:plain

6-2.アプリケーションプロファイルを分析します

6-2-1.アプリケーションプロファイルを作成します

1)アプリケーションプロファイルを作成します
①アプリケーションプロファイル作成をクリックします

f:id:sbc_ohara:20210922225742p:plain

②プロファイル作成をクリックします

f:id:sbc_ohara:20210922225752p:plain

③プロファイル作成を作成します

f:id:sbc_ohara:20210922233513p:plain

④収集されたアプリケーションデータをアップロードします

f:id:sbc_ohara:20210922233523p:plain

⑤データベースプロファイルを選択します

f:id:sbc_ohara:20210922233534p:plain

⑥追加ボタンをクリックします

f:id:sbc_ohara:20210922233543p:plain

⑦プロファイル作成ボタンをクリックします

f:id:sbc_ohara:20210922233554p:plain

⑧アプリケーションプロファイルを作成開始します

f:id:sbc_ohara:20210922233604p:plain

⑨アプリケーションプロファイルを作成完了します

f:id:sbc_ohara:20210922233614p:plain

6-2-2.アプリケーションプロファイル分析結果を確認します

1)アプリケーションプロファイル分析概要を確認します
①Summaryを確認します

f:id:sbc_ohara:20210922233625p:plain

f:id:sbc_ohara:20210922233633p:plain

2)アプリケーションプロファイル分析概要を確認します
プロファイル詳細画面では下記情報が確認できます

  • System Information(システム情報):アプリケーションのシステム情報とパフォーマンスを表示します
  • Object Overview(オブジェクト概要):アプリケーションの基本操作情報
  • Object Details(オブジェクト詳細):オブジェクト詳細を確認します。呼び出し情報も確認します

①System Informationを確認します

f:id:sbc_ohara:20210922233704p:plain

②Object Overviewを確認します

f:id:sbc_ohara:20210922233718p:plain

f:id:sbc_ohara:20210922233726p:plain

③Object Detailsを確認します

f:id:sbc_ohara:20210922233735p:plain

f:id:sbc_ohara:20210922233744p:plain

f:id:sbc_ohara:20210922233753p:plain

f:id:sbc_ohara:20210922233800p:plain

f:id:sbc_ohara:20210922233807p:plain

④アプリケーションプロファイル分析レポートをダウンロードします

f:id:sbc_ohara:20210922233819p:plain

⑤分析レポートをローカルにダウンロードします

f:id:sbc_ohara:20210922233828p:plain

⑥分析レポートを確認します

f:id:sbc_ohara:20210922233837p:plain

⑦SQL互換性情報を確認します

f:id:sbc_ohara:20210922233846p:plain

ここまでアプリケーションプロファイルの作成が無事完了しました。

6-3.アプリケーション評価

1)アプリケーション評価プロジェクトを作成します

①「次へプロジェクト作成」をクリックします

f:id:sbc_ohara:20210922233856p:plain

②アプリケーション評価プロジェクト作成をクリックします

f:id:sbc_ohara:20210922233907p:plain

③アプリケーション評価プロジェクトを設定します

f:id:sbc_ohara:20210922233919p:plain

④APPプロファイルを選択します

f:id:sbc_ohara:20210922233929p:plain

⑤データベースを選択します

f:id:sbc_ohara:20210922233937p:plain

⑥アプリケーション評価プロジェクトを作成開始します

f:id:sbc_ohara:20210922233945p:plain

⑦アプリケーション評価プロジェクトが作成完了しました

f:id:sbc_ohara:20210922233954p:plain

2)アプリケーション評価プロジェクト詳細を確認します
①詳細画面を開きます

f:id:sbc_ohara:20210922234004p:plain

②評価結果を確認します

f:id:sbc_ohara:20210922234041p:plain

f:id:sbc_ohara:20210922234050p:plain

f:id:sbc_ohara:20210922234058p:plain

③プロジェクト概要を確認します

f:id:sbc_ohara:20210922234110p:plain

④プロファイルを確認します

f:id:sbc_ohara:20210922234122p:plain

⑤レポートをダウンロードします

f:id:sbc_ohara:20210923000415p:plain

f:id:sbc_ohara:20210923000429p:plain

⑥レポートを解凍します

f:id:sbc_ohara:20210923000440p:plain

⑦レポート内容を確認します

f:id:sbc_ohara:20210923000451p:plain

f:id:sbc_ohara:20210923000459p:plain

6-4.データベースマイグレーションに伴うアプリケーションの改修

このStepは、データベースマイグレーションに伴う接続先変更など、既存アプリケーションを一部改修するフェーズとなります。例えばjdbcドライバー変更、SQLクエリの対応、待ち時間設定etc....
そのため、お持ちのアプリケーション構造など、必要に応じてこのStepを実施するなり、Skipしても問題ないです。

6-4-1.アプリケーションを開きます

1)今回のデモ改修プロジェクトは下記のリンクからダウンロードできます
app polardb link

f:id:sbc_ohara:20210923000516p:plain

2)IntelijIDEAでプロジェクトを開きます

f:id:sbc_ohara:20210923000527p:plain

6-4-2.データベースマイグレーションに伴うアプリケーションの改修

1)コンフィグファイルを改修します
①アプリケーションのJDBCドライバー(pom.xml)を改修します
ソースアプリケーションとしてOracle DatabaseのDriver packageを使用しているので、マイグレーション後はPolarDBのDriver packageに変更します

<dependency>
<groupId>edb</groupId>
<artifactId>edb.driver</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/driver/edb.driver.jar</systemPath>
</dependency>

f:id:sbc_ohara:20210923000541p:plain

②jdbc.propertiesを改修します
改修前

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@//172.16.0.96:1521/orcl11g
jdbc.user = shoptest
jdbc.password = shoptest

改修後(jdbc.urlでスキーマは大文字で正しくしてください)

jdbc.driver=com.edb.Driver
jdbc.url=jdbc:edb://pc-0iw446wg8ov2y7ul0.o.polardb.japan.rds.aliyuncs.com:1521/sbdb?currentSchema=SHOPTEST
jdbc.user = sbtest
jdbc.password = Test1234

今回はアプリケーションのECSはPolarDBと同じVPC上で作成するため、イントラネットエンドポイントで設定します

f:id:sbc_ohara:20210923000554p:plain

f:id:sbc_ohara:20210923000601p:plain

③applicationContext.xmlを改修します

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>

f:id:sbc_ohara:20210923000611p:plain

2)SQL改修
SQL改修機能は(2021/9/23時点で)コンソールの表示言語が中国語版のみ対応しています。
英語版は2021年10月以降に利用することができます。表示言語が異なりますが中の挙動は同じとなりますので、ここでは中国語版として改修をします。

①必要に応じてSQL改修します

f:id:sbc_ohara:20210923000621p:plain

3)プロジェクトをビルドします
①アプリケーションコードが改修完了したら、ビルドします

f:id:sbc_ohara:20210923000634p:plain

f:id:sbc_ohara:20210923000641p:plain

②プロジェクトを作成します

mvn clean package -DskipTests

f:id:sbc_ohara:20210923000654p:plain

f:id:sbc_ohara:20210923000702p:plain

f:id:sbc_ohara:20210923000710p:plain

6-4-3.アプリケーションをデプロイします

1)新しいサーバー環境を作成します(作成方法はここでは省略します)
①PolarDBインスタンスのVPCを確認します

f:id:sbc_ohara:20210923000722p:plain

②ECSを作成します
移行前のECSと同じ仕様で作成します

f:id:sbc_ohara:20210923000732p:plain

③ECSを接続します

f:id:sbc_ohara:20210923000741p:plain

2)ECSでjava環境を設定します
①Javaをインストールします

# yum install java -y

f:id:sbc_ohara:20210923000750p:plain

②Javaバージョンを確認します

# java -version

f:id:sbc_ohara:20210923000800p:plain

3)lrzszをインストールします

# yum install lrzsz

f:id:sbc_ohara:20210923000808p:plain

4)アプリケーションJarをECSにデプロイします
①ターゲットJarファイルをアップロードします  

# rz 
# ls

f:id:sbc_ohara:20210923000818p:plain

②Jarファイルを解凍します

# gunzip shop-1.0.0-SNAPSHOT-release.tar.gz
# ls
# tar -xvmf shop-1.0.0-SNAPSHOT-release.tar
# ls

f:id:sbc_ohara:20210923000828p:plain

4)アプリケーションサイトを起動します
①PolardbインスタンスにECSのホワイトリストを追加します

f:id:sbc_ohara:20210923000838p:plain

f:id:sbc_ohara:20210923000846p:plain

②下記コマンドでアプリケーションを起動します

# cd shop
# ./run.sh

f:id:sbc_ohara:20210923000856p:plain

f:id:sbc_ohara:20210923000904p:plain

f:id:sbc_ohara:20210923000912p:plain

5)下記のアプリケーションサイトをアクセスします
①アプリケーションサイトをアクセスします

http://47.74.57.81/index.action

f:id:sbc_ohara:20210923000922p:plain

②オーダーを作成します
このDemoは中国語で作られたため、キャプチャーは中国語で表示されています

f:id:sbc_ohara:20210923000933p:plain

f:id:sbc_ohara:20210923000942p:plain

f:id:sbc_ohara:20210923000950p:plain

f:id:sbc_ohara:20210923000957p:plain

ここまでアプリケーションのマイグレーションが無事完成しました。

以上、Part1~Part5を通じて、Oracle DatabaseからPolarDB-Oへのマイグレーション手法のご紹介でした。
Oracle DatabaseからPolarDB-Oへのマイグレーションを検討されている方はご参考に頂ければ大変幸いです。
以上、長文ありがとうございました。

Special Thanks, Nancy

www.sbcloud.co.jp

www.sbcloud.co.jp

www.sbcloud.co.jp

www.sbcloud.co.jp

www.sbcloud.co.jp