2021年1月26日火曜日

Data Pump APIを使ったエクスポート/インポート

United CodesのDimitri Gielisさんが、Data Pump APIを使って新しいOracle APEX Application Developmentのサービスにダンプ・ファイルのインポートを行う記事を書いていました。

ワークスペースやAPEXのアプリケーションについては、手間ではありますが、アプリケーションごとにOracle APEXのアプリケーション・ビルダーよりエクスポート/インポートもできます。なので、Autonomous DatabaseからDataPump APIを使ってエクスポートを行って、そのダンプ・ファイルを別のAutonomous Databaseにインポートする手順を確認してみました。

ダンプ・ファイルの受け渡しにはオブジェクト・ストレージを使います。

オブジェクト・ストレージの準備については、以前にまとめた手順があるのですが、もう古い記事になってしまったので、スクリーション・ショットなども含めてやり直してみました。

コンパートメントの作成

すでに作成済みのコンパートメントを使う場合は、この手順は省略できます。また、この通りにコンパートメントを作成しなくても、ポリシーを定義するときに指定するコンパートメントを変更することで手順を進めることができます。

ルート・コンパートメントの直下にDUMPFILESという名前のコンパートメントを作成します。

OCIのコンソールにあるハンバーガー・アイコンをクリックしてメニューを表示させ、ガバナンスと管理に含まれるアイデンティティより、コンパートメントを呼び出します。


コンパートメント一覧の画面にあるコンパートメントの作成をクリックします。


開いたフォームに、作成するコンパートメントの名前DUMPFILES説明は任意ですが必須項目なので、適当な文章を入力します。親コンパートメントルートを選びます。コンパートメントの作成を実行します。


ダイアログが閉じてもコンパートメントの一覧にDUMPFILESが現れない場合は、ブラウザのリロードを行ってください。表示されるまでに少し時間がかかるようです。


以上で、コンパートメントの準備が完了しました。

グループの作成


グループとしてDumpfileManagersを作成します。左のメニューからグループを選択し、グループの作成をクリックします。

名前をDumpfileManagersとし、説明は適当な文章を入力します。作成を実行します。


これでグループが作成されました。


ユーザーの作成


オブジェクト・ストレージを操作するためのユーザーdumpfile_managerを作成します。

アイデンティティの画面に戻って、左のメニューからユーザーを選択します。開いた画面にある、ユーザーの作成をクリックします。


IAMユーザーを選択し、名前dumpfile_managerを指定します。説明は適当な文章を指定します。作成をクリックします。



ユーザーが作成されました。リソースよりグループを開き、作成されたユーザーをグループに追加します。


グループとしてDumpfileManagersを選択し、追加をクリックします。


ユーザーdumpfile_managerがグループDumpfileManagersに追加されました。


続けてユーザー機能の編集をクリックします。


認証トークンにチェックを入れ、変更の保存をクリックします。オブジェクト・ストレージのアクセスには、今作成したユーザー名と認証トークンをクリデンシャルとして使用することにします。


認証トークンを生成します。左のリソース・メニューより認証トークンを開きます。認証トークンのセクションにある、トークンの生成を実行します。


説明として適当な文章を入力し、トークンの生成を実行します。


生成されたトークンをクリップボードにコピーします。


クリップボードにコピーされたトークンは、どこかに大事に保持しておきます。オブジェクト・ストレージにアクセスするクリデンシャルを登録するDBMS_CLOUD.CREATE_CREDENTIALプロシージャの実行時に使用します。


以上でユーザーの作成は完了です。

ポリシーの作成


ルート・コンパートメントにポリシーDumpfileManagementPoliciesを作成します。

アイデンティティよりポリシーを選択します。コンパートメントルートを選択し、開いた画面より、ポリシーの作成をクリックします。


名前DumpfileManagementPoliciesとして指定します。説明として適当な文章を指定し、コンパートメントとしてルートを選択します。ポリシーの入力のために拡張ビルダーに切り替え、以下のポリシーを設定します。入力後、作成をクリックします。
Allow group DumpfileManagers to read buckets in compartment DUMPFILES
Allow group DumpfileManagers to manage objects in compartment DUMPFILES


ポリシーが登録されました。


バケットの作成


オブジェクト・ストレージにバケットを作成します。ハンバーガー・メニューよりオブジェクト・ストレージを選び、その中のオブジェクト・ストレージを開きます。


コンパートメントとして先に作成したDUMPFILESを選択し、バケットの作成をクリックします。


バケット名Tokyoと指定し、それ以外は変更せずに作成をクリックします。


バケットはこれで作成完了です。作成されたバケットTokyoのリンクをクリックし、バケットを開きます。


