Oracle Database@AzureのADBへBlob Storageを使ってData Pumpで移行してみた #oracle

はじめに

本記事では、Oracle Database@AzureのOracle Autonomous Database (ADB)へ、Oracle Data Pumpを使用してデータ移行を行う方法を紹介します。

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

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

以下の図のように、Blob Storageにダンプファイルをアップロードし、Blob storageからOracle Database@Azure上のADBへダンプファイルを直接インポートしていきます。

image.png

事前準備

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

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

image.png

②踏み台サーバーからDatabase Actionsに接続できるようにする

以下の記事の環境が準備できている必要があります。
踏み台サーバーを構築して、RDP接続によりDatabase Actionsに接続できるようにしておきましょう。

③踏み台サーバーからクライアントツールでADBに接続できるようにする

BaseDBやExaDB-XSなどと比較して、ADBはOSに直接SSH接続できないので、ADBにアクセスするための準備をしていきます。

③-1. Oracle Instant Client をダウンロードする

まずは、踏み台サーバーにRDP接続をします。
image.png

踏み台サーバーから、Oracle Instant Client ダウンロードページにアクセスして、最新バージョンのBasic Light Packageをダウンロードしていきます。
今回の例ですと、Version 23.7.0.25.01 > Base – one of these packages is required > Basic Light PackageのZipファイル (instantclient-basiclite-windows.x64-23.7.0.25.01)をダウンロードします。
image.png

その後、Zipファイルを任意のフォルダに展開しておきます。
今回は、以下のように展開しています。

「C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01

image.png

また今回はData Pumpを利用するので、追加でTools Packageもダウンロードしておきます。
今回の例ですと、Version 23.7.0.25.01 > Tools – optional packages > Tools PackageのZipファイル (instantclient-tools-windows.x64-23.7.0.25.01)をダウンロードします。
image.png
こちらのZipファイルも展開して、Toolsのinstantclientに入っているファイルをBasic Lightのinstantclientのフォルダの中にコピーします。
image.png

言語設定に関して
Windowsサーバーはデフォルトで英語になっているので、日本語が良い方は「Setting > Time & Language > Language & region」から、「Add a language」で日本語を追加して設定して、再起動すると日本語表示になります。
本記事でもここからは日本語設定で解説していきます。

③-2. ADBからをWalletをダウンロードする

踏み台サーバー上で、OCIコンソールのADBの画面を開き、「データベース接続」をクリックし、「インスタンスウォレット」を選択して、「ウォレットのダウンロード」を選択します。
image.png

任意のパスワードを入力して、ダウンロードします。
image.png

その後、Zipファイルを任意のフォルダに展開しておきます。
今回は、以下のように展開しています。

C:UsersADBDownloadsWallet_OracleADB

image.png

③-3. Walletフォルダ内部のsqlnet.ora 設定手順

Walletをダウンロードした直後は、「sqlnet.ora」に含まれるパスが相対参照 (?/network/admin)になっており、Instant Client環境では無効のパスです。
なので、まずはコマンドプロンプトでcdコマンドを使い、sqlnet.oraがあるフォルダまで移動し、以下のコマンドを実行して、sqlnet.oraの中身をメモ帳を使って書き換えていきます。

sqlnet.oraの中身をメモ帳で開く

notepad C:UsersADBDownloadsWallet_OracleADBsqlnet.ora

sqlnet.oraの初期状態では、以下のように記載されています。この状態では、ADBに接続することはできません。

✖ デフォルトのsqlnet.oraの中身

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH = no

なので、以下のようにsqlnet.oraの中身を書き換えてください。
DIRECTORYには、Walletファイルが格納されているフォルダの絶対パスを指定してください。
今回、私の場合だと「C:/Users/ADB/Downloads/Wallet_OracleADB」のパスになっています。

〇 書き換え後のsqlnet.oraの中身

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY = C:/Users/ADB/Downloads/Wallet_OracleADB)))
SSL_SERVER_DN_MATCH = yes

③-4. Windowsで環境変数の設定をする

踏み台サーバー上で、スタートボタン横の検索窓に、「システムの詳細」と入力して、「システムの詳細設定の表示」を選択します。
image.png

環境変数」を選択します。
image.png

ユーザー環境変数」欄の中にある「Path」を選択し、「編集」をクリックします。
image.png

新規」をクリックして、次のようにインストールしたInstant Clientのフォルダパスを追加します。
※フォルダの中の「instantclient_23_7」までを含めたパスになっていることに注意。

C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7

OK」をクリックして、環境変数のPathの変更は完了です。
image.png

続いて、TNS_ADMINの設定として、同じく環境変数でWalletフォルダを指定していきます。
ユーザー環境変数」欄で「*新規」をクリックします。
image.png

