2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Database@AzureのExaDB-XSへData Pumpで移行してみた

Last updated at Posted at 2025-04-15

はじめに

本記事では、Oracle Database@AzureのExadata Database Service on Exascale Infrastructure (ExaDB-XS)へ、Oracle Data Pumpを使用してデータ移行を行う方法を紹介します。

今回利用するExaDB-XSの環境は、以下の記事と同様の手順で作成しています。

今回構成するアーキテクチャ

今回は、以下の図のように、自宅のPCから踏み台サーバーにRDP接続をし、そこからOracle Database@Azure上のExaDB-XSへSSH接続し、SCPコマンドでダンプファイルを転送したうえでインポートを行っていきます。

image.png

事前準備

①エクスポート済のダンプファイルの準備

事前準備として、まずは手元のPCにエクスポート済のダンプ・ファイルを用意します。
今回は、こちらのリンクの「はじめに」の章にある、以下の4つのダンプファイルを自身のPCにダウンロードしておきます。

image.png

②仮想ネットワークにSSHのイングレス・ルールを追加

OCIに移動して、Network Security GroupにSSHのイングレス・ルールを追加していきます。
Networkingの項目の中の「Go to OCI」をクリックします。
image.png

OCIにサインインできたら、Network Security Groupの詳細画面に遷移します。
ルールの追加」からSSHの設定を追加していきます。
image.png

以下のようにルールを入力できたら、「追加」をクリックします。
ソースCIDRに関しては、セキュリティ要件に応じて設定を絞るなど可能です。
image.png

SSHのルールが追加されたこの作業は完了です!
image.png

③踏み台サーバーの構築

再びAzureポータルに戻って、仮想マシンで踏み台サーバーを構築していきます。
構築方法に関しては、以下の記事の「Database Actionsに接続するまでの手順」の「①踏み台サーバーの作成」をご確認ください。
リソースグループや名前、リージョンなどは、ExaDB-XSに合わせて変更してください。基本的な設定項目はほとんど変わりません。

image.png

④RDPで踏み台サーバーに接続

踏み台サーバーの作成が完了したら、その作成したWindowsサーバーにRDPで接続していきます。
同様に、以下の記事の「Database Actionsに接続するまでの手順」の「②RDPでコンピュートに接続」を参考にRDP接続をやってみましょう。

image.png

ExaDB-XS@AzureへのData Pump移行フロー

踏み台サーバーにRDP接続が完了したところから説明していきます。
image.png

1⃣ダンプファイルとSSHの秘密鍵を踏み台サーバーに配置する

手元のPCにダウンロードしてあるダンプファイルと秘密鍵を「Ctrl + C」でコピーして、踏み台サーバーのエクスプローラーの「Download」フォルダ上で、「Ctrl + V」で張り付けします。
これだけで、踏み台サーバー上に使用するファイルを配置することができました。
image.png

2⃣ExaDB-XSにSSH接続する

まずは、OCIコンソールでVMクラスタの詳細を開いていきます。
image.png

下の方にスクロールして、リソースの中から「仮想マシン」を選択後、「プライベートIPアドレスおよびDNS名」のIPアドレスをメモします。
今回、2つのノードで構成されているので2つありますが、どちらに接続しても問題ありません。
ExaDB-XSはRAC構成なので、どちらのノードも同じデータベースクラスタの一部となっているからです。
image.png

今度は、踏み台サーバーのRDPの画面に戻り、コマンドプロンプトを起動して、SSH接続のコマンドを入力します。

ExaDB-XSにSSH接続
ssh -i "<秘密鍵ファイルのフルパス>" opc@<ExaDB-XSノードのIPアドレス>

<実行例>
image.png

3⃣ExaDB-XS上で保存ディレクトリとパラメータファイルを作成する

Data Pumpで使用するダンプファイルを配置するためのディレクトリをExaDB-XS上に作成していきます。
このディレクトリは、SCPコマンドでファイルを転送したり、impdp実行時に参照するOracle Directoryオブジェクトとして利用されます。
一旦、opcユーザーのホームに以下にディレクトリを作り、パラメータファイルを配置した後、Oracleユーザーのディレクトリにそれらを移動させていきます。

