Forum Stats

  • 3,724,456 Users
  • 2,244,761 Discussions
  • 7,851,018 Comments

Discussions

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

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

TakeshiNagakubo-Oracle
TakeshiNagakubo-Oracle Posts: 18 Employee
edited December 2020 in Social Groups

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

コンテンツ一覧に戻る

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

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

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

作業の流れ

  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

pastedImage_20png


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

pastedImage_29png

特にエラーなく終了したら 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

pastedImage_5png

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

$ sqlplus hr/WelCome123#123#@pdb1

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


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

pastedImage_11png

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

5. Autonomous Databaseへのインポート

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

1. Tera Termを起動し、で作成した仮想マシンに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) を編集してください。取得方法は、を参考にしてください。

$ vi 1credential.sql


BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'WORKSHOP_CREDENTIAL',
    username => '[email protected]', 
    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 \
chemas=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です。

pastedImage_0png

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

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

Sign In or Register to comment.