変数名と変数値 (Walletのパス)を以下のように入力していきます。
入力したら「OK」をクリックします。残った「環境変数」と「システムのプロパティ」のウィンドウも「OK」をクリックして閉じていきます。

変数値

C:UsersADBDownloadsWallet_OracleADB

image.png
image.png

実際に環境変数が有効になっているか、コマンドプロンプトを開いて以下のように入力します。

PATHの環境変数が有効になっているか確認

TNS_ADMINの環境変数が有効になっているか確認

実行結果

C:UsersADB>echo %PATH%
C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program Filesdotnet;C:UsersADBAppDataLocalMicrosoftWindowsApps;C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7;

C:UsersADB>echo %TNS_ADMIN%
C:UsersADBDownloadsWallet_OracleADB

%PATH% は Windowsの動作に必要なシステムフォルダも含まれるため、たくさん表示されても問題ありません。

④Visual C++ Redistributable のインストール

デフォルトのWindowsサーバーでは、impdpの実行に必要なVisual C++ ランタイムがシステムに存在しないため、インストールしておく必要があります。
以下のページにアクセスして、「Visual Studio 2015, 2017, 2019, and 2022」のセクションから、x64のインストーラーをダウンロードします。

image.png

インストーラを実行して完了です。
image.png

Blob Storageの構築

ストレージ アカウントとBlob Storage Containersを構築していきます。

ストレージアカウントの作成

まずは、Azureで画面上部の検索窓に「storage」と入力して、「ストレージ アカウント」を選択します。
image.png

作成」をクリックします。
image.png

基本情報」に必要な情報を入力していきます。
入力し終わったら、「次へ」をクリックします。

プロジェクトの詳細

  • サブスクリプション:ADBと同じものを選択。
  • リソースグループ:ADBと同じものを選択。

インスタンスの詳細

  • ストレージアカウント名:任意の名前を入力。
  • リージョン:ADBと同じリージョンを選択。
  • プライマリサービス:今回は、Blob Storageを構築するので、「Azure Blob StorageまたはAzure Data Lake Storage Gen 2」を選択。
  • パフォーマンス:「Standard」を選択。
  • 冗長性:「ローカル冗長ストレージ(LRA)」を選択。
    image.png

詳細」に関しては、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
image.png
image.png

ネットワーク」も、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
image.png
image.png

データ保護」も、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
image.png
image.png

暗号化」も、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
image.png

タグ」に関しては、必要ならば追加してください。「次へ」をクリックします。
image.png

構成の概要が表示されますので、問題がなければ、「作成」をクリックします。
作成が終わるまで数分待機します。
image.png

デプロイが完了したら、「リソースに移動」をクリックします。
image.png

コンテナーの作成

画面左側の「データストレージ」⇒「コンテナー」を選択して、「+コンテナー」をクリックします。
image.png

任意のコンテナー名を入力し、「作成」をクリックします。
image.png

ダンプファイルのアップロード

コンテナーが作成されたら、そのコンテナーの名前をクリックします。
image.png

アップロード」をクリックすると、画面右側にBLOBのアップロード画面が出てくるので、冒頭にダウンロードした4つのダンプファイルを選択します。最後に、青いボタンの「アップロード」をクリックすることで、ダンプファイルをBlob Storage上に配置することができました。
image.png

アップロードされたことを確認したら、右側の「」をクリックして、「プロパティ」をクリックします。
image.png

4つダンプファイルで、記載のURLをコピーして記録していきます。
4つとも以下のような形式のURLになっていると思います。

URL例

https://adb.blob.core.windows.net/adb-container/export_hr_01.dmp

image.png

ADB@AzureへのData Pumpによる移行

下準備が終わったので、ADBへData Pumpでインポートしていきます。

1⃣資格情報を作成する

ADBからBlob Storageにアクセスするには、まず資格情報を作成する必要があります。
そのためには、Blob Storage上のダンプファイルにアクセスするためのアカウント名とパスワードが必要です。

先ほど作成したストレージアカウントに移動して、画面左側の「セキュリティとネットワーク」⇒「アクセスキー」選択します。
ストレージアカウント名」と「キー」をコピーします。キーがパスワードになるので、「表示」をクリックするとキーをコピーできます。

image.png

次に、踏み台サーバーからADBのDatabase Actionsを開き、ADMINで「DBMS_CLOUD.CREATE_CREDENTIAL」を実行していきます。
Database Actionsへのアクセス方法は以下をご覧ください。

Database Actionsにアクセスできたら、画面左上のメニューを開き、「SQL」をクリックします。
image.png

