はじめに
本記事では、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コマンドでダンプファイルを転送したうえでインポートを行っていきます。
事前準備
①エクスポート済のダンプファイルの準備
事前準備として、まずは手元のPCにエクスポート済のダンプ・ファイルを用意します。
今回は、こちらのリンクの「はじめに」の章にある、以下の4つのダンプファイルを自身のPCにダウンロードしておきます。
②仮想ネットワークにSSHのイングレス・ルールを追加
OCIに移動して、Network Security GroupにSSHのイングレス・ルールを追加していきます。
Networkingの項目の中の「Go to OCI」をクリックします。
OCIにサインインできたら、Network Security Groupの詳細画面に遷移します。
「ルールの追加」からSSHの設定を追加していきます。
以下のようにルールを入力できたら、「追加」をクリックします。
ソースCIDRに関しては、セキュリティ要件に応じて設定を絞るなど可能です。
③踏み台サーバーの構築
再びAzureポータルに戻って、仮想マシンで踏み台サーバーを構築していきます。
構築方法に関しては、以下の記事の「Database Actionsに接続するまでの手順」の「①踏み台サーバーの作成」をご確認ください。
リソースグループや名前、リージョンなどは、ExaDB-XSに合わせて変更してください。基本的な設定項目はほとんど変わりません。
④RDPで踏み台サーバーに接続
踏み台サーバーの作成が完了したら、その作成したWindowsサーバーにRDPで接続していきます。
同様に、以下の記事の「Database Actionsに接続するまでの手順」の「②RDPでコンピュートに接続」を参考にRDP接続をやってみましょう。
ExaDB-XS@AzureへのData Pump移行フロー
踏み台サーバーにRDP接続が完了したところから説明していきます。
1⃣ダンプファイルとSSHの秘密鍵を踏み台サーバーに配置する
手元のPCにダウンロードしてあるダンプファイルと秘密鍵を「Ctrl + C」でコピーして、踏み台サーバーのエクスプローラーの「Download」フォルダ上で、「Ctrl + V」で張り付けします。
これだけで、踏み台サーバー上に使用するファイルを配置することができました。
2⃣ExaDB-XSにSSH接続する
まずは、OCIコンソールでVMクラスタの詳細を開いていきます。
下の方にスクロールして、リソースの中から「仮想マシン」を選択後、「プライベートIPアドレスおよびDNS名」のIPアドレスをメモします。
今回、2つのノードで構成されているので2つありますが、どちらに接続しても問題ありません。
ExaDB-XSはRAC構成なので、どちらのノードも同じデータベースクラスタの一部となっているからです。
今度は、踏み台サーバーのRDPの画面に戻り、コマンドプロンプトを起動して、SSH接続のコマンドを入力します。
ssh -i "<秘密鍵ファイルのフルパス>" opc@<ExaDB-XSノードのIPアドレス>
3⃣ExaDB-XS上で保存ディレクトリとパラメータファイルを作成する
Data Pumpで使用するダンプファイルを配置するためのディレクトリをExaDB-XS上に作成していきます。
このディレクトリは、SCPコマンドでファイルを転送したり、impdp実行時に参照するOracle Directoryオブジェクトとして利用されます。
一旦、opcユーザーのホームに以下にディレクトリを作り、パラメータファイルを配置した後、Oracleユーザーのディレクトリにそれらを移動させていきます。
mkdir -p /home/opc/dump
chmod 755 /home/opc/dump
あわせて、ダンプファイルをインポートする用のパラメータファイル (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に移動させていきます。
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/
5⃣Oracleユーザーに切り替えて環境変数を設定
もう一度、ExaDB-XSにSSH接続し、ocpユーザーからOracleユーザーに切り替えて環境変数を設定していきます。
ExaDB-XSの23aiの場合だと、以下のコマンドで問題ありません。
sudo su - oracle
export ORACLE_HOME=/u02/app/oracle/product/23.0.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
<参考>
もし他のDBバージョンで、パスを調べたい場合は、以下のコマンドを実行して確認可能です。
sqlplusの位置を探せば、対応するORACLE_HOME がわかります。
find / -name sqlplus 2>/dev/null
6⃣リスナー経由でSQL*PlusでPDBに接続
Oracleユーザーに切り替えます。
その後、ディレクトリ作成やData PumpをPDB内で操作するため、SQL*PlusでPDBに接続していきます。
sqlplus sys/<パスワード>@//<接続文字列> as sysdba
接続文字列に関しては、OCIコンソール上の「プラガブル・データベースの詳細」から確認することができます。
まずは、OCIコンソールでVMクラスタの詳細を開いていきます。
下の方にスクロールして、リソースの中から「コンテナ・データベース」を選択後、作成したCDBをクリックします。
CDBの詳細画面に遷移したら、また下の方へスクロールし、リソースの中から「プラガブル・データベース」を選択後、作成したPDBをクリックします。
「PDB接続」をクリック後、「簡易接続」の行の「接続文字列」をコピーして先ほどのコマンド部分に貼り付けます。
今回、2つのノードで構成されているので2つありますが、どちらに接続しても問題ありません。
ExaDB-XSはRAC構成なので、どちらのノードも同じデータベースクラスタの一部となっているからです。
7⃣SQL*PlusでOracle Directoryオブジェクトを作成します
SQL*Plusに接続てきたら、以下のコマンドを入力していきます。
内容としては、ディレクトリ・オブジェクトを作成し、ダンプファイルの出力先をデータベースに登録します。
CREATE OR REPLACE DIRECTORY dpdir AS '/home/oracle/dump';
8⃣インポート先のユーザー (HR)を作成し、ディレクトリ・オブジェクトに対する操作権限を付与します
以下の内容に沿って、Data Pumpインポートの受け皿である「HR」スキーマを作成し、操作権限の付与を行っていきます。
※今回のダンプファイルであるexport_hr_01.dmpの中身がHRスキーマのテーブルのため、インポート先にも HRスキーマが必要になるからです。
CREATE USER HR IDENTIFIED BY <任意のパスワード>;
GRANT CONNECT, RESOURCE TO HR;
GRANT UNLIMITED TABLESPACE TO HR;
GRANT READ, WRITE ON DIRECTORY dpdir TO HR;
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件であれば大丈夫です!
select count(1) from hr.COUNTRIES;
COUNT(1)
----------
25
※ところどころエラーが起きている個所はありますが、データは全て正常にインポートされています。
出ているエラーは、権限不足による一部のDDL失敗 (ユーザー作成やGRANTなど)によるものです。
まとめ
今回は、Oracle Database@AzureのExaDB-XSへData Pumpによる移行作業を実施しました。
他にもOracleのマルチクラウドに関する記事を発信しているので、以下の関連記事も合わせてご参考ください。
関連記事
Oracle Database@Azureに関して
- Oracle Database@Azureについてまとめてみた
- Oracle Database@AzureをPAYGで利用する手順
- Oracle Database@AzureでADBをプロビジョニングしてみた
- Oracle Database@AzureでADBのDatabase Actionsに接続してみた
- Oracle Database@AzureのADBへData Pumpで移行してみた
- Oracle Database@Azureでのリージョン数のService Limit引き上げ方法
- Oracle Database@AzureでExaDB-XSをプロビジョニングしてみた
- Oracle Database@AzureのExaDB-XSへData Pumpで移行してみた
Oracle Database@AWSに関して
編集履歴
- 2025/04/15 記事公開