アップロードのテストもかねて小さなファイルをアップロードします。アップロードをクリックして、何かファイルをアップロードします。(アップロードの手順については省略します)。


アップロードしたオブジェクトの右端にある操作メニューを開き、オブジェクト詳細の表示を実行します。


URLパス(URI)より、バケットまでのパスを確認しておきます。


以上でオブジェクト・ストレージ側の準備も完了です。

スキーマのエクスポート


SQL Developer Webに管理者ユーザーADMINでサインインします。これからはSQLの実行画面で作業していきます。


最初に標準で作成されているディレクトリ・オブジェクトDATA_PUMP_DIR以下に、すでに存在するファイルを確認します。
SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

ファイルがあるかないかは、今まで実施してきた作業に依存します。ですので、結果がどうであれ、特に気にする必要はありません。エクスポートを実施する際に、同じファイル名を指定しないように気をつけてください。

Data Pump APIのマニュアルにある例を参照して、エクスポート処理を実行します。DBMS_DATAPUMP.OPENのjob_name、ADD_FILEのfilename、METADATA_FILTERのvalueといった引数は、それぞれの環境に合わせて必ず変更します。

DECLARE
  ind NUMBER;              -- Loop index
  h1 NUMBER;               -- Data Pump job handle
  percent_done NUMBER;     -- Percentage of job complete
  job_state VARCHAR2(30);  -- To keep track of job state
  le ku$_LogEntry;         -- For WIP and error messages
  js ku$_JobStatus;        -- The job status from get_status
  jd ku$_JobDesc;          -- The job description from get_status
  sts ku$_Status;          -- The status object returned by get_status
BEGIN

-- Create a (user-named) Data Pump job to do a schema export.

  h1 := DBMS_DATAPUMP.OPEN(
      operation => 'EXPORT',
      job_mode => 'SCHEMA',
      remote_link => NULL,
      job_name => 'EXP_APPDEV',
      version => 'LATEST'
  );

-- Specify a single dump file for the job (using the handle just returned)
-- and a directory object, which must already be defined and accessible
-- to the user running this procedure.

  DBMS_DATAPUMP.ADD_FILE(
      handle => h1,
      filename => 'apexdev1.dmp',
      directory => 'DATA_PUMP_DIR'
  );

-- A metadata filter is used to specify the schema that will be exported.

  DBMS_DATAPUMP.METADATA_FILTER(
      handle => h1,
      name => 'SCHEMA_EXPR',
      value => 'IN (''APEXDEV'')'
  );

-- Start the job. An exception will be generated if something is not set up
-- properly. 

  DBMS_DATAPUMP.START_JOB(
      handle => h1
  );

-- The export job should now be running. In the following loop, the job
-- is monitored until it completes. In the meantime, progress information is
-- displayed.
 
  percent_done := 0;
  job_state := 'UNDEFINED';
  while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
    dbms_datapump.get_status(h1,
           dbms_datapump.ku$_status_job_error +
           dbms_datapump.ku$_status_job_status +
           dbms_datapump.ku$_status_wip,-1,job_state,sts);
    js := sts.job_status;

-- If the percentage done changed, display the new value.

    if js.percent_done != percent_done
    then
      dbms_output.put_line('*** Job percent done = ' ||
                           to_char(js.percent_done));
      percent_done := js.percent_done;
    end if;

-- If any work-in-progress (WIP) or error messages were received for the job,
-- display them.

   if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
    then
      le := sts.wip;
    else
      if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
      then
        le := sts.error;
      else
        le := null;
      end if;
    end if;
    if le is not null
    then
      ind := le.FIRST;
      while ind is not null loop
        dbms_output.put_line(le(ind).LogText);
        ind := le.NEXT(ind);
      end loop;
    end if;
  end loop;

-- Indicate that the job finished and detach from it.

  dbms_output.put_line('Job has completed');
  dbms_output.put_line('Final job state = ' || job_state);
  dbms_datapump.detach(h1);
END;
/

スクリプト出力の一例です。