まずは、画面左側のタブが「ADMIN」になっていることを確認します。
その後、以下のPL/SQL文を入力した後、「スクリプトを実行」をクリックし、正常に出力されたら資格情報の作成は完了です。

  • credential:任意の名前を入力します。今回は「BLOBCRED」と入力しています。
  • username:ストレージアカウントのアクセスキーで調べた「ストレージアカウント名」を入力。
  • password:ストレージアカウントのアクセスキーで調べた「キー」を入力。

資格情報の作成

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'BLOBCRED',
    username => '',
    password => ''
  );
END;
/

image.png

2⃣実際にBlob Storageにアクセスできるか確認する。

Blob Storageへのアクセステストを行っていきます。
DBMS_CLOUD.LIST_OBJECTS資格情報とURLを指定して実行することで、コンテナ内のファイルを一覧表示します。
URLに関しては、ダンプファイルをアップロードした際に、ダンプファイルのURLをコピーしたと思うので、そのURLの末尾のファイル名を削除してください。

URLの例

✖ https://samig1.blob.core.windows.net/contmig1/HR.DMP ⇚ ファイル名がいらない。
〇 https://samig1.blob.core.windows.net/contmig1/

先ほどと同様に、Database Actionsで以下のSQL文を入力した後、「文の実行」をクリックし、アップロードしたダンプファイルが出力されたらアクセステストは完了です。

Blob StorageへのアクセステストのSQL文

SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('BLOBCRED','');

image.png

3⃣インポートをするためのパラメータファイルを作成

踏み台サーバーで、インポート用のパラメータファイルを作成していきます。
コマンドプロンプトを起動して、CDコマンドで、Instant Clientと同じフォルダに移動し、以下内容を自身の内容に書き換えて入力します。
今回のフォルダは、「C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7」です。

  • CREDENTIALS:先ほど作成した認証情報の名前を指定。今回は「BLOBCRED」と入力。
  • DUMPFILE:コンテナーにアップロードしたダンプファイルのURLを指定。今回は、ダンプファイルが複数あるので「%L」パラメータを利用しています。

他のパラメータの詳細については、Oracle Data Pump ベストプラクティスを参照してください。

パラメータファイルを作成するためのコマンド

echo DIRECTORY=DATA_PUMP_DIR> impdp.par
echo SCHEMAS=HR >> impdp.par
echo CREDENTIAL=BLOBCRED >> impdp.par
echo PARALLEL=1 >> impdp.par
echo DUMPFILE=https://adb.blob.core.windows.net/adb-container/export_hr_%U.dmp >> impdp.par
echo LOGFILE=blobimp.log >> impdp.par
echo EXCLUDE=cluster,indextype,db_link >> impdp.par
echo METRICS=y >> impdp.par
echo LOGTIME=all >> impdp.par

そして、実際にパラメータファイルが作られているか確認するために以下のコマンドで確かめます。

パラメータファイルの確認

パラメータファイルの内容

DIRECTORY=DATA_PUMP_DIR
SCHEMAS=HR
CREDENTIAL=BLOBCRED
PARALLEL=1
DUMPFILE=https://adb.blob.core.windows.net/adb-container/export_hr_%U.dmp
LOGFILE=blobimp.log
EXCLUDE=cluster,indextype,db_link
METRICS=y
LOGTIME=all

4⃣Data Pumpによるインポートを実行

Instant Clientと同じフォルダで、以下内容を自身の内容に書き換えて入力します。
今回のフォルダは、「C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7」です。
ちなみに、「TNSサービス名」に関しては、OCIコンソール上のADBの画面から確認することが可能です。今回は、「Oracleadb_high」を選択しますが、詳細に関してはこちらをご確認ください。

image.png

impdp admin/@ parfile=impdp.par
【実行結果はこちら】

実行結果

Import: Release 23.0.0.0.0 - Production on Sat Apr 19 10:46:20 2025
Version 23.7.0.25.01

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