ダンプファイルの保存ディレクトリを作成
mkdir -p /home/opc/dump
chmod 755 /home/opc/dump

<実行例>
image.png

あわせて、ダンプファイルをインポートする用のパラメータファイル (inpdp_hr.par)もこのディレクトリに作成しておきます。

パラメータファイルの作成
vi /home/opc/dump/impdp_hr.par

impdp_hr.parの編集画面が表示されるので、以下のパラメータを入力し、「:wq」で保存して閉じます。
※hrスキーマに関しては、後述するので一旦このように入力してください。

パラメータファイルの中身
directory=dpdir
schemas=HR
dumpfile=export_hr_%U.dmp
logfile=import_hr.log

これらのディレクトリをopcからoracleに移動させていきます。

ディレクトリをopcからoracleへ移動
sudo mv /home/opc/dump /home/oracle/
sudo chown -R oracle:oinstall /home/oracle/dump

4⃣踏み台サーバーからExaDB-XSへダンプファイルをSCPで転送

一度SSH接続を切断し、踏み台サーバーからExaDB-XSへダンプファイルをSCPで転送します。
以下のbashのフォルダやファイル名は、自分用にカスタマイズしてお使いください。
また、ダンプファイルのファイルが複数あるので、ワイルドカード(*)を使ってパターン化しています。

ダンプファイルの保存ディレクトリを作成
scp -i "C:\Users\ExaDB-XS\Downloads\Exascale_Key.pem" ^
"C:\Users\ExaDB-XS\Downloads\export_hr_0*.dmp" opc@10.0.1.204:/home/opc/dump/ 

<実行例>
image.png

5⃣Oracleユーザーに切り替えて環境変数を設定

もう一度、ExaDB-XSにSSH接続し、ocpユーザーからOracleユーザーに切り替えて環境変数を設定していきます。
ExaDB-XSの23aiの場合だと、以下のコマンドで問題ありません。

Oracleユーザーに切り替えて環境変数を設定
sudo su - oracle
export ORACLE_HOME=/u02/app/oracle/product/23.0.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

<実行例>
image.png

<参考>
もし他のDBバージョンで、パスを調べたい場合は、以下のコマンドを実行して確認可能です。
sqlplusの位置を探せば、対応するORACLE_HOME がわかります。

find / -name sqlplus 2>/dev/null

6⃣リスナー経由でSQL*PlusでPDBに接続

Oracleユーザーに切り替えます。
その後、ディレクトリ作成やData PumpをPDB内で操作するため、SQL*PlusでPDBに接続していきます。

SQL*PlusでPDBに接続
sqlplus sys/<パスワード>@//<接続文字列> as sysdba

<実行例>
image.png

接続文字列に関しては、OCIコンソール上の「プラガブル・データベースの詳細」から確認することができます。
まずは、OCIコンソールでVMクラスタの詳細を開いていきます。
image.png

下の方にスクロールして、リソースの中から「コンテナ・データベース」を選択後、作成したCDBをクリックします。
image.png

CDBの詳細画面に遷移したら、また下の方へスクロールし、リソースの中から「プラガブル・データベース」を選択後、作成したPDBをクリックします。
image.png

image.png

PDB接続」をクリック後、「簡易接続」の行の「接続文字列」をコピーして先ほどのコマンド部分に貼り付けます。
今回、2つのノードで構成されているので2つありますが、どちらに接続しても問題ありません。
ExaDB-XSはRAC構成なので、どちらのノードも同じデータベースクラスタの一部となっているからです。
image.png

7⃣SQL*PlusでOracle Directoryオブジェクトを作成します

SQL*Plusに接続てきたら、以下のコマンドを入力していきます。
内容としては、ディレクトリ・オブジェクトを作成し、ダンプファイルの出力先をデータベースに登録します。

