如何提取exp/expdp导出文件头信息

分类:编程技术 时间:2024-02-20 15:58 浏览:0 评论:0
0
小编给大家分享一下如何提取exp/expdp导出文件的头部。希望您读完本文后有所收获。我们一起来讨论一下吧!



提取exp、expdp的dump文件头信息,支持Oracle 7.3.4以后的exp导出文件和Oracle 10.1以后的expdp导出文件


创建或替换过程 show_dumpfile_info(
p_dir VARCHAR2 DEFAULT 'DATA_PUMP_DIR',
p_file VARCHAR2 DEFAULT 'EXPDAT.DMP')
AS
-- p_dir = 目录对象,其中可以找到转储文件
-- p_file = 导出转储文件的简单文件名(区分大小写)
v_separator VARCHAR2(80) := '------------ -- ------------------------' ||
                                                                                                                                                                             -------------------- ----';
v_path all_directories.directory_path%type := '?';
v_filetype NUMBER; -- 0=未知 1=expdp 2=exp 3=ext
v_fileversion VARCHAR2(15); -- 0.1=10gR1 1.1=10gR2 (等等)
v_info_table sys.ku$_dumpfile_info; -- 带有文件信息的 PL/SQL 表
type valtype IS VARRAY(23) OF VARCHAR2(2048);
var_values valtype := valtype();
no_file_found EXCEPTION;
PRAGMA exception_init(no_file_found, -39211 );

BEGIN

-- 转储文件详细信息:
-- =========== =======< br/>-- 对于 Oracle10g 第 2 版及更高版本:
-- dbms_datapump.KU$_DFHDR_FILE_VERSION CONSTANT NUMBER := 1;
-- dbms_datapump.KU$_DFHDR_MASTER_PRESENT CONSTANT NUMBER := 2;
-- dbms_datapump.KU$_DFHDR_GUID 常量 := 3;
-- dbms_datapump.KU$_DFHDR_FILE_NUMBER 常量 := 4;
-- dbms_datapump.KU$_DFHDR_CHARSET_ID 常量NUMBER := 5;
-- dbms_datapump.KU$_DFHDR_CREATION_DATE CONSTANT NUMBER := 6;
-- dbms_datapump.KU$_DFHDR_CREATION_DATE 常量 := 6;
-- dbms_datapump. KU$_DFHDR_FLAGS 常量 := 7;
-- dbms_datapump.KU$_DFHDR_JOB_NAME 常量 := 8;
-- dbms_datapump.KU$_DFHDR_PLATFORM 常量NUMBER := 9;
-- dbms_datapump .KU$_DFHDR_INSTANCE 常量 := 10;
-- dbms_datapump.KU$_DFHDR_LANGUAGE 常量 := 11;
-- dbms_datapump.KU$_DFHDR_BLOCKSIZE常量 := 12;
-- dbms_datapump.KU$_DFHDR_DIRPATH 常量 := 13;
-- dbms_datapump.KU$_DFHDR_METADATA_COMPRESSED 常量 := 14;
-- dbms_datapump.KU$ _DFHDR_DB_VERSION 常量 := 15;
-- 对于 Oracle11gR1:
-- dbms_datapump.KU$_DFHDR_MASTER_PIECE_COUNT 常量 := 16;
-- dbms_datapump.KU$_DFHDR_MASTER_PIECE_NUMBER 常量 := 17 ;
-- dbms_datapump.KU$_DF HDR_DATA_COMPRESSED 常量 := 18;
-- dbms_datapump.KU$_DFHDR_METADATA_ENCRYPTED 常量 := 19;
-- dbms_datapump.KU$_DFHDR_DATA_ENCRYPTED 常量 : = 20;
-- 对于 Oracle11gR2:
-- dbms_datapump.KU$_DFHDR_COLUMNS_ENCRYPTED 常量 := 21;
-- dbms_datapump.KU$_DFHDR_ENCRIPTION_MODE 常量; 15;
-- 对于 Oracle11gR1:KU$_DFHDR_MAX_ITEM_代码常量 := 20;
-- 对于 Oracle11gR2:KU$_DFHDR_MAX_ITEM_CODE 常量 := 22;
-- 对于 Oracle12cR1:KU$_DFHDR_ MAX_ITEM_CODE 常量 := 23;

-- 显示标头输出信息:
-- ========================= =