Starting "ADMIN"."EXP_APPDEV":  
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/IDENTITY_COLUMN
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
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/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMA
*** Job percent done = 97
. . exported "APEXDEV"."CWR_MESSAGES"                    16.53 MB  153176 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_STOCKS"             116 KB     501 rows
. . exported "APEXDEV"."QS_TASKS"                        48.17 KB      73 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_SAMPLE_DATA"      25.43 KB     309 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_TASKS"            20.05 KB      73 rows
. . exported "APEXDEV"."TASKS"                           16.85 KB      73 rows
. . exported "APEXDEV"."PRD_TASKS"                       14.17 KB      73 rows
. . exported "APEXDEV"."PAC_TASKS"                       14.13 KB      73 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_POPULATION"       12.68 KB      51 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_STATS"            10.88 KB      22 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_ORDERS"           9.953 KB      20 rows
. . exported "APEXDEV"."EMP"                             10.06 KB      14 rows
. . exported "APEXDEV"."EMP2"                            9.828 KB      14 rows
. . exported "APEXDEV"."EMP_LOCAL"                       9.835 KB      14 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_BBALL"            9.210 KB      10 rows
. . exported "APEXDEV"."CWR_XLIFF_FILES"                 53.81 KB       3 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_GRADES"           8.820 KB      15 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_PROJECTS"         8.656 KB      14 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_EMP"              8.789 KB      14 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_PRODUCTS"         8.554 KB       5 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_SAMPLES"          8.398 KB     100 rows
. . exported "APEXDEV"."CWR_ORDERS"                      7.921 KB       4 rows
. . exported "APEXDEV"."WR_ORDERS"                       7.898 KB       4 rows
. . exported "APEXDEV"."EBA_DEMO_CHART_SAMPLE_NAMES"     7.765 KB       5 rows
. . exported "APEXDEV"."CWR_MENUS_TL"                    6.640 KB      12 rows
. . exported "APEXDEV"."WR_MENUS_TL"                     6.632 KB      12 rows
. . exported "APEXDEV"."TST_EMPLOYEES"                   6.578 KB      30 rows
. . exported "APEXDEV"."CWR_MENUS"                       6.414 KB       3 rows
. . exported "APEXDEV"."WR_MENUS"                        6.414 KB       3 rows
. . exported "APEXDEV"."REMEMP"                          6.460 KB       3 rows
. . exported "APEXDEV"."PAC_EMPLOYEES"                   6.281 KB      12 rows
. . exported "APEXDEV"."PRD_EMPLOYEES"                   6.281 KB      12 rows
. . exported "APEXDEV"."PAC_PROJECTS"                    6.101 KB      15 rows
. . exported "APEXDEV"."PRD_PROJECTS"                    6.101 KB      15 rows
. . exported "APEXDEV"."DEPT"                            6.031 KB       4 rows
*** Job percent done = 99
. . exported "APEXDEV"."EBA_DEMO_CHART_DEPT"             6.046 KB       4 rows
ORA-39173: Encrypted data has been stored unencrypted in dump file set.
Master table "ADMIN"."EXP_APPDEV" successfully loaded/unloaded
*** Job percent done = 100
******************************************************************************
Dump file set for ADMIN.EXP_APPDEV is:
  /u03/dbfs/AEC9AD8F7E8D9C5AE0532010000A7CA7/data/dpdump/apexdev1.dmp
Job "ADMIN"."EXP_APPDEV" successfully completed at Tue Jan 26 09:27:07 2021
elapsed 0 00:01:08
Job has completed
Final job state = COMPLETED


PL/SQL procedure successfully completed.

Elapsed: 00:01:18.397

スクリプト出力より、エクスポート・ダンプが以下に出力されていることが確認できます。これも今までの作業が違うため、それぞれ異なった値になります。

/u03/dbfs/AEC9AD8F7E8D9C5AE0532010000A7CA7/data/dpdump/apexdev1.dmp


ダンプ・ファイルのオブジェクト・ストレージのへの配置


スクリプト出力からも確認しましたが、再度、DATA_PUMP_DIR以下に作成されているダンプ・ファイルのファイル名を確認します。
SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');
リストされたファイルをオブジェクト・ストレージに配置します。最初にオブジェクト・ストレージにアクセスするためのクリデンシャルを登録します。

DBMS_CLOUD.CREATE_CREDENTIALプロシージャを呼び出し、ユーザーdumpfile_managerと、その認証トークンをクリデンシャル名EXPIMP_CREDとして登録します。
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'EXPIMP_CRED',
    username => 'dumpfile_manager',
    password => 'dumpfile_managerの認証トークン'
  );
END;
/

続いて、DBMS_CLOUD.PUT_OBJECTプロシージャを呼び出し、DATA_PUMP_DIR以下に存在するダンプ・ファイルを作成済みのオブジェクト・ストレージのバケットにコピーします。object_uriはバケットを作成したときに確認したURIから、file_nameはDATA_PUMP_DIRにファイル一覧から決めます。ダンプ・ファイルが複数の場合は、複数回実行します。

