用DBMS_DATAPUMP获得Oracle导出文件的元数据信息

来源:互联网 发布:js decode 编辑:程序博客网 时间:2024/04/30 03:45

我们在工作中会有这样的情况,要将一个dmp文件导入到数据库中,可是我们却没有这个文件的元数据信息,比如数据库版本号、字符集,是Datapump文件还是传统的Export文件。Oracle10g以上的版本有一个DBMS_DATAPUMP工具包,里面有一个过程GET_DUMPFILE_INFO可以为我们取得dmp的文件信息。

我们先看看这个文件的过程的描述:

 

DBMS_DATAPUMP.GET_DUMPFILE_INFO(

   filename    IN VARCHAR2,

   directory   IN VARCHAR2,

   info_table  OUT ku$_dumpfile_info,

   filetype    OUT NUMBER);

 

下面是每个参数的描述:

 

filename    A simple filename with no directory path information

directory   A directory object that specifies where the file can be found

info_table  A PL/SQL table for storing information about the dump file

filetype    The type of file (Data Pump dump file, original Export dump file, or unknown)

 

下面开始测试,注意要在Oracle10g以上版本数据库中测试

1、导出一个文件,为方便起见,我们使用Oracle自带的目录对象DATA_PUMP_DIR

 

expdp system/password directory=data_pump_dir dumpfile=test.dmp logfile=test.log tables=scott.emp

 

2、编写PLSQL代码,调用GET_DUMPFILE_INFO过程,获得test.dmp文件元数据信息。

 

DECLARE

   t1             ku$_dumpfile_info;

   v1             NUMBER;

   item_meaning   VARCHAR2 (40);

   v_file_type    VARCHAR2 (20);

BEGIN

   DBMS_DATAPUMP.GET_DUMPFILE_INFO ('test.dmp',

                                    'DATA_PUMP_DIR',

                                    t1,

                                    v1);

 

   IF v1 = 1

   THEN

      v_file_type := 'DATA_PUMP_FILE';

   ELSE

      v_file_type := 'ORIGINAL_EXPORT_FILE';

   END IF;

 

   DBMS_OUTPUT.PUT_LINE ('filetype: ' || v_file_type);

 

   FOR i IN 1 .. t1.COUNT

   LOOP

      item_meaning :=

         CASE t1 (i).item_code

            WHEN 1 THEN 'FILE_VERSION'

            WHEN 2 THEN 'MASTER_PRESENT'

            WHEN 3 THEN 'GUID'

            WHEN 4 THEN 'FILE_NUMBER'

            WHEN 5 THEN 'CHARSET_ID'

            WHEN 6 THEN 'CREATION_DATE'

            WHEN 7 THEN 'FLAGS'

            WHEN 8 THEN 'JOB_NAME'

            WHEN 9 THEN 'PLATFORM'

            WHEN 10 THEN 'INSTANCE'

            WHEN 11 THEN 'LANGUAGE'

            WHEN 12 THEN 'BLOCKSIZE'

            WHEN 13 THEN 'DIRPATH'

            WHEN 14 THEN 'METADATA_COMPRESSED'

            WHEN 15 THEN 'DB_VERSION'

            WHEN 16 THEN 'MASTER_PIECE_COUNT'

            WHEN 17 THEN 'MASTER_PIECE_NUMBER'

            WHEN 18 THEN 'DATA_COMPRESSED'

            WHEN 19 THEN 'METADATA_ENCRYPTED'

            WHEN 20 THEN 'DATA_ENCRYPTED'

            ELSE 'UNKNOWN'

         END;

 

 

      DBMS_OUTPUT.PUT_LINE (

         RPAD (item_meaning || ':', 30, ' ') || LPAD (t1 (i).VALUE, 30, ' '));

   END LOOP;

END;

/

 

下面是输出结果:

 

filetype: DATA_PUMP_FILE

FILE_VERSION:                                            3.1

DB_VERSION:                                   11.02.00.00.00

MASTER_PRESENT:                                            1

FLAGS:                                                     2

GUID:                         72C6699324794336B115F01D234763

CHARSET_ID:                                              852

FILE_NUMBER:                                               1

JOB_NAME:                     "SYSTEM"."SYS_EXPORT_TABLE_01"

PLATFORM:                                 IBMPC/WIN_NT-8.1.0

INSTANCE:                                                ii1

LANGUAGE:                                           ZHS16GBK

CREATION_DATE:                      Mon Nov 22 16:41:26 2010

BLOCKSIZE:                                              4096

METADATA_COMPRESSED:                                       1

DATA_COMPRESSED:                                           0

METADATA_ENCRYPTED:                                        0

DATA_ENCRYPTED:                                            0

UNKNOWN:                                                   0

UNKNOWN:                                                   2

MASTER_PIECE_COUNT:                                        1

MASTER_PIECE_NUMBER:                                       1

 

PL/SQL 过程已成功完成。

 

3、再次用原始的导出方式导出scott.emp数据表,首先获得DATA_PUMP_DIR的位置

 

 

SELECT directory_path

  FROM DBA_DIRECTORIES

 WHERE directory_name='DATA_PUMP_DIR';

 

DIRECTORY_PATH

-------------------------------

E:\app\Oracle\admin\ii1\dpdump\

 

然后执行

exp system/password file= E:\app\Oracle\admin\ii1\dpdump\

test.dmp log=test.log tables=scott.emp

 

4、最后再次执行上面的PL/SQL代码,得到结果

 

filetype: ORIGINAL_EXPORT_FILE

DB_VERSION:                                 EXPORT:V11.02.00

CHARSET_ID:                                              852

DIRPATH:                                                   0

 

可见,对于传统的导出方式,用DBMS_DATAPUMP.GET_DUMPFILE_INFO获得的信息要少得多。

0 0
原创粉丝点击