dbms_output.put_line (v_separator);
dbms_output.put_line('目的..:获取有关导出' ||
'转储文件的详细信息。版本:2013 年 12 月 18 日');
dbms_output.put_line('必需:RDBMS 版本:10.2.0.1.0 或更高');
dbms_output.put_line('.   ' ||
'导出转储文件版本:7.3.4.0.0 或更高');
/> dbms_output.put_line('. ' ||
'导出数据泵转储文件版本:10.1.0.1 .0 或更高');
dbms_output.put_line('用法....: ' ||
'执行 show_dumfile_info(''DIRECTORY'', ''DUMPFILE'');');< br/> dbms_output.put_line('示例..: ' ||
'exec show_dumfile_info('' MY_DIR'', ''expdp_s.dmp'')');
dbms_output.put_line(v_separator) ;
dbms_output.put_line('文件名.: ' || p_file);
dbms_output. put_line('Directory: ' || p_dir);

-- 检索导出转储文件详细信息:
-- ================== ===============

从all_directories中选择directory_path到v_path
其中directory_name = p_dir
或directory_name = UPPER(p_dir);
/>
dbms_datapump.get_dumpfile_info(
            文件名 => p_file,     目录 => UPPER(p_dir),
info_table => v_info_table, filetype => v_filetype);

var_values.extend(23);
for I in 1. 23 循环
开始
SELECT value INTO var_values(i) FROM TABLE(v_info_table)
WHERE item_code = i;
Exception WHEN OTHERS THEN var_values (i) := '';
END;
END LOOP;

dbms_output.put_line('磁盘路径: ' || v_path);

IF v_filetype >= 1 THEN
-- 获取字符集名称:
BEGIN
SELECT var_values(5) || ' (' || nls_charset_name(var_values(5)) ||
      ')' INTO var_values(5) FROM Dual;
  其它为空时出现异常;
END;
IF v_filetype = 2 THEN
dbms_output.put_line(
'文件类型.: ' || v_filetype || ' (原始导出转储文件)');
dbms_output.put_line( v_separator);
SELECT DECODE( var_values(13), '0', '0 (常规路径)',
'1', '1 (直接路径)', var_values(13))
INTO var_values(13) FROM Dual;
dbms_output.put_line('...源数据库的字符集 ID..: ' || var_values(5));
dbms_output.put_line('.. .直接路径导出模式..... : ' || var_values(13));
dbms_output.put_line('...导出版本............: ' || var_values(15));
ELSIF v_filetype = 1 OR v_filetype = 3 THEN
SELECT SUBSTR(var_values(1), 1, 15) INTO v_fileversion FROM Dual;
SELECT DECODE(var_values(1),
SELECT DECODE(var_values) (1),
'0.1','0.1(Oracle10g版本1:10.1.0.x)',
'1.1','1.1(oracle10g版本2:10.2.0.x)',
'2.1','2.1(Oracle11g 版本 1: 11.0.x)',
                      '3.1','3.1(Oracle11g 版本 2:11.2.0.x)',
                 '4.1 ', '4.1(Oracle12c 重新租约 1: 12.1.0.x)',
    var_values(1)) INTO var_values(1) FROM Dual;
