新人4人で奮闘!~Oracle Database Cloud Service データ移行検証(前編)~
オラクル事業部
システムインテグレーション担当
伊藤 浩輝
協力:
サポート・サービス担当 中島 ひとみ、高山 圭寿
グローバル戦略担当 劉 月晴
はじめに
はじめまして。NTTデータ先端技術の伊藤です。
オラクルマスターを夢見る、入社2年目のオラクル大好きエンジニアです。
現在はとある案件に参画し、Oracle Exadata Database Machineを中心とした製品の構築、試験を担当しています。
InfiniBandスイッチの甲高いファンの音が最近のお気に入りです。
さて、今回のコラムではオラクル事業部の同期4人で取り組んだ、オンプレミス環境からOracle Database Cloud Service (以下、DBCS)環境へのデータ移行検証に関して、前後編に分けて紹介したいと思います。
今回の検証では、代表的な移行方法であるPDBの「Unplug/Plug」、「Data Pump」、「トランスポータブル表領域」を用い、前編では検証環境の構成とPDBの「Unplug/Plug」でのデータ移行の手順、後編では残りの移行手順と各移行方法でDBCS環境へデータ移行をする際の注意点、クラウド環境ならではの気づきなどをまとめました。
DBCS とは、Oracle Cloud の中で、PaaS に位置付けられているクラウドサービスになります。Web コンソールから数クリックで簡単に Oracle Database 環境を構築でき、オンプレミスの Oracle Database と同じソフトウェアを使用していることが特徴です。同じソフトウェアを使用しているということで、これまでに培ったオンプレミスのオラクル知識をそのまま活かすことができます。
クラウド環境だと、セキュリティ面が心配。といった印象を持たれる方もいるかと思いますが、DBCSではOracle Database 12cリリース2のデータベースを選択すると、データベース・デプロイメントの作成時に作成されたUSERS表領域がデフォルトでTDE暗号化されるという仕様になっています。オンプレミスだと追加オプションとして提供されるTDE暗号化がオプションなしで利用できる点も、DBCS の特徴のひとつかと思います。では、本題のデータ移行検証の内容に入ります。
検証環境
移行元のデータベースインスタンス(11gR2と12cR2)上にサンプルスキーマを作成し、DBCS上のデータベースインスタンス(12cR2)にデータを移行します。従来のオンプレのような閉じられた環境ではなく、WANのようなパブリックなネットワークに接続された環境への移行となるため、よりセキュリティを担保した移行が求められることが想定されます。
そこで、本検証では各データ移行方式について、移行元のデータを予め圧縮、暗号化する手順も含め実施しております。
図1 検証環境
- ※1 テーブル・索引がメイン。主キー・外部キー制約はあるものの、シノニムやビューなどは対象外。
- ※2 同期4人の中で移行元が11gR2のチームと12cR2のチームを作り、並行して検証をおこなった関係で、図1のようにそれぞれの移行方法によって移行元DBのバージョンが異なっております。DataPumpに関しては両バージョンで検証しました。
各移行方式の特徴
PDBのUnplug/Plug
PDBをアンプラグした際に出力されるXMLファイルとデータファイルを移行先の環境に配置し、移行先のCDBにプラグすることでDBの移行が可能です。CDBにプラグするため、12c以降のバージョンでしか使用できませんが、手軽に移行することが可能です。
DataPump
従来のexp/impコマンドより高速にデータ移行可能なユーティリティで、10g以降の環境で使用可能です。データベースサーバー側でジョブとして実行されます。実行の停止・再開、暗号化、圧縮など、さまざまな機能がサポートされています。後編で紹介する手順では、暗号化と圧縮の機能を使用しています。
トランスポータブル表領域
表領域をDB間で移動できる機能です。上記のDatapumpではユーザーデータを含んだ中間ファイルが作成されますが、トランスポータブル表領域では、属性情報のみ抽出し、OS上のデータファイルを直接コピーすることで移行が完了します。
環境準備
移行検証を始める前に、オンプレミス、DBCS環境の準備を行います。
オンプレミス環境
今回は移行対象の表領域としてTEST表領域を事前に作成しておきます。図1のとおり、1GBほどのサイズの表領域です。
移行の手順では移行したい表領域に読み替えてください。次に、移行対象の表領域を暗号化します。
まず、キーストアを作成し、CDB,PDBに対して、暗号化鍵の設定を行います。
$ mkdir -p /u01/app/oracle/admin/onpcdb/wallet $ sqlplus / as sysdba SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> administer key management create keystore '/u01/app/oracle/admin/onpcdb/wallet' 2 identified by welcome1; キーストアが変更されました。 SQL> administer key management set keystore open identified by welcome1; キーストアが変更されました。 SQL> select status ,wallet_type from v$encryption_wallet; STATUS WALLET_TYPE ------------------ --------------- OPEN_NO_MASTER_KEY PASSWORD SQL> administer key management set key identified by welcome1 with backup; キーストアが変更されました。 SQL> alter session set container=onppdb; セッションが変更されました。 SQL> show con_name CON_NAME ------------------------------ ONPPDB SQL> administer key management set keystore open identified by welcome1; キーストアが変更されました。 SQL> select status,wallet_type from v$encryption_wallet; STATUS WALLET_TYPE ----------------- ------------------- OPEN_NO_MASTER_KEY PASSWORD SQL> administer key management set key identified by welcome1 with backup; キーストアが変更されました。
PDBの表領域を暗号化します。
SQL> alter pluggable database onppdb close; プラガブル・データベースが変更されました。 SQL> alter session set container=onppdb; セッションが変更されました。 SQL> alter tablespace test encryption offline encrypt; 表領域が変更されました。 SQL> alter tablespace system encryption offline encrypt; 表領域が変更されました。 SQL> alter tablespace sysaux encryption offline encrypt; 表領域が変更されました。 SQL> alter tablespace undotbs1 encryption offline encrypt; 表領域が変更されました。 SQL> alter tablespace users encryption offline encrypt; 表領域が変更されました。 SQL> alter pluggable database onppdb open; プラガブル・データベースが変更されました。 SQL> select tablespace_name, encrypted from dba_tablespaces; TABLESPACE_NAME ENCRYPTED ---------------- ------------ SYSTEM YES SYSAUX YES UNDOTBS1 YES TEMP NO USERS YES TEST YES 6行が選択されました。
DBCS環境
インスタンスを作成します。
https://cloud.oracle.com/ja_JP/sign-in にアクセスし、ログインします。ダッシュボードから、サービスコンソールを開き、インスタンスの作成を行います。
「Instance」、「詳細」と進み、入力に誤りがなければ、「作成」を押下し、作業完了です。
図2 DBCS上でのインスタンス作成
移行手順
PDBのUnplug/Plug
では、PDBのUnplug/Plugの移行方式手順を紹介します。この検証では、移行元DBの表領域が暗号化された状態で、PDB(onppdb)のアンプラグを実施し、DBCS環境のCDB(cdbcloud)へプラグします。DBCS環境ではUSERS表領域がデフォルトでTDE暗号化されているため、通常の手順に加えて暗号化鍵のexport/importが必要となります。
① 移行元PDBのUnplug
移行対象のPDBのデータファイルのパスを確認します。
$ sqlplus / as sysdba SQL> select tablespace_name, file_name from dba_data_files; TABLESPACE_NAME FILE_NAME ---------------- ----------------------------------------------------- SYSTEM /u01/app/oracle/oradata/onpcdb/onppdb/system01.dbf SYSAUX /u01/app/oracle/oradata/onpcdb/onppdb/sysaux01.dbf UNDOTBS1 /u01/app/oracle/oradata/onpcdb/onppdb/undotbs01.dbf USERS /u01/app/oracle/oradata/onpcdb/onppdb/users01.dbf TEST /u01/app/oracle/oradata/onpcdb/onppdb/test.dbf
キーストアをオープンします。
SQL> select status,wallet_type from v$encryption_wallet; STATUS WALLET_TYPE -------- ---------- CLOSED UNKNOWN SQL> administer key management set keystore open identified by welcome1; キーストアが変更されました。 SQL> select status,wallet_type from v$encryption_wallet; STATUS WALLET_TYPE ------- ---------------- OPEN PASSWORD
暗号化鍵をエクスポートします。
SQL> administer key management export encryption keys with secret "ewallet.p12" to '/home/oracle/from_onpremise/export.p12' identified by welcome1; キーストアが変更されました。
PDBをアンプラグします。
SQL> alter pluggable database onppdb close; プラガブル・データベースが変更されました。 SQL> alter pluggable database onppdb unplug into 'onppdb.xml'; プラガブル・データベースが変更されました。 SQL> select pdb_name,status from cdb_pdbs where pdb_name='ONPPDB'; PDB_NAME STATUS -------- --------- ONPPDB UNPLUGGED
PDBを削除します。(データファイルは削除しません。)
SQL> drop pluggable database onppdb; プラガブル・データベースが削除されました。
② オンプレミス環境からDBCS環境へデータの転送
データファイルとxmlファイル、暗号化鍵をWinSCPなどのファイル転送ツールを用いて、DBCS環境へ転送します。
転送済みのデータファイルをDBCS環境のデータファイル格納ディレクトリに移動させます。移行の手順ではすでにファイルを転送済みのものとして記載しています。DBCS環境にログインし、データファイル格納用のディレクトリを作成します。
$ mkdir /u02/app/oracle/oradata/cdbcloud/ONPPDB $ cp -p /home/oracle/from_onpremise/* /u02/app/oracle/oradata/cdbcloud/ONPPDB
XMLファイルの記述をDBCS環境のパスに修正します。
$ sed -i 's,/u01/app/oracle/oradata/onpcdb/onppdb/,/u02/app/o racle/oradata/cdbcloud/ONPPDB/,g' /u02/app/oracle/oradata/cdbcloud/ONPPDB/onppdb.xml
③ DBCS環境のCDB(cdbcloud)へPDBをPlug
キーストアへ暗号化鍵をインポートします。
$ sqlplus / as sysdba SQL> select status,wallet_type from v$encryption_wallet; STATUS WALLET_TYPE ------------------------------ -------------------- OPEN AUTOLOGIN SQL> administer key management import keys with secret "ewallet.p12" 2 from '/tmp/export.p12' force keystore identified by xxx with backup; keystore altered.
PDBをプラグします。
SQL> create pluggable database onppdb using '/u02/app/oracle/oradata/cdbcloud/ONPPDB/onppdb.xml' nocopy ; Pluggable database created.
PDBをOPENします。
SQL> alter pluggable database onppdb open; Warning: PDB altered with errors. SQL> alter session set container=onppdb; Session altered. SQL> administer key management import keys with secret "ewallet.p12" 2 from '/u02/app/oracle/oradata/cdbcloud/ONPPDB/export.p12' force keystore identified by xxxx; keystore altered. SQL> alter pluggable database onppdb close; Pluggable database altered. SQL> alter pluggable database onppdb open; Pluggable database altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 4 ONPPDB READ WRITE NO
確認として、移行したPDB内の表にselect文を発行します。
SQL> select * from nation; N_NATIONKEY N_NAME N_REGIONKEY N_COMMENT ----------- ------ ----------- ------------ 0 ALGERIA 0 haggle. carefully final deposits 1 ARGENTINA 1 al foxes promise slyly according ・・・・
終わりに
前編ではDBCS環境へのデータ移行検証としてPDBの「Unplug/Plug」での移行をご紹介しました。
今回は暗号化された表領域を含むPDBの移行方法でしたが、移行元が暗号化されていない場合は、暗号化鍵のインポートが必要ないことと、移行先のDBCS上のDBの暗号化鍵を格納しているwalletのステータスがデフォルトでAUTOLOGINとなっているため、DBCS環境にデータファイル等の資材を配置すれば、そのままPDBのプラグを行うことが可能です。
後編では残りの「DataPump」、「トランスポータブル表領域」での移行方法を紹介するとともに、各移行方法でDBCS環境へデータ移行をする際の注意点、クラウド環境ならではの気づきのポイントなどを解説します。
Tweet