Connected to: Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
19-APR-25 10:46:37.347: W-1 Startup on instance 3 took 2 seconds
19-APR-25 10:46:41.339: W-1 Master table "ADMIN"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
19-APR-25 10:46:42.335: Starting "ADMIN"."SYS_IMPORT_SCHEMA_01":  admin/********@oracleadb_high parfile=impdp.par
19-APR-25 10:46:42.438: W-1 Processing object type SCHEMA_EXPORT/USER
19-APR-25 10:46:42.757: W-1      Completed 1 USER objects in 0 seconds
19-APR-25 10:46:42.757: W-1 Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
19-APR-25 10:46:42.852: W-1      Completed 7 SYSTEM_GRANT objects in 0 seconds
19-APR-25 10:46:42.852: W-1 Processing object type SCHEMA_EXPORT/ROLE_GRANT
19-APR-25 10:46:43.070: W-1      Completed 1 ROLE_GRANT objects in 1 seconds
19-APR-25 10:46:43.070: W-1 Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
19-APR-25 10:46:43.259: W-1      Completed 1 DEFAULT_ROLE objects in 0 seconds
19-APR-25 10:46:43.259: W-1 Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
19-APR-25 10:46:43.484: W-1      Completed 1 TABLESPACE_QUOTA objects in 0 seconds
19-APR-25 10:46:43.484: W-1 Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
19-APR-25 10:46:43.572: W-1      Completed 1 PASSWORD_HISTORY objects in 0 seconds
19-APR-25 10:46:43.790: W-1 Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
19-APR-25 10:46:43.942: W-1      Completed 3 SEQUENCE objects in 0 seconds
19-APR-25 10:46:43.942: W-1 Processing object type SCHEMA_EXPORT/TABLE/TABLE
19-APR-25 10:46:45.891: W-1      Completed 8 TABLE objects in 2 seconds
19-APR-25 10:46:45.916: W-1 Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
19-APR-25 10:46:47.117: W-1 . . imported "HR"."EMPLOYEES"                              8.7 KB     107 rows in 0 seconds using external_table
19-APR-25 10:46:47.470: W-1 . . imported "HR"."LOCATIONS"                                6 KB      23 rows in 0 seconds using external_table
19-APR-25 10:46:47.812: W-1 . . imported "HR"."JOB_HISTORY"                            5.3 KB      10 rows in 0 seconds using external_table
19-APR-25 10:46:48.154: W-1 . . imported "HR"."JOBS"                                   5.4 KB      19 rows in 1 seconds using external_table
19-APR-25 10:46:48.497: W-1 . . imported "HR"."DEPARTMENTS"                            5.4 KB      27 rows in 0 seconds using external_table
19-APR-25 10:46:48.923: W-1 . . imported "HR"."COUNTRIES"                              5.2 KB      25 rows in 0 seconds using external_table
19-APR-25 10:46:49.258: W-1 . . imported "HR"."REGIONS"                                4.9 KB       4 rows in 1 seconds using external_table
19-APR-25 10:46:49.277: W-1 . . imported "HR"."NG_TAB_4ADW"                              0 KB       0 rows in 0 seconds using external_table
19-APR-25 10:46:49.288: W-1 Processing object type SCHEMA_EXPORT/TABLE/COMMENT
19-APR-25 10:46:49.515: W-1      Completed 39 COMMENT objects in 0 seconds
19-APR-25 10:46:49.515: W-1 Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
19-APR-25 10:46:49.619: W-1      Completed 2 PROCEDURE objects in 0 seconds
19-APR-25 10:46:49.619: W-1 Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
19-APR-25 10:46:49.811: W-1      Completed 2 ALTER_PROCEDURE objects in 0 seconds
19-APR-25 10:46:49.811: W-1 Processing object type SCHEMA_EXPORT/VIEW/VIEW
19-APR-25 10:46:50.034: W-1      Completed 1 VIEW objects in 1 seconds
19-APR-25 10:46:50.093: W-1 Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
19-APR-25 10:46:50.591: W-1      Completed 17 INDEX objects in 0 seconds
19-APR-25 10:46:50.591: W-1 Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
19-APR-25 10:46:50.935: W-1      Completed 9 CONSTRAINT objects in 0 seconds
19-APR-25 10:46:50.935: W-1 Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
19-APR-25 10:46:50.959: W-1      Completed 19 INDEX_STATISTICS objects in 0 seconds
19-APR-25 10:46:50.959: W-1 Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
19-APR-25 10:46:51.321: W-1      Completed 10 REF_CONSTRAINT objects in 1 seconds
19-APR-25 10:46:51.321: W-1 Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
19-APR-25 10:46:51.489: W-1      Completed 2 TRIGGER objects in 0 seconds
19-APR-25 10:46:51.489: W-1 Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
19-APR-25 10:46:51.513: W-1      Completed 8 TABLE_STATISTICS objects in 0 seconds
19-APR-25 10:46:51.543: W-1      Completed 1 [internal] STATISTICS objects in 0 seconds
19-APR-25 10:46:51.635: W-1      Completed 8 SCHEMA_EXPORT/TABLE/TABLE_DATA objects in 3 seconds
19-APR-25 10:46:51.743: Job "ADMIN"."SYS_IMPORT_SCHEMA_01" successfully completed at Sat Apr 19 10:46:51 2025 elapsed 0 00:00:24

5⃣データがインポートできているか確認

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

HRスキーマのCOUNTRIES表の件数確認

select count(1) from hr.COUNTRIES;

まとめ

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

関連記事

Oracle Database@Azureに関して

Oracle Database@AWSに関して

Oracle Database@Googleに関して

編集履歴



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link