こんにちは、SBCエンジニアZです。
最近はアリババクラウド の Advanced Database & Application Migration(ADAM) という製品を少々触りました。
Advanced Database & Application Migration(ADAM) というのはアリババクラウドが開発したオンプレミスからデータベースとアプリケーションをクラウドへのマイグレーションサービスです。
長年のOracleデータベースとアプリケーションのストラクチャー解析、システム改造、移行経験を参考して開発したクラウド化ソリューションで、エンタープライズ向けのデータ・アプリケーション遷移・運用サービスを提供しています。
まだ中国国内向けにしか提供されていませんが、機会があって、ADAMの動作確認を試しました。
ADAM機能紹介
ADAMには大きく4つの機能が構成されています:
1、データベース移行診断
2、アプリケーション移行診断
3、データベース移行
4、アプリケーション移行
まずはデータベースの移行評価を試してみました、本編は機能1の検証になります。 ほかの機能は条件揃った次第また試します。
ADAM動作確認
=====検証環境用意=====
検証環境情報:
Oracleサーバー:11gR2(Linux 64bit)
デフォルトのHRスキーマに少し更新を入れて、検証で使います。
SQL> select table_name from user_tables; TABLE_NAME -------------------------------------------------------------------------------- COUNTRIES JOB_HISTORY EMPLOYEES JOBS DEPARTMENTS LOCATIONS REGIONS 7 rows selected. SQL> desc EMPLOYEES; Name Null? Type ----------------------------------------- -------- ---------------------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4) ID_PHOTO BLOB
従業員を管理するテーブルEMPLOYEESには ID_PHOTOという顔写真欄を追加しました、属性はBLOBで、ほかのデータベースと互換性を持ってないので、どんな分析結果が出るか確認してみたいですね。
中には一部の従業員のID用顔写真をサーバにアップロード済みです。
顔写真を更新するプロシージャを新規追加して更新します:
DROP PROCEDURE IF EXISTS img_insert create or replace procedure img_insert(tg_id NUMBER,tg_filename VARCHAR2) as l_bfile bfile; l_blob blob; begin update EMPLOYEES set ID_PHOTO=empty_blob() where EMPLOYEE_ID=tg_id return ID_PHOTO into l_blob; l_bfile :=bfilename('IMAGES', tg_filename); dbms_lob.open(l_bfile, dbms_lob.file_readonly); dbms_lob.loadfromfile(l_blob, l_bfile, dbms_lob.getlength(l_bfile)); commit; dbms_lob.close(l_bfile); end; / exec img_insert(100,'100.jpg'); exec img_insert(101,'110.jpg');
確認してみると、
社員番号100のStevenと社員番号101のNeenaには顔写真が付いています。
SQL> select employee_id,first_name from employees where id_photo is not NULL; EMPLOYEE_ID FIRST_NAME ----------- ------------------------------------------------------------ 100 Steven 101 Neena
これで検証用のデータベースを準備できました。
=====データベース情報収集=====
ADAM Agentを使ってデータベースのメタデータを収集する準備をします。
必要なツール:ADAM Agent(rainmeter)
ツールをコンソールからダウンロード可能ですが、ダウンロードするにはチケット経由で申請する必要があります。
まず、Oracleの設定をいくつか確認する必要があります:
アーカイブログモード:
SQL> SELECT LOG_MODE FROM V$DATABASE; LOG_MODE ------------------------------------ ARCHIVELOG
サプリメントルログ有効化:
SQL> select supplemental_log_data_min from v$database; SUPPLEMENTAL_LOG_DATA_MI ------------------------ NO SQL> alter database add supplemental log data; Database altered. SQL> select supplemental_log_data_min from v$database; SUPPLEMENTAL_LOG_DATA_MI ------------------------ YES
データ採取用ユーザの作成&権限付与:
SQL> create user eoa_user identified by "eoaPASSW0RD" default tablespace users; User created. SQL> grant connect,resource,select_catalog_role,select any dictionary to eoa_user; Grant succeeded. SQL> grant execute on DBMS_LOGMNR to eoa_user; Grant succeeded. SQL> grant execute on dbms_metadata to eoa_user; Grant succeeded. SQL> grant select any transaction to eoa_user; Grant succeeded. SQL> grant select any dictionary to eoa_user; Grant succeeded. SQL> grant select any transaction to eoa_user; Grant succeeded. SQL> grant analyze any to eoa_user; Grant succeeded.
ADAM Agentはインストール不要で、ツールファイル解凍すれば、実行可能です。
Oracleのバージョンによって、いつくかスクリプトが用意されています。
今回は Oracle 11gのため、collect_11g.shのほうを実行します:
[adam@iZxxxxx2zfpZ rainmeter]$ sh collect_11g.sh -u eoa_user -p eoaPASSW0RD -h localhost -P 1521 -d orcl [2020-02-14 17:03:59] Welcome to the ADAM database collector(v2.21)! [2020-02-14 17:04:00] Account permission verification succeeded. [2020-02-14 17:04:04] Start collecting at 2020-02-14 17:04:04 [2020-02-14 17:04:35] Successful database collection. [2020-02-14 17:04:35] Database collection takes a total of 0 minutes. [2020-02-14 17:04:35] Data verification succeeded! [2020-02-14 17:04:35] ***************************************************************************** [2020-02-14 17:04:35] * Collect Successfully! [2020-02-14 17:04:35] * [2020-02-14 17:04:35] * Complete the file packaging, the package result path is: [2020-02-14 17:04:35] * /home/adam/ADAM/rainmeter/out/data.zip [2020-02-14 17:04:35] * Next Step: go to [https://adam.console.aliyun.com/] to analyze the data! [2020-02-14 17:04:35] *****************************************************************************
実行が成功したら、フォルダー配下にoutというフォルダーができ上がり、中にdata.zipという収集結果ファイルがありました。
このファイルを解凍して見ると、中身はいくつかのcsvファイル、それぞれはデータベースの各オブジェクトらしいです。
-rwxr-xr-x 1 user staff 301 Feb 14 15:02 eoa_tmp_database.csv -rwxr-xr-x 1 user staff 1199 Feb 14 15:02 eoa_tmp_database_parameters.csv -rwxr-xr-x 1 user staff 223 Feb 14 15:02 eoa_tmp_instance.csv -rwxr-xr-x 1 user staff 260 Feb 14 15:02 eoa_tmp_log_info.csv -rwxr-xr-x 1 user staff 98 Feb 14 15:02 eoa_tmp_objects.csv -rwxr-xr-x 1 user staff 631 Feb 14 15:02 eoa_tmp_osstat.csv -rwxr-xr-x 1 user staff 150376 Feb 14 15:02 eoa_tmp_qps.csv -rwxr-xr-x 1 user staff 21239 Feb 14 15:02 eoa_tmp_sequences.csv -rwxr-xr-x 1 user staff 142 Feb 14 15:02 eoa_tmp_services.csv -rwxr-xr-x 1 user staff 124 Feb 14 15:02 eoa_tmp_session_hist.csv -rwxr-xr-x 1 user staff 2637181 Feb 14 15:02 eoa_tmp_synonyms.csv -rwxr-xr-x 1 user staff 2810 Feb 14 15:02 eoa_tmp_system_metric.csv -rwxr-xr-x 1 user staff 2754686 Feb 14 15:02 eoa_tmp_tab_priv.csv -rwxr-xr-x 1 user staff 131376 Feb 14 15:02 eoa_tmp_tps.csv -rwxr-xr-x 1 user staff 288769 Feb 14 15:02 eoa_tmp_types.csv -rwxr-xr-x 1 user staff 412 Feb 14 15:02 eoa_tmp_versions.csv -rwxr-xr-x 1 user staff 54441 Feb 14 15:02 eoa_tmp_vparameter.csv
こちらのファイル(Zipファイルのまま)をADAM コンソールで分析します。
=====データベース分析=====
ADAMコンソールにログインすれば、Portrait Managementというメニューがあります、 データベースの情報をポートレートとして作成し分析するという理解で良いでしょう。
新規ポートレートを作成し、情報入力をします。
Agentから収集結果ファイルをアップロードし、分析開始します。
分析が終わりますと、データベースのポートレートができて、いろんなグラフ情報が表示されます。
データベース全体情報
オブジェクト構成情報、
AlibabaCloudが提供しているデータベースサービスとの互換性情報
オブジェクトの互換性情報
互換性がもっとも高いデータベースサービスがPOLARDBであることがわかります。
SQLの互換性情報
ポートレート作成完了後、移行先がPOLARDB for Oracleである想定のプロジェクトを立ち上げて、マイグレーションアセスメントをします。
詳細な情報はPDFレポートとしてダウンロードできます。
また、マイグレーションプランはマイグレーション実行するときに必要なファイルです。
まず、気になる全体的な互換性の分析結果を見てみます:
POLARDB for Oracleとの互換性は96%です:
詳細を確認すると、完全な互換性を持つオブジェクトは0、ADAMで修正可能なオブジェクトはほとんどで、完全に互換できないプロシージャが一つあります、これは従業員の顔写真を更新するプロシージャですね、想定内です。
ではオブジェクトの修正案がどうなるか、確認します:
ADAMコンソールのマイグレーションプロジェクトで互換性分析の詳細から各オブジェクトのDDL定義と移行先DDL案があります。
例えば、テーブル:DEPARTMENTSのDDL修正案は下記のようになります。 Oracle定義:
CREATE TABLE "HRCOPY"."DEPARTMENTS"( "DEPARTMENT_ID" NUMBER(4, 0), "DEPARTMENT_NAME" VARCHAR2(30) CONSTRAINT "DEPT_NAME_NN" NOT NULL ENABLE, "MANAGER_ID" NUMBER(6, 0), "LOCATION_ID" NUMBER(4, 0) ); ALTER TABLE "HRCOPY"."DEPARTMENTS" ADD CONSTRAINT "DEPT_ID_PK" PRIMARY KEY("DEPARTMENT_ID") ENABLE;
POLARDB for ORACLEへ移行する際の修正案:
CREATE TABLE HRCOPY.DEPARTMENTS( -- @DEPARTMENT_ID DEPARTMENT_ID NUMBER(4, 0), -- @DEPARTMENT_NAME DEPARTMENT_NAME VARCHAR2(30) CONSTRAINT DEPT_NAME_NN NOT NULL, -- @MANAGER_ID MANAGER_ID NUMBER(6, 0), -- @LOCATION_ID LOCATION_ID NUMBER(4, 0), CONSTRAINT DEPT_ID_PK_CONSTRAINT PRIMARY KEY(DEPARTMENT_ID) ) WITH OIDS;
そして、互換できないもの、プロシージャ:IMG_INSERT
ローカルのイメージファイルをBLOBタイプで定義しているため、POLARDBは扱いできない、ファイルをOSSに保存してを外部表として管理する必要があります。
以上確認結果で、プロシージャ一つ手動変更必要、ほかは全部ADAMで移行してくれそうです。
POLARDBのサービス内容についてはこちらをご覧ください。 www.sbcloud.co.jp