DBMS_DATAPUMP.GET_DUMPFILE_INFOプロシージャでエクスポートした dmpファイル の情報を取得してみる。(Oracle Database)

Oracle Database の DBMS_DATAPUMPパッケージには GET_DUMPFILE_INFOというプロシージャが在り、エクスポート・ユーティリティ(expdp, exp)で出力した dmpファイル の情報を参照できます。
本記事ではこのプロシージャを実際に動かしてみますやで。
彡(ﾟ)(ﾟ)

> Oracle Database PL/SQLパッケージおよびタイプ・リファレンス 19c
> 49 DBMS_DATAPUMP
> 49.5.6 GET_DUMPFILE_INFOプロシージャ
> https://docs.oracle.com/cd/F19136_01/arpls/DBMS_DATAPUMP.html#GUID-DAD6C613-9A49-4A7D-9224-FF6AA54ABBE4
> このプロシージャは、指定したダンプ・ファイルの情報を取り出します。
> 構文
> DBMS_DATAPUMP.GET_DUMPFILE_INFO(
>    filename    IN VARCHAR2,
>    directory   IN VARCHAR2,
>    info_table  OUT ku$_dumpfile_info,
>    filetype    OUT NUMBER);

# 1. プロシージャをシンプルに動かしてみるサンプルコード

以下のコードでシンプルに動かしてみます。dmpファイルは予め出力しておきます。

```sql
SET SERVEROUTPUT ON SIZE UNLIMITED;
DECLARE
  ku_dump_info_table SYS.KU$_DUMPFILE_INFO; 
  n_filetype         NUMBER;
BEGIN
  DBMS_DATAPUMP.GET_DUMPFILE_INFO(
      'exp_AYSHIBAT_01.dmp' -- filename
    , 'DIR_MIG_EXP_DMP'     -- directory object
    , ku_dump_info_table    -- Output Info Table 
    , n_filetype            -- filetype
  );
  FOR rec_ku_dump_info_table IN (
    SELECT * FROM TABLE(ku_dump_info_table) ORDER BY item_code
  )
  LOOP
    DBMS_OUTPUT.PUT_LINE(
      'item_code => ' || rec_ku_dump_info_table.item_code || ' ' ||
      'value => '     || rec_ku_dump_info_table.value
    );
  END LOOP;
END;
/
```

結果は以下の通りです。

```sql
item_code => 1 value => 4.2
item_code => 2 value => 1
item_code => 3 value => E5DF98BEB62F2D5CE0537401000AD06E
item_code => 4 value => 1
item_code => 5 value => 838
item_code => 6 value => Wed Aug 10 08:11:34 2022
item_code => 7 value => 514
item_code => 8 value => "EXPORT_DB_USER"."EXP_AYSHIBAT_JOB"
item_code => 9 value => x86_64/Linux 2.4.xx
item_code => 10 value => AYSDB121
item_code => 11 value => JA16SJISTILDE
item_code => 12 value => 4096
item_code => 14 value => 1
item_code => 15 value => 12.01.00.02.00
item_code => 16 value => 1
item_code => 17 value => 1
item_code => 18 value => 0
item_code => 19 value => 0
item_code => 20 value => 0
item_code => 21 value => 0
item_code => 22 value => 2
item_code => 23 value => 3

PL/SQL procedure successfully completed.
```

コード値(item_code)と実際の意味はマニュアルに記載があるものの、調べるのがちょっと面倒ですやね。
彡(ﾟ)(ﾟ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/1076d4e1-7e3f-4c79-f94d-c9daca80b308.png)

# 2. Doc ID 462488.1 の プロシージャ show_dumpfile_info 動かしてみる。

下記の My Oracle Supportドキュメント に DBMS_DATAPUMP.GET_DUMPFILE_INFO の情報を整形して出力するプロシージャ show_dumpfile_info のコードが載っています。

> Document 462488.1 How to Gather the Header Information and the Content of an Export Dumpfile ?
> https://support.oracle.com/epmos/faces/DocumentDisplay?id=462488.1

このプロシージャを動かしてみます。

```sql
SET SERVEROUTPUT ON SIZE UNLIMITED;
EXEC show_dumpfile_info('DIR_MIG_EXP_DMP', 'exp_AYSHIBAT_01.dmp');

----------------------------------------------------------------------------
Purpose..: Obtain details about export dumpfile.        Version: 18-DEC-2013
Required.: RDBMS version: 10.2.0.1.0 or higher
.          Export dumpfile version: 7.3.4.0.0 or higher
.          Export Data Pump dumpfile version: 10.1.0.1.0 or higher
Usage....: execute show_dumfile_info('DIRECTORY', 'DUMPFILE');
Example..: exec show_dumfile_info('MY_DIR', 'expdp_s.dmp')
----------------------------------------------------------------------------
Filename.: exp_AYSHIBAT_01.dmp
Directory: DIR_MIG_EXP_DMP
Disk Path: /home/oracle/work/dmp
Filetype.: 1 (Export Data Pump dumpfile)
----------------------------------------------------------------------------
...Database Job Version..........: 12.01.00.02.00
...Internal Dump File Version....: 4.2
...Creation Date.................: Wed Aug 10 08:11:34 2022
...File Number (in dump file set): 1
...Master Present in dump file...: 1 (Yes)
...Master in how many dump files.: 1
...Master Piece Number in file...: 1
...Operating System of source db.: x86_64/Linux 2.4.xx
...Instance Name of source db....: AYSDB121
...Characterset ID of source db..: 838 (JA16SJISTILDE)
...Language Name of characterset.: JA16SJISTILDE
...Job Name......................: "EXPORT_DB_USER"."EXP_AYSHIBAT_JOB"
...GUID (unique job identifier)..: E5DF98BEB62F2D5CE0537401000AD06E
...Block size dump file (bytes)..: 4096
...Metadata Compressed...........: 1 (Yes)
...Data Compressed...............: 0 (No)
...Compression Algorithm.........: 3 (Basic)
...Metadata Encrypted............: 0 (No)
...Table Data Encrypted..........: 0 (No)
...Column Data Encrypted.........: 0 (No)
...Encryption Mode...............: 2 (None)
...Internal Flag Values..........: 514
...Max Items Code (Info Items)...: 23
----------------------------------------------------------------------------

PL/SQL procedure successfully completed.
```

こっちの方が解り易いですね。

# 3. まとめ

DBMS_DATAPUMP.GET_DUMPFILE_INFOプロシージャでdmpファイルの情報を出力できたやで！彡(^)(^)
expdp/impdp の文字コード変換を調べています。NETWORK_LINK も絡めると、中々にややこしい……。
彡(-)(-)