SELECT DECODE(var_values(2), '0', '0(否)' , '1', '1(是)',
var_values(2)) INTO var_values(2) FROM Dual;
SELECT DECODE(var_values(14), '0', '0(否) ', '1', '1(是)',
var_values(14)) INTO var_values(14) FROM Dual;
SELECT DECODE(var_values(18), '0', '0 (否)', '1', '1(是)',
var_values(18)) INTO var_values(18) FROM Dual;
SELECT DECODE(var_values(19), '0', '0 (否)', '1', '1 (是)',
var_values(19)) INTO var_values(19) FROM Dual;
SELECT DECODE(var_values(20), '0', '0 (否)', '1', '1(是)',
var_values(20)) INTO var_values(20) FROM Dual;
SELECT DECODE(var_values(21), '0', ' 0(否)', '1', '1(是)',
var_values(21)) INTO var_values(21) FROM Dual;
SELECT DECODE(var_values(22),

> var_values(22)) INTO var_values(22) FROM Dual;
SELECT DECODE(var_values(23),
'2', '2 (无)',
                                                                                                                                                                                                                                                                                            5 (中) ' ,
'6','6(HIGH)',
var_values(23))从对偶变为var_values(23);
if v_filetype = 1 then
DBMS_OUTPUT.PUT_LINE(
Filetype .: '|| v_filetype ||' (导出数据泵转储文件); ms_output.put_line('. ..数据库作业版本. ....: ' || var_values(15));
  dbms_output.put_line('...内部转储文件版本....: ' || var_values(1));
dbms_output. put_line('...创建日期.............: ' || var_values(6));
dbms_output.put_line('...文件编号(在转储文件集中):' || var_values(4));
dbms_output.put_line('...Master 存在于转储文件中...: ' || var_values( 2));
IF dbms_datapump.KU$_DFHDR_MAX_ITEM_CODE > 15 AND v_fileversion >= '2.1' THEN
             dbms_output.put_line('...掌握多少个转储文件。: ' || var_values(16 ));
           dbms_output.put_line('...文件中的主件编号...: ' | | var_values(17));
    END IF;
  dbms_output.put_line('. ..源数据库的操作系统:' || var_values(9));
IF v_fileversion >= '2.1' THEN
dbms_output.put_line('...源数据库的实例名称... .: ' || var_values(10));
END IF;
dbms_output.put_line('...源数据库的字符集ID..: ' || var_values(5));
dbms_output.put_line('...语言字符集名称。: ' || var_values(11 ));
dbms_output.put_line('...作业名称............ ............: ' || var_values(8));< br/> dbms_output.put_line('...GUID (唯一作业标识符)..: ' || var_values(3) );
数据库ms_output.put_line('...块大小转储文件(字节).. : ' || var_values(12));
dbms_output.put_line('...元数据压缩......... ....: ' || var_values(14));
IF dbms_datapump.KU$_DFHDR_MAX_ITEM_CODE > 15 THEN
      dbms_output.put_line('...数据压缩......... ....: ' || var_values(18));
                                                dbms_output.put_line('...数据压缩............: ' || var_values(18)) ; KU$_DFHDR_MAX_ITEM_CODE > 22 AND v_fileversion >= '4.1' THEN
          dbms_output.put_line('...压缩算法...: ' || var_values(23));
END IF;
dbms_output.put_line('...元数据加密............: ' || var_values(19));
dbms_output.put_line('.. .表数据加密.. .: ' || var_values(20));
dbms_output.put_line('...列数据已加密...: ' || var_values(21));
dbms_output.put_line('.. .加密模式........................: ' || var_values(22));
END IF;
ELSE
dbms_output.put_line(
'文件类型.: ' || v_filetype || ' (外部表转储文件)');
dbms_output.put_line(v_separator);
dbms_output.put_line('...数据库作业版本.....: ' || var_values(15));
dbms_output.put_line('...内部转储文件版本.... : ' || var_values(1));
dbms_output.put_line('...创建日期........................: ' || var_values(6));
dbms_output.put_line('...文件编号(在转储文件集中):' || var_values(4));
dbms_output.put_line('...源数据库的操作系统:' || var_values (9));
IF v_fileversion >= '2.1' THEN
dbms_output.put_line('...源数据库的实例名称...: ' || var_values(10));
    END IF;
    dbms_output.put_line('...源数据库的字符集 ID..: ' || var_values(5));
dbms_output.put_line('...字符集的语言名称.: ' || var_values(11));
dbms_output.put_line('. ..GUID (唯一作业标识符)..: ' || var_values(3));
dbms_output.put_line(' ...块大小转储文件(字节)..: ' || var_v值(12)) ;
       IF dbms_datapump.KU$_DFHDR_MAX_ITEM_CODE > 15 THEN
                                                                                                         ));
         IF dbms_datapump.KU$_DFHDR_MAX_ITEM_CODE > 22 AND v_fileversion >= '4.1' THEN
ine('...压缩算法...: ' || var_values(23));
END IF;
dbms_output.put_line('...表数据已加密....... ...: ' || var_values(20));
dbms_output.put_line('...加密模式........................: ' || var_values(22));
END IF;
END IF;
dbms_output.put_line('...内部标志值.....: ' | | var_values(7));
dbms_output. put_line('...最大项目代码(信息项目)...: ' ||
dbms_datapump.KU$_DFHDR_MAX_ITEM_CODE);
END IF ;
ELSE
dbms_output.put_line ('文件类型.:' || v_filetype);
dbms_output.put_line(v_separator);
dbms_output.put_line('错误....: 不是导出转储文件。');
END IF;
dbms_output.put_line(v_separator);

异常
当 no_data_found 那么
dbms_output.put_line('磁盘路径: ?');
dbms_output.put_line('Filetype.: ?');
dbms_output.put_line(v_separator);
dbms_output.put_line('ERROR....: 目录对象不存在。');
dbms_output.put_line(v_separator);
当 no_file_found 时
dbms_output.put_line('磁盘路径: ' || v_path);
dbms_output. put_line( 'Filetype.: ?');
dbms_output.put_line(v_separator);
dbms_output.put_line('错误......: 文件不存在。');
dbms_output. put_line( v_separator);
END;
/

读完本文后,相信您对“如何提取exp/expdp”感兴趣导出文件头信息》现在您已经有了一定的了解,如果您想了解更多相关知识,欢迎您关注行业资讯频道。感谢您的阅读!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何提取exp/expdp导出文件头信息

用户评论