ADB HOL #4-1 : 既存のOracle DatabaseをAutonomous Databaseに移行しよう

Version 34

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう

    コンテンツ一覧に戻るAutonomous Database ハンズオンラボ

     

     

    既存のOracle DatabaseのデータをAutonomous に移行するにはどうすれば良いでしょうか?

    この章ではサンプルのデータベースを用意して、そこに配置されているデータをAutonomous DatabaseにData Pumpを使って移行する手順を記載しています。

     

    尚、本章はADB HOL #2-2を実施済みであることを前提に記載しています。

     

     

    作業の流れ

    1. 事前準備)移行元となるデータベースの作成
    2. 事前準備)移行対象のスキーマを作成
    3. 移行対象のスキーマをエクスポート
    4. ダンプファイルをオブジェクトストレージにアップロード
    5. Autonomous Databaseへのインポート

     

    集合ハンズオンセミナーにおいては時間の都合上、全てのステップは実施しません。講師の指示に従ってください。

     

     

    所要時間 : 約150分 (DBCSインスタンスの作成時間を含む)

     

     

    1. 事前準備)移行元となるデータベースの作成

    まず最初に、移行元となるOracle Databaseを構成します。

    ここではOracle Database を簡単に作成できるOCI DBCSを利用してインスタンスを一つ作成します。

     

    1. こちらを参考に、データベース・インスタンスを作成ください。
    Tera Termを起動しDBCSインスタンスにSSHでアクセス、dbcli によるDBシステムの確認まで一通り実施いただくとスムーズです。

     

    尚、本ハンズオンガイドでは、以下の値でインスタンスが作成されていることを前提としています。

    (その他、DBシステム名やシェイプ等は基本的に任意です)

     

        • ホスト名接頭辞 : dbcs01
        • データベースのバージョン:19c
        • パスワード:WelCome123#123#

     

     

    2. 事前準備)移行対象のスキーマの作成

    次に作成したDBCSインスタンス内に、移行対象となるHRスキーマを作成します。

    (HRスキーマのインストール方法に関するマニュアルはこちら

     

    1. DBCSインスタンス上のPDBにアクセス

     

    1-1. 引き続き、Tera Termを利用してDBCSインスタンスに接続します。

     

    1-2. opc ユーザーからoracleユーザーにスイッチしておきます。

    $ sudo su - oracle

     

    1-3. SQL*PlusでDBCSインスタンスに接続します。

     

    $ sqlplus / as sysdba

     

    1-4. DBCSインスタンスに構成されているPDBの一覧を確認します。

     

    SQL> show pdbs

     

     

     


    1-5. PDBインスタンス名を指定してスイッチします。(ここではデフォルトで作成されるPDBにアクセスしています。)

     

    SQL> alter session set container = PDB1 ;

     

    2. HRスキーマを作成します。

     

    2-1. hr_main.sqlを実行します。(数分でHRスキーマが構成されます)

     

    SQL> @?/demo/schema/human_resources/hr_main.sql

     

    HRスキーマのパスワード等を聞かれますので、以下を参考にご入力ください。

     

    パスワード : WelCome123#123#

    デフォルト表領域 : USERS

    デフォルト一時表領域 : TEMP

    ログ : $ORACLE_HOME/demo/schema/log

     

     

    特にエラーなく終了したら exit でSQL*Plus を終了してください。

     

     

    3. 次に作成したHRスキーマに接続し、表、索引等のオブジェクトを確認しておきます。

     

    3-1. CDB経由ではなくPDBに対して直接アクセスするために、tnsnames.ora にPDBへの接続情報を追記します。

     

    $ vi $ORACLE_HOME/network/admin/tnsnames.ora

     

    以下を追記します。

     

    PDB1 =

      (DESCRIPTION =

        (ADDRESS_LIST =

          (ADDRESS = (PROTOCOL = TCP)(HOST = dbcs01.subnet.vcn.oraclevcn.com)(PORT = 1521))

        )

        (CONNECT_DATA =

          (SERVICE_NAME = pdb1.subnet.vcn.oraclevcn.com)

        )

      )

    $ cat $ORACLE_HOME/network/admin/tnsnames.ora

     

     

     

    3-2. SQL*Plus でPDB上のHRスキーマに接続します。

    $ sqlplus hr/WelCome123#123#@pdb1

     

     

    3-3. 以下のSQLを貼り付け、生成されたオブジェクトを確認します。

     

    set lines 120

    set pages 9999

    col OBJECT_TYPE for a20

    col OBJECT_NAME for a30

     

    select object_type, object_name from user_objects order by 1,2 ;

     

     

     

    3-4. SQL*Plusを終了します。

    SQL> exit

     

    スキーマ・アドバイザを利用した事前チェック

    Autonomous Databaseではセキュリティや性能の観点からいくつかの機能に制約が設けられていますが、

    移行対象のデータベースにおいて利用している列の定義などが、移行先のAutonomous Databaseでも利用可能か、事前にチェックしておくことが可能です。

     

    ダウンロード:Oracle Autonomous Database Schema Advisor (Doc ID 2462677.1)

    参考ブログ:Schema Advisor の利用

     

     

    3. 移行対象のスキーマをエクスポート

    次に作成したHRスキーマをData Pumpを利用してDBCSインスタンスのOS上のファイルシステムにエクスポートします。

     

    1. エクスポートを実行するスクリプトを用意します。

     

    1-1. Tera Termを利用してDBCSインスタンスにopcユーザーで接続します。

     

    1-2. opc ユーザーからoracleユーザーにスイッチしておきます。

     

    $ sudo su - oracle

     

     

    1-3. 作業用ディレクトリを作成します。

    $ mkdir -p ~/mig2adb/dumpdir

    $ cd ~/mig2adb

     

    1-4. エクスポートを実行するスクリプトを以下からコピーして作成します。

    $ vi expdp_hr.sh

     

    #!/bin/sh

     

    expdp \"sys/WelCome123#123#@pdb1 as sysdba\" \

    exclude=cluster,db_link \

    parallel=4 \

    schemas=hr \

    compression=all \

    filesize=1GB \

    directory=test_dir \

    dumpfile=export_hr_%u.dmp

     

    補足)

          • データサイズが大きい場合は、データ転送、ロード性能の向上のため、parallelオプションを利用しましょう。
            指定する値は少なくとも移行先のADBのOCPU数と同じか、それよりも大きい値(2倍から3倍)がおススメです
          • dumpfile句に指定するファイル名はにはワイルドカード(%u)を付けてください。複数のファイルを同時に出力することで高速化が可能です。

             

          • filesize句は5GBよりも小さい値を指定してください。ブラウザ経由でオブジェクトストレージに転送できるデータは1ファイル辺り最大5GBの制限があるためです。
          • excludeオプションを利用することで、不要なオブジェクトを除いてエクスポートすることが可能です。
            例えばADWを利用するような分析系のアプリの場合において、性能観点で付与した索引はExadataを利用すると不要になることが多いため、IndexをExcludeの引数に指定します。詳細はマニュアルを参照ください

     

    1-5. 実行権限を付与します。

    $ chmod +x expdp_hr.sh

     

     

    2. DBCSインスタンス上のPDBに接続して、ダンプファイルの出力先を登録します(ディレクトリ・オブジェクトを作成します)。

     

    2-1. SQL*PlusでDBCSインスタンスに接続します。

     

    $ sqlplus / as sysdba

     

     

    2-2. 次にPDBに接続するために、このDBCSインスタンスに構成されているPDBの一覧を確認します。

     

    SQL> show pdbs

     

     

    2-3. PDBインスタンス名を指定してスイッチします。(ここではデフォルトで作成されるPDBにアクセスしています。)

     

    SQL> alter session set container = PDB1 ;

     

     

    2-4. ディレクトリ・オブジェクトを作成し、ダンプファイルの出力先をデータベースに登録します。

     

    SQL> create or replace directory TEST_DIR as '/home/oracle/mig2adb/dumpdir' ;

     

     

    2-5. ディレクトリ・オブジェクトに対する操作権限をHRスキーマに付与しています。

     

    SQL> grant read, write on directory TEST_DIR to HR ;

     

     

    2-6. SQL*Plusを終了します。

     

    SQL> exit

     

     

     

    3. エクスポートを実行します。

     

    3-1. スクリプトが配置してある作業ディレクトリに移動します。

    $ cd /home/oracle/mig2adb

     

    3-2. エクスポートを実行します。特にエラーが出なければOKです。

    $ ./expdp_hr.sh

     

    補足)データサイズに依存しますが、大量データをエクスポートする際は、以下のようにnohupコマンドを利用してください。

    こうすることで、仮想マシンとのネットワーク通信が万が一切断されたとしても、仮想マシン上で本スクリプトの実行を継続することが可能です。

    $ nohup ./expdp_hr.sh &

     

    3-3. /home/oracle/mig2adb/dumpdir 以下にダンプファイルが複数が出力されているので、任意のツール(WinSCP等)を利用して手元のPCにコピーしてください。

     

     

    • 本ハンズオンガイドではOCI DBCSにプリインストールされているData Pumpを利用しますが、12.2.0.1以前のOracle Clientを利用する場合や、その他詳細情報についてはマニュアル(ADW / ATP)を参照ください。
    • パラレルオプションを利用する場合、ソースDBがEnterprise Editionである必要があります。詳細はマニュアルを参照ください。
    • 圧縮オプションを利用する場合は、ソースDBが11g以上でありAdvanced Compression Optionが必要になります。詳細はマニュアルを参照ください。

     

     

     

    4. ダンプファイルをオブジェクトストレージにアップロード

    次に、手元にダウンロードしてきたダンプファイルをオブジェクトストレージにアップロードします。

     

    通常Data Pumpを利用する場合、ディレクトリ・オブジェクトを作成しそこからインポートしますが、

    ADBは仕様上OS領域にアクセスできないため、オブジェクトストレージ経由でロードする必要があります。

     

     

    1. ADB HOL #2-2 を参考に、手元のPCに保存してある全てのダンプファイルをバケットadb-hol-bucket01にアップロード、ファイルにアクセスするためのURLを取得してください。

     

     

    5. Autonomous Databaseへのインポート

    それではオブジェクトストレージ上のダンプファイルをADBインスタンスにインポートしてみましょう。

     

    1. Tera Termを起動し、ADB HOL#3-1で作成した仮想マシンにopcユーザーでログインします。

         (上記ステップ1にて作成したDBCSインスタンスではないことにご注意ください。)

     

    2. opcユーザーからoracleユーザにスイッチします。

    $ sudo su - oracle

     

    3. 作業ディレクトリに移動します

    $ cd ~/labs/datapump

     

     

    4. (必要に応じて)Credentialを登録します。(ADB HOL #2-2を実施済みであれば本手順はスキップ可能です)

     

    4-1. vi でスクリプトを開き、username、password(Auth Token) を編集してください。取得方法は、ADB HOL #2-2を参考にしてください。

    $ vi 1credential.sql

     

    BEGIN

      DBMS_CLOUD.CREATE_CREDENTIAL(

        credential_name => 'WORKSHOP_CREDENTIAL',

        username => 'adb@handson.com', 

        password => 'xxxxxx'

      );

    END;

    /

     

    4-2. ADBインスタンスにSQL*Plusでログインします。

    $ sqlplus admin/Welcome12345#@atp01_low

    username : admin

    password : Welcome12345#(インスタンス作成時に指定した値)

    conn_string : atpXX_low

     

    4-3. スクリプトを実行し、クレデンシャルを登録します。

    SQL> @1credential.sql

    4-4. SQL*Plusを終了します。

    SQL> exit

     

     

    5. データをインポートします。

     

    5-1. vi でスクリプトを開き、dumpfileの引数を上記で取得したダンプファイルへのアクセスURLに置き換えてください。

     

    このとき、ファイル名はexport_hr_01.dmpではなく、export_hr_%u.dmp のようにワイルドカード(%u)を付けるように注意ください。
    エクスポートの際に分割したファイルを同時に指定しインポートできるのでスクリプトを簡素化できるだけでなく、インポート処理の高速化も可能です。

     

    $ vi 2import_hr.sh

     

    impdp userid=admin/Welcome12345#@atp01_high \

    credential=WORKSHOP_CREDENTIAL \

    parallel=4 \

    schemas=HR \

    directory=DATA_PUMP_DIR \

    dumpfile=https://objectstorage.<region>.oraclecloud.com/n/<tenancy>/b/<bucket_name>/o/export_hr_%u.dmp \

    logfile=DATA_PUMP_DIR:import_hr.log

     

    尚、インポート処理の高速化のために、ファイル名は"export_hr_%u.dmp"としてワイルドカードを付けてください。

    複数のファイルを同時にインポートすることが可能です。

     

     

    5-2. スクリプトに実行権限を付与します。

    $ chmod +x 2import_hr.sh

     

    5-3. インポートを実行します。

    $ ./2import_hr.sh

     

     

    5-4. 結果件数を確認します。

    以下のようなログが表示されていればOKです。

     

     

     

    以上で、この章の作業は終了です。

     

    次の章にお進みください。

    ADB HOL #5-1 : 接続サービスの理解