BEGIN
   DBMS_CLOUD.PUT_OBJECT(credential_name => 'EXPIMP_CRED',
     object_uri => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr8354yuxaxx/b/Tokyo/o/apexdev1.dmp',
     directory_name => 'DATA_PUMP_DIR',
     file_name => 'apexdev1.dmp');
END;

プロシージャの実行が正常に終了したら、オブジェクト・ストレージの画面よりファイルが存在しているか確認してください。

ダンプ・ファイルがオブジェクト・ストレージに存在していれば、エクスポートの作業は完了です。


オブジェクト・ストレージからのダンプ・ファイルの取得


インポートを行うインスタンスのSQL Developer Webに管理者ユーザーADMINでサインインします。

最初にディレクトリDATA_PUMP_DIRの内容を確認します。

SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

次にエクスポートを実施したインスタンスで実行したのと同様に、DBMS_CLOUD.CREATE_CREDENTIALプロシージャを呼び出し、オブジェクト・ストレージのアクセスに使用するクリデンシャルを登録します。

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'EXPIMP_CRED',
    username => 'dumpfile_manager',
    password => 'dumpfile_managerの認証トークン'
  );
END;
/

続いて、DBMS_CLOUD.GET_OBJECTプロシージャを呼び出し、オブジェクト・ストレージ上のダンプ・ファイルをDATA_PUMP_DIR以下に配置します。

begin
   DBMS_CLOUD.GET_OBJECT(
     credential_name => 'EXPIMP_CRED',
     object_uri => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr8354yuxaxx/b/Tokyo/o/apexdev1.dmp',
     directory_name => 'DATA_PUMP_DIR'); 
end;

プロシージャが成功したら、ディレクトリDATA_PUMP_DIR以下のファイル一覧を確認します。

SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

ダンプ・ファイルが配置されていることを確認し、Data Pump APIを使ったインポート処理を実行します。実行するスクリプトはData Pump APIのマニュアルに記載されている例を元にしています。

DBMS_DATAPUMP.OPENのjob_name、DBMS_DATAPUMP.ADD_FILEのfilename、DBMS_DATAPUMP.METADATA_REMAPなどは環境に応じて必ず変更が発生するはずです。

DECLARE
  ind NUMBER;              -- Loop index
  h1 NUMBER;               -- Data Pump job handle
  percent_done NUMBER;     -- Percentage of job complete
  job_state VARCHAR2(30);  -- To keep track of job state
  le ku$_LogEntry;         -- For WIP and error messages
  js ku$_JobStatus;        -- The job status from get_status
  jd ku$_JobDesc;          -- The job description from get_status
  sts ku$_Status;          -- The status object returned by get_status
BEGIN

-- Create a (user-named) Data Pump job to do a "full" import (everything
-- in the dump file without filtering).

  h1 := DBMS_DATAPUMP.OPEN(
      operation => 'IMPORT',
      job_mode => 'FULL',
      remote_link => NULL,
      job_name => 'IMP_APEXDEV'
  );

-- Specify the single dump file for the job (using the handle just returned)
-- and directory object, which must already be defined and accessible
-- to the user running this procedure. This is the dump file created by
-- the export operation in the first example.

  DBMS_DATAPUMP.ADD_FILE(
      handle => h1,
      filename => 'apexdev1.dmp',
      directory => 'DATA_PUMP_DIR'
  );

-- A metadata remap will map all schema objects from HR to BLAKE.

  DBMS_DATAPUMP.METADATA_REMAP(
      handle => h1,
      name => 'REMAP_SCHEMA',
      old_value => 'APEXDEV',
      value => 'APEXDEV2'
  );

-- If a table already exists in the destination schema, skip it (leave
-- the preexisting table alone). This is the default, but it does not hurt
-- to specify it explicitly.

  DBMS_DATAPUMP.SET_PARAMETER(
      handle => h1,
      name => 'TABLE_EXISTS_ACTION',
      value => 'SKIP'
  );

-- Start the job. An exception is returned if something is not set up properly.

  DBMS_DATAPUMP.START_JOB(h1);

-- The import job should now be running. In the following loop, the job is 
-- monitored until it completes. In the meantime, progress information is 
-- displayed. Note: this is identical to the export example.
 
 percent_done := 0;
  job_state := 'UNDEFINED';
  while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
    dbms_datapump.get_status(h1,
           dbms_datapump.ku$_status_job_error +
           dbms_datapump.ku$_status_job_status +
           dbms_datapump.ku$_status_wip,-1,job_state,sts);
    js := sts.job_status;

-- If the percentage done changed, display the new value.

     if js.percent_done != percent_done
    then
      dbms_output.put_line('*** Job percent done = ' ||
                           to_char(js.percent_done));
      percent_done := js.percent_done;
    end if;

