新人4人で奮闘!~Oracle Database Cloud Service データ移行検証(後編)~



伊藤 浩輝(協力:中島 ひとみ、高山 圭寿、劉 月晴)

オラクル事業部
システムインテグレーション担当

伊藤 浩輝
協力:
サポート・サービス担当 中島 ひとみ、高山 圭寿
グローバル戦略担当 劉 月晴

はじめに

お久しぶりです。NTTデータ先端技術の伊藤 浩輝です。
今回のコラムは前回(http://www.intellilink.co.jp/column/oracle-promenade/2018/112200 )に引き続き、オラクル事業部の同期4人で取り組んだ、DBCS環境へのデータ(スキーマ、表領域)移行検証の後編になります。前編ではPDBの「Unplug/Plug」でのデータ移行方法をご紹介しましたが、後編では「Data Pump」、「トランスポータブル表領域」でのデータ移行の手順とOracle Database Cloud Service (以下、DBCS)環境へデータ移行をする際の注意点、クラウド環境ならではの気づきなどについてご紹介します。

移行手順

DataPump

では、Data Pumpの移行方式手順を紹介します。移行元DBが11gR2(noncdb)、12cR2(onpcdb)のそれぞれでDBCS環境のCDB(cdbcloud)にプラグされているPDB(PDB1)へTESTスキーマを移行します。前編で説明不足でしたが、11gR2のDBに作成した表領域はTDE暗号化せず、12cR2のDBに作成した表領域はTDE暗号化を実施しています。よって、前編のPDBのUnplug/Plug同様、移行元が12cR2の場合のみ、通常の手順に加えて暗号化鍵のexport/importが必要です。(暗号化鍵の移行手順は前編参照)

① 移行前準備

移行元のDB上に移行用TESTスキーマを作成し、TEST表にデータが存在することを確認します。(オンプレミス側作業)

$ sqlplus sys/xxx@<DB名> as sysdba
SQL> create user test identified by welcome1 default tablespace test;
ユーザーが作成されました。
SQL> grant create session,resource,unlimited tablespace to test;
権限付与が成功しました。
SQL> conn test/welcome1@<DB名>
接続されました。
SQL> create table test (empno VARCHAR2(10)) TABLESPACE test;
表が作成されました。
SQL> insert into test (empno) values('10');
1行が作成されました。
SQL> select * from test;
EMPNO
--------------------------
10
SQL> exit

エクスポート用ディレクトリオブジェクトを作成します。(オンプレミス側作業)

$ mkdir /u01/app/oracle/admin/<DB名>/dpdump/for_cdbcloud
$ sqlplus system/welcome1@<DB名> as sysdba
SQL> CREATE DIRECTORY db_for_cdbcloud AS '/u01/app/oracle/admin/<DB名>dpdump/for_cdbcloud';
ディレクトリが作成されました。
SQL> exit

インポート用ディレクトリオブジェクトを作成します。(DBCS側作業)

$ mkdir /u01/app/oracle/admin/cdbcloud/dpdump/from_onp
$ sqlplus sys/xxx@pdb1 as sysdba
SQL> CREATE DIRECTORY db_from_onp AS '/u01/app/oracle/admin/cdbcloud/dpdump/from_onp';
ディレクトリが作成されました。

インポート先表領域を作成します。(DBCS側作業)

SQL> CREATE TABLESPACE test datafile '/u02/app/oracle/oradata/cdbcloud/PDB1/test.dbf' SIZE 100M AUTOEXTEND ON MAXSIZE UNLIMITED;
表領域が作成されました。
SQL> exit

② TESTスキーマをエクスポートします。(オンプレミス側作業)

(11gR2)
$ expdp system/xxx@noncdb SCHEMAS=test DIRECTORY=db_for_cdbcloud COMPRESSION=ALL ENCRYPTION=ALL ENCRYPTION_PASSWORD=encryption
(12cR2)
$ expdp system/xxx@onppdb SCHEMAS=test DIRECTORY=db_for_cdbcloud COMPRESSION=ALL ENCRYPTION=ALL

(出力:12cR2)
Export: Release 12.2.0.1.0 - Production on 火 2月 19 15:28:05 2019
Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
接続先: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
"SYSTEM"."SYS_EXPORT_SCHEMA_02"を起動しています: system/********@pdb1 SCHEMAS=test DIRECTORY=db_for_cdbcloud COMPRESSION=ALL ENCRYPTION=ALL
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
・・・(省略)・・・
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
. . "TEST"."TEST"                               4.687 KB       1行がエクスポートされました
マスター表"SYSTEM"."SYS_EXPORT_SCHEMA_02"は正常にロード/アンロードされました
******************************************************************************
SYSTEM.SYS_EXPORT_SCHEMA_02に設定されたダンプファイルは次のとおりです:
  /u01/app/oracle/admin/onpcdb/dpdump/for_cdbcloud/expdat.dmp
ジョブ"SYSTEM"."SYS_EXPORT_SCHEMA_02"が火 2月 19 15:28:57 2019 elapsed 0 00:00:50で正常に完了しました

ダンプファイルが作成されていることを確認します。
$ ls –l /u01/app/oracle/admin/onpcdb/dpdump/for_cdbcloud/expdat.dmp

③ オンプレミス環境からDBCS環境へデータを転送します。

scpコマンドやファイル転送ツール等を用いてexportしたダンプファイルを①で作成したインポート用ディレクトリへ転送します。

④ 暗号化鍵のエクスポートとインポート実施します。手順は 前編 の内容を参考にしてください。

⑤ データをインポートします。(DBCS側作業)

$ impdp system/xxx@pdb1 SCHEMAS=test DIRECTORY=db_from_onp

Import: Release 12.2.0.1.0 - Production on Tue Feb 19 06:45:28 2019
Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Master table "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01":  system/********@pdb1 SCHEMAS=test DIRECTORY=DB_FROM_ONP 
Processing object type SCHEMA_EXPORT/USER
・・・(省略)・・・
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "TEST"."TEST"                               4.687 KB       1 rows
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully completed at Tue Feb 19 06:45:46 2019 elapsed 0 00:00:18

⑥ 確認として、移行したTESTスキーマ内の表にSELECT文を発行し、移行したスキーマを確認します。(DBCS側作業)

$ sqlplus system/xxx@pdb1
SQL>  select * from test;
EMPNO
----------------------------
10

トランスポータブル表領域

最後にトランスポータブル表領域での移行方法です。この検証では11gR2のTEST表領域をクラウド環境のcdbcloudへ移行します。下記マニュアル記載の通り、透過的データ暗号化用のOracleウォレットがすでに存在するデータベースには、暗号化された表領域をトランスポートできません。よってこの検証では暗号化されていない表領域を移行します。

① ディレクトリオブジェクトを作成します。(オンプレミス側作業)

$ mkdir /u01/app/oracle/admin/noncdb/dpdump/for_cdbcloud
$ sqlplus / as sysdba
SQL> CREATE DIRECTORY db_for_cdbcloud AS '/u01/app/oracle/admin/noncdb/dpdump/for_cdbcloud';
ディレクトリが作成されました。

② インポート用ディレクトリオブジェクトを作成します。(DBCS側作業)

$ mkdir /u01/app/oracle/admin/cdbcloud/dpdump/from_onp
$ sqlplus sys/xxx@pdb1 as sysdba
SQL> CREATE DIRECTORY db_from_onp AS '/u01/app/oracle/admin/cdbcloud/dpdump/from_onp';
ディレクトリが作成されました。
SQL> exit

③ 移行する表領域のデータファイルを問い合わせます。⑥でデータファイルを移行する際にファイルパスが必要となるため確認します。(オンプレミス側作業)

SQL> select tablespace_name,file_name FROM dba_data_files where tablespace_name='TEST';
TABLESPACE FILE_NAME
---------- --------------------------------------------------
TEST       /u01/app/oracle/oradata/noncdb/test.dbf

④ 移行する表領域を読み取り専用にします。STATUSが「READ ONLY」であることを確認します。(オンプレミス側作業)

SQL> select tablespace_name, status from dba_tablespaces where tablespace_name ='TEST';
TABLESPACE STATUS
---------- ----------
TEST       READ WRITE
SQL> alter tablespace test read only;
表領域が変更されました。
SQL> select tablespace_name, status from dba_tablespaces where tablespace_name ='TEST';
TABLESPACE STATUS
---------- ----------
TEST       READ ONLY
SQL> exit;

⑤ ダンプファイルを作成します。(オンプレミス側作業)

$ expdp system/xxx TRANSPORT_TABLESPACES=TEST TRANSPORT_FULL_CHECK=YES DIRECTORY=DB_FOR_CDBCLOUD
(省略)
トランスポータブル表領域TESTにはデータファイルが必要です:
/u01/app/oracle/oradata/noncdb/test.dbf

⑥ オンプレミス環境からDBCS環境へデータを転送します。

Scpコマンドやファイル転送ツールを用いて、⑤でexportしたダンプファイルを①で作成したimport用ディレクトリへ転送します。 また、③で確認したデータファイルもDBCS環境に転送します。(DBCS側作業)

(転送後のDBCS環境)
$ ls /u02/app/oracle/oradata/cdbcloud/PDB1/test.dbf
test.dbf
$ ls /u01/app/oracle/admin/cdbcloud/dpdump/from_onp
expdat.dmp

⑦ ユーザーの作成(DBCS側作業)

移行元の表領域上のオブジェクト所有ユーザーを作成し、権限を付与します。

$ sqlplus sys/xxx@pdb1 as sysdba
SQL> create user test identified by welcome1 account unlock;
User created.
SQL> grant connect,resource,unlimited tablespace to test;
Grant succeeded.
SQL> exit

⑧ 表領域のインポートを行います。(DBCS環境)

$ impdp system/xxx@pdb1 DIRECTORY=db_from_onp TRANSPORT_DATAFILES='/u02/app/oracle/oradata/cdbcloud/PDB1/test.dbf'
(省略)
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Mon Feb 18 08:04:48 2019 elapsed 0 00:00:04

⑨ 移行した表領域を確認します。

select tablespace_name from dba_tablespaces where tablespace_name=’TEST’;
tablespace_name
-----------------------
TEST

上記手順にはエンディアンの確認方法および表領域が自己完結型かどうかの確認方法については記載しておりません。確認手順は下記マニュアルをご確認ください。

移行方法まとめ、気づき

以下に今回の各移行方式の検証で行った暗号化、圧縮の方式についてまとめました。

表1 データ移行方式
 データ移行方式移行元移行対象暗号化対応圧縮対応
1Unplug/Plug12cR2PDB移行対象の表領域をTDE暗号化-
2Data Pump12cR2スキーマENCRYPTIONパラメータCOMPRESSIONパラメータ
3Data Pump11gR2スキーマENCRYPTIONパラメータCOMPRESSIONパラメータ
4トランスポータブル表領域11gR2表領域※移行時のTDE暗号化はサポート外-

DataPumpの暗号化、圧縮を実施する際はOracle EE+有償オプション(Oracle Advanced Security、Oracle Advanced Compression)が必要となります。
また、上記表のUnplug/Plugとトランスポータブル表領域の圧縮欄は「-」となっております。今回の検証では未実施ですが、実施する際はOSコマンド(zip,tar等)やサードパーティー製のツールを使用できます。

これまで紹介した各移行方法はオンプレミス同士のデータ移行とほとんど手順は変わらないかと思います。しかし、オンプレミス環境からクラウド環境へデータ移行するうえではセキュリティ、ネットワーク面で考慮すべき点がいくつかあるかと思います。
まずはセキュリティ面です。移行データがインターネット上に晒されるため、紹介した各移行方法を用いるのであれば、「表1データ移行方式」の[暗号化対応]列に記載のオプションでデータを暗号化しましょう。
次にネットワーク面です。今回はモバイルWi-Fiを使用してクラウド環境にデータを移行しました。検証目的で小さなデータを移行したため、特に問題はなかったのですが、大きなサイズのデータを移行するとなると、帯域も大きなネットワークを使用してデータの転送する必要があります。大きな帯域のネットワークが用意できない場合、サイズの大きなファイルはファイル分割を行ってから転送することをお勧めします。

また、DBCS環境に限った話ではないかと思いますが、以下の気づきも得られました。

クラウド環境のメンテナンス時間に注意すること。

今回の移行検証中に突然クラウド環境にssh接続できなくなることがありました。ふとOracle社からのメールを読むとメンテナンスの実施について記載されておりました。メンテナンス時間はいつなのか、作業前に確認しましょう。

バースティング(追加課金)に注意すること。

契約しているDBCS環境の課金体系が従量制なのか非従量制なのか、契約内で使用できるDBのエディション(ライセンス)はどれかを確認しましょう。DBCSでは2019年2月現在、以下のソフトウェア・バージョンを選択できます。

  • Standard Edition
  • Enterprise Edition
  • Enterprise Edition – High Performance■
  • Enterprise Edition – Extreme Performance★

われわれの検証時の契約では★のソフトウェア・バージョンを4つまで同時に稼働させることができましたが、あるとき、★2つ、■2つを稼働させてしまい、追加費用が掛かってしまいました。契約していない■を起動させたことが原因でした。(部長、ごめんなさい!)
契約内容に関しては常に意識する必要があります!

終わりに

前後編にわたり、オンプレミス環境のデータベース(表領域、スキーマ)をDBCS環境へ移行する手順について紹介しました。
手順をご覧いただくとDBCS環境でもオンプレミス環境で行っていた操作に大きな変わりはなかったと思います。
これまで培ったOracle知識・技術がそのまま活かせます!
オンプレミス環境では有償オプションであるOracle Advanced SecurityのTDE暗号化がDBCS環境であれば標準で利用できることからもOracle社がクラウド分野に力を入れているのが伝わってきました。
今後も今回のような検証や技術情報の発信を積極的に行っていきたいと考えておりますので、よろしくお願いいたします!

お知らせ

JPOUG主催「Oracle Database 入学式 2019」

これから新しくOracle Databaseを学びたい方向けの非常に初歩的な内容をセミナー形式で行うイベントです。

※ 今回からJPOUG主催イベントの運営お手伝いをさせていただくことになりましたので、告知します!

JPOUG 主催 「Oracle Database入学式 2019 – 保護者の方はご遠慮ください」

日時2019年4月17日 (水) 19:00 - 20:30
場所NTTデータ先端技術株式会社 1F コラボレーションルーム
登壇者渡部 亮太さん

イベント詳細と参加登録は以下をご覧ください。

  • Japan Oracle User Group(JPOUG)とは
    Oracle Databaseを中心にMySQLやJavaなどのオラクル製品およびサービスはもちろんIT関連技術全般にわたる様々な情報を交換することを活動とするグループです。
    過去のイベント開催模様、発表資料等は以下からご覧いただけます。


新人4人で奮闘!~Oracle Database Cloud Service データ移行検証(後編)~