Oracle Directoryオブジェクトの作成
CREATE OR REPLACE DIRECTORY dpdir AS '/home/oracle/dump';

<実行例>
image.png

8⃣インポート先のユーザー (HR)を作成し、ディレクトリ・オブジェクトに対する操作権限を付与します

以下の内容に沿って、Data Pumpインポートの受け皿である「HR」スキーマを作成し、操作権限の付与を行っていきます。
※今回のダンプファイルであるexport_hr_01.dmpの中身がHRスキーマのテーブルのため、インポート先にも HRスキーマが必要になるからです。

HRというユーザーをパスワード付きで作成
CREATE USER HR IDENTIFIED BY <任意のパスワード>;
データベースにログインできる最低限の権限を付与
GRANT CONNECT, RESOURCE TO HR;
テーブルスペース使用制限を無効化
GRANT UNLIMITED TABLESPACE TO HR;
ディレクトリ・オブジェクトに対する操作権限をHRスキーマに付与
GRANT READ, WRITE ON DIRECTORY dpdir TO HR;

<実行例>
image.png

9⃣impdpを実行してインポートします

SQL*Plusからexitしたら、Oracleユーザーでimpdpを実行して、ダンプファイルをインポートしていきます。
<パスワード>にはHRスキーマを作成したときのパスワードを、<接続文字列>には6⃣でOCI上で確認した接続文字列を入力してください。

ダンプファイルをインポート
impdp HR/<パスワード>//<接続文字列> parfile=/home/oracle/dump/impdp_hr.par
実行結果
[oracle@azurexs1-nvnfn ~]$ impdp HR/WelCome123##@//azurexs-scan-eyewb.ociclientsubne.ociexascalevne.oraclevcn.com:1521/AzureCDB_AZUREPDB1.paas.oracle.com parfile=/home/oracle/dump/impdp_hr.par

Import: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Mon Apr 14 21:14:15 2025
Version 23.7.0.25.01

Copyright (c) 1982, 2025, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 23ai EE Extreme Perf Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Master table "HR"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "HR"."SYS_IMPORT_SCHEMA_01":  HR/********@//azurexs-scan-eyewb.ociclientsubne.ociexascalevne.oraclevcn.com:1521/AzureCDB_AZUREPDB1.paas.oracle.com parfile=/home/oracle/dump/impdp_hr.par



   ~~~~~一部省略~~~~~


Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."EMPLOYEES"                              8.7 KB     107 rows
. . imported "HR"."LOCATIONS"                                6 KB      23 rows
. . imported "HR"."JOB_HISTORY"                            5.3 KB      10 rows
. . imported "HR"."JOBS"                                   5.4 KB      19 rows
. . imported "HR"."DEPARTMENTS"                            5.4 KB      27 rows
. . imported "HR"."COUNTRIES"                              5.2 KB      25 rows
. . imported "HR"."REGIONS"                                4.9 KB       4 rows
. . imported "HR"."NG_TAB_4ADW"                              0 KB       0 rows
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "HR"."SYS_IMPORT_SCHEMA_01" completed with 12 error(s) at Mon Apr 14 21:15:22 2025 elapsed 0 00:00:58

最後に、実際にデータ移行ができているか確認するために、SQL*Plusでログインして確認してみます。
例として、以下のコマンドで、HRスキーマのCOUNTRIES表の件数を見てみます。25件であれば大丈夫です!

HRスキーマのCOUNTRIES表の件数確認
select count(1) from hr.COUNTRIES;
実行結果
  COUNT(1)
----------
        25

※ところどころエラーが起きている個所はありますが、データは全て正常にインポートされています。
出ているエラーは、権限不足による一部のDDL失敗 (ユーザー作成やGRANTなど)によるものです。

まとめ

今回は、Oracle Database@AzureのExaDB-XSへData Pumpによる移行作業を実施しました。
他にもOracleのマルチクラウドに関する記事を発信しているので、以下の関連記事も合わせてご参考ください。

関連記事

Oracle Database@AWSに関して

編集履歴

  • 2025/04/15 記事公開
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?