-- If any work-in-progress (WIP) or Error messages were received for the job,
-- display them.

       if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
    then
      le := sts.wip;
    else
      if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
      then
        le := sts.error;
      else
        le := null;
      end if;
    end if;
    if le is not null
    then
      ind := le.FIRST;
      while ind is not null loop
        dbms_output.put_line(le(ind).LogText);
        ind := le.NEXT(ind);
      end loop;
    end if;
  end loop;

-- Indicate that the job finished and gracefully detach from it. 

  dbms_output.put_line('Job has completed');
  dbms_output.put_line('Final job state = ' || job_state);
  dbms_datapump.detach(h1);
END;
/

スクリプト出力に表示された実行結果の一例です。

Master table "ADMIN"."IMP_APEXDEV" successfully loaded/unloaded
Starting "ADMIN"."IMP_APEXDEV":  
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "APEXDEV2"."CWR_MENUS"                      6.414 KB       3 rows
. . imported "APEXDEV2"."EMP_LOCAL"                      9.835 KB      14 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_BBALL"           9.210 KB      10 rows
*** Job percent done = 99
. . imported "APEXDEV2"."CWR_MESSAGES"                   16.53 MB  153176 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_TASKS"           20.05 KB      73 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_POPULATION"      12.68 KB      51 rows
. . imported "APEXDEV2"."PRD_EMPLOYEES"                  6.281 KB      12 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_PROJECTS"        8.656 KB      14 rows
. . imported "APEXDEV2"."CWR_ORDERS"                     7.921 KB       4 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_SAMPLE_DATA"     25.43 KB     309 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_STATS"           10.88 KB      22 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_STOCKS"            116 KB     501 rows
. . imported "APEXDEV2"."WR_MENUS_TL"                    6.632 KB      12 rows
. . imported "APEXDEV2"."CWR_XLIFF_FILES"                53.81 KB       3 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_SAMPLES"         8.398 KB     100 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_EMP"             8.789 KB      14 rows
. . imported "APEXDEV2"."PAC_PROJECTS"                   6.101 KB      15 rows
. . imported "APEXDEV2"."PRD_PROJECTS"                   6.101 KB      15 rows
. . imported "APEXDEV2"."QS_TASKS"                       48.17 KB      73 rows
. . imported "APEXDEV2"."WR_MENUS"                       6.414 KB       3 rows
. . imported "APEXDEV2"."DEPT"                           6.031 KB       4 rows
. . imported "APEXDEV2"."EMP"                            10.06 KB      14 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_PRODUCTS"        8.554 KB       5 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_DEPT"            6.046 KB       4 rows
. . imported "APEXDEV2"."PAC_TASKS"                      14.13 KB      73 rows
. . imported "APEXDEV2"."PRD_TASKS"                      14.17 KB      73 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_ORDERS"          9.953 KB      20 rows
. . imported "APEXDEV2"."TST_EMPLOYEES"                  6.578 KB      30 rows
. . imported "APEXDEV2"."REMEMP"                         6.460 KB       3 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_GRADES"          8.820 KB      15 rows
. . imported "APEXDEV2"."WR_ORDERS"                      7.898 KB       4 rows
. . imported "APEXDEV2"."TASKS"                          16.85 KB      73 rows
. . imported "APEXDEV2"."PAC_EMPLOYEES"                  6.281 KB      12 rows
. . imported "APEXDEV2"."CWR_MENUS_TL"                   6.640 KB      12 rows
. . imported "APEXDEV2"."EMP2"                           9.828 KB      14 rows
. . imported "APEXDEV2"."EBA_DEMO_CHART_SAMPLE_NAMES"    7.765 KB       5 rows
Processing object type SCHEMA_EXPORT/TABLE/IDENTITY_COLUMN
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
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
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMA
Job "ADMIN"."IMP_APEXDEV" successfully completed at Tue Jan 26 10:18:26 2021
elapsed 0 00:00:47
Job has completed
Final job state = COMPLETED


PL/SQL procedure successfully completed.

Elapsed: 00:00:57.454

インポートされた表などは、SQL Developer Webを使用して確認することができます。

以上で、Data Pump APIを使ったエクスポートとインポート作業の紹介は完了です。Oracle APEXを使ったアプリケーション開発の一助になれば幸いです。

追記

DATA_PUMP_DIR以下のファイルを削除するには、DBMS_CLOUD.DELETE_FILEプロシージャを使用します。

begin
    dbms_cloud.delete_file(
        directory_name => 'DATA_PUMP_DIR',
        file_name => 'apexdev1.dmp');
end;