741.dmp文件信息判断及导入导出语句
一、判断dmp文件是exp还是expd导出
非官方方法:
确认dmp文件是exp导出还是expdp导出
1)xxd test.dmp | more 或者 xxd -ps -l 2 test.dmp
expdp导出的文件开头为0301,exp导出的文件开头为0303
2)strings test.dmp | more
expdp导出的dmp文件头信息:
“SYS”.“SYS_EXPORT_TABLE_01” -----job名称
x86_64/Linux 2.4.xx -----操作系统版本
bjdb -----数据库名称
ZHS16GBK -----数据库字符集
11.02.00.04.00 -----数据库版本
exp导出的dmp文件头信息:
iEXPORT:V11.02.00 -----版本
USCOTT -----用户
RTABLES -----对象
确认expdp导出的dmp文件的导出命令
strings test.dmp | grep CLIENT_COMMAND
3)如果dmp文件过大,无法打开
获取dmp文件的头信息
dd if=xxx.dmp of=aaa bs=1m count=1
以字符串方式 查看头信息
strings aaa|more
expdp:包含 SYS_EXPORT_TABLE
exp:包含 @EXPORT:V
官方方法:
如何确定一个dmp文件是exp导出的还是expdp导出的?
原创 Oracle 作者:巡完南山巡南山 时间:2019-06-05 16:17:25 1465 0
DBMS_DATAPUMP.GET_DUMPFILE_INFO()存储过程可以从dump文件中获取信息
Filetype返回以下文件类型:
1: Data Pump dump file
2: original Export dump file
在SQL*Plus中,用以下方法获取dump文件的信息:
(注意:替换
– Dump file(test.dmp) is saved in the /tmp/test.
SQL> conn /as sysdba
SQL> create or replace directory test as ‘/tmp/test’;
Directory created.
SQL> set serveroutput on
declare
v_filetype NUMBER; – 0=unknown 1=expdp 2=exp 3=ext
v_info_table sys.ku$_dumpfile_info; – PL/SQL table with file info
begin
dbms_datapump.get_dumpfile_info(
filename => ‘test.dmp’,
directory => upper(‘test’),
info_table => v_info_table,
filetype => v_filetype);
dbms_output.put_line('Filetype : ’ || v_filetype);
end;
/
SQL>
Filetype : 2
PL/SQL procedure successfully completed.
本文转自MOS原文,如何确定一个dmp文件是传统export(exp)导出的还是DataPump Export(expdp)导出的? (文档 ID 2533832.1)
用DBMS_DATAPUMP获得Oracle导出文件的元数据信息
我们在工作中会有这样的情况,要将一个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
oracle dump 文件解析,实用解析dmp文件内容
配置实验环境:
1.1 生产三个文件
exp woo/oracle table=dump_table file=1.dmp;
expdp woo/oracle tables=dump_table directory=dhome dumpfile=2.dmp;
touch 3.dmp
2.创建随机数据
SQL> create table dump_table as
2 select rownum as id,
3 to_char(sysdate + rownum / 24 / 3600, ‘yyyy-mm-dd hh24:mi:ss’) as inc_datetime,
4 trunc(dbms_random.value(0, 100)) as random_id,
5 dbms_random.string(‘x’, 20) random_string
6 from dual
7 connect by level <= 10;
Table created.
SQL> desc dump_table;
Name Null? Type
ID NUMBER
INC_DATETIME VARCHAR2(19)
RANDOM_ID NUMBER
RANDOM_STRING VARCHAR2(4000)
SQL> select count() from dump_table;
COUNT()
10
3.生成如下文件
[oracle@ora11grac1 ~]$ ls -rtl
total 212
-rw-r–r-- 1 oracle oinstall 16384 Mar 18 15:06 1.dmp
-rw-r----- 1 oracle asmadmin 98304 Mar 18 15:13 2.dmp
-rw-r–r-- 1 oracle asmadmin 1071 Mar 18 15:14 export.log
-rw-r----- 1 oracle asmadmin 98304 Mar 18 15:14 3.dmp
4.判断文件室友哪个版本生成的
[oracle@ora11grac1 ~]$ sed -n 1p 1.dmp
EXPORT:V11.02.00
5.判断文件类型
SQL> set serveroutput on
SQL> declare
2 v_filetype NUMBER; – 0=unknown 1=expdp 2=exp 3=ext
3 v_info_table sys.ku_dumpfile_info; – PL/SQL table with file info
4 begin
5 dbms_datapump.get_dumpfile_info(
6 filename => ‘2.dmp’,
7 directory => upper(‘dhome’),
8 info_table => v_info_table, filetype => v_filetype);
9 dbms_output.put_line('Filetype : ’ || v_filetype);
10 end;
11 /
Filetype : 1
PL/SQL procedure successfully completed.
SQL> set serveroutput on
SQL> declare
2 v_filetype NUMBER; – 0=unknown 1=expdp 2=exp 3=ext
3 v_info_table sys.ku_dumpfile_info; – PL/SQL table with file info
4 begin
5 dbms_datapump.get_dumpfile_info(
6 filename => ‘export.log’,
7 directory => upper(‘dhome’),
8 info_table => v_info_table, filetype => v_filetype);
9 dbms_output.put_line('Filetype : ’ || v_filetype);
10 end;
11 /
Filetype : 0
PL/SQL procedure successfully completed.
6.数据库字符集,数据库名称,操作系统类型,操作系统名称
[oracle@ora11grac1 ~]$ sed -n 1p 2.dmp
\ÒÂÇg€¼uC¡ÈÃë KàS
H€"WOO"."SYS_EXPORT_TABLE_01"x86_64/Linux 2.4.xxora11grac1:woo1AL32UTF8 11.02.00.04.00001:001:000001:000001ÿÿ$$
7.判断文件所属表空间或用户
[oracle@ora11grac1 ~]$ sed -n 2p 1.dmp
DWOO
8.导出方式,USER,TABLE,
[oracle@ora11grac1 ~]$ sed -n 3p 1.dmp
RTABLES
9.判断文件数据块大小
[oracle@ora11grac1 ~]$ sed -n 4p 1.dmp
8192
show_dumpfile_info脚本
需要修改
CONNECT system/manager
CREATE OR REPLACE PROCEDURE show_dumpfile_info(
p_dir VARCHAR2 DEFAULT ‘DATA_PUMP_DIR’,
p_file VARCHAR2 DEFAULT ‘EXPDAT.DMP’)
AS
– p_dir = directory object where dump file can be found
– p_file = simple filename of export dump file (case-sensitive)
v_separator VARCHAR2(80) := ‘--------------------------------------’ ||
‘--------------------------------------’;
v_path all_directories.directory_path%type := ‘?’;
v_filetype NUMBER; – 0=unknown 1=expdp 2=exp 3=ext
v_fileversion VARCHAR2(15); – 0.1=10gR1 1.1=10gR2 (etc.)
v_info_table sys.ku$_dumpfile_info; – PL/SQL table with file info
type valtype IS VARRAY(23) OF VARCHAR2(2048);
var_values valtype := valtype();
no_file_found EXCEPTION;
PRAGMA exception_init(no_file_found, -39211);
BEGIN
– Dump file details:
– ==================
– For Oracle10g Release 2 and higher:
– dbms_datapump.KU_DFHDR_MASTER_PRESENT CONSTANT NUMBER := 2;
– dbms_datapump.KU_DFHDR_FILE_NUMBER CONSTANT NUMBER := 4;
– dbms_datapump.KU_DFHDR_CREATION_DATE CONSTANT NUMBER := 6;
– dbms_datapump.KU_DFHDR_JOB_NAME CONSTANT NUMBER := 8;
– dbms_datapump.KU_DFHDR_INSTANCE CONSTANT NUMBER := 10;
– dbms_datapump.KU_DFHDR_BLOCKSIZE CONSTANT NUMBER := 12;
– dbms_datapump.KU_DFHDR_METADATA_COMPRESSED CONSTANT NUMBER := 14;
– dbms_datapump.KU_DFHDR_MASTER_PIECE_COUNT CONSTANT NUMBER := 16;
– dbms_datapump.KU_DFHDR_DATA_COMPRESSED CONSTANT NUMBER := 18;
– dbms_datapump.KU_DFHDR_DATA_ENCRYPTED CONSTANT NUMBER := 20;
– For Oracle11gR2:
– dbms_datapump.KU_DFHDR_ENCRIPTION_MODE CONSTANT NUMBER := 22;
– For Oracle12cR1:
– dbms_datapump.KU$_DFHDR_COMPRESSION_ALG CONSTANT NUMBER := 23;
– For Oracle10gR2: KU_DFHDR_MAX_ITEM_CODE CONSTANT NUMBER := 20;
– For Oracle11gR2: KU_DFHDR_MAX_ITEM_CODE CONSTANT NUMBER := 23;
– Show header output info:
– ========================
dbms_output.put_line(v_separator);
dbms_output.put_line(‘Purpose…: Obtain details about export ’ ||
‘dumpfile. Version: 18-DEC-2013’);
dbms_output.put_line(‘Required.: RDBMS version: 10.2.0.1.0 or higher’);
dbms_output.put_line(’. ’ ||
‘Export dumpfile version: 7.3.4.0.0 or higher’);
dbms_output.put_line(’. ’ ||
‘Export Data Pump dumpfile version: 10.1.0.1.0 or higher’);
dbms_output.put_line(‘Usage…: ’ ||
‘execute show_dumfile_info(’‘DIRECTORY’’, ‘‘DUMPFILE’’);’);
dbms_output.put_line(‘Example…: ’ ||
‘exec show_dumfile_info(’‘MY_DIR’’, ‘‘expdp_s.dmp’’)’);
dbms_output.put_line(v_separator);
dbms_output.put_line('Filename.: ’ || p_file);
dbms_output.put_line('Directory: ’ || p_dir);
– Retrieve Export dumpfile details:
– =================================
SELECT directory_path INTO v_path FROM all_directories
WHERE directory_name = p_dir
OR directory_name = UPPER(p_dir);
dbms_datapump.get_dumpfile_info(
filename => p_file, directory => UPPER(p_dir),
info_table => v_info_table, filetype => v_filetype);
var_values.EXTEND(23);
FOR i in 1 … 23 LOOP
BEGIN
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('Disk Path: ’ || v_path);
IF v_filetype >= 1 THEN
– Get characterset name:
BEGIN
SELECT var_values(5) || ’ (’ || nls_charset_name(var_values(5)) ||
‘)’ INTO var_values(5) FROM dual;
EXCEPTION WHEN OTHERS THEN null;
END;
IF v_filetype = 2 THEN
dbms_output.put_line(
‘Filetype.: ’ || v_filetype || ’ (Original Export dumpfile)’);
dbms_output.put_line(v_separator);
SELECT DECODE(var_values(13), ‘0’, ‘0 (Conventional Path)’,
‘1’, ‘1 (Direct Path)’, var_values(13))
INTO var_values(13) FROM dual;
dbms_output.put_line(’…Characterset ID of source db…: ’ || var_values(5));
dbms_output.put_line(’…Direct Path Export Mode…: ’ || var_values(13));
dbms_output.put_line(’…Export Version…: ’ || 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),
‘0.1’, ‘0.1 (Oracle10g Release 1: 10.1.0.x)’,
‘1.1’, ‘1.1 (Oracle10g Release 2: 10.2.0.x)’,
‘2.1’, ‘2.1 (Oracle11g Release 1: 11.1.0.x)’,
‘3.1’, ‘3.1 (Oracle11g Release 2: 11.2.0.x)’,
‘4.1’, ‘4.1 (Oracle12c Release 1: 12.1.0.x)’,
var_values(1)) INTO var_values(1) FROM dual;
SELECT DECODE(var_values(2), ‘0’, ‘0 (No)’, ‘1’, ‘1 (Yes)’,
var_values(2)) INTO var_values(2) FROM dual;
SELECT DECODE(var_values(14), ‘0’, ‘0 (No)’, ‘1’, ‘1 (Yes)’,
var_values(14)) INTO var_values(14) FROM dual;
SELECT DECODE(var_values(18), ‘0’, ‘0 (No)’, ‘1’, ‘1 (Yes)’,
var_values(18)) INTO var_values(18) FROM dual;
SELECT DECODE(var_values(19), ‘0’, ‘0 (No)’, ‘1’, ‘1 (Yes)’,
var_values(19)) INTO var_values(19) FROM dual;
SELECT DECODE(var_values(20), ‘0’, ‘0 (No)’, ‘1’, ‘1 (Yes)’,
var_values(20)) INTO var_values(20) FROM dual;
SELECT DECODE(var_values(21), ‘0’, ‘0 (No)’, ‘1’, ‘1 (Yes)’,
var_values(21)) INTO var_values(21) FROM dual;
SELECT DECODE(var_values(22),
‘1’, ‘1 (Unknown)’,
‘2’, ‘2 (None)’,
‘3’, ‘3 (Password)’,
‘4’, ‘4 (Password and Wallet)’,
‘5’, ‘5 (Wallet)’,
var_values(22)) INTO var_values(22) FROM dual;
SELECT DECODE(var_values(23),
‘2’, ‘2 (None)’,
‘3’, ‘3 (Basic)’,
‘4’, ‘4 (Low)’,
‘5’, ‘5 (Medium)’,
‘6’, ‘6 (High)’,
var_values(23)) INTO var_values(23) FROM dual;
IF v_filetype = 1 THEN
dbms_output.put_line(
‘Filetype.: ’ || v_filetype || ’ (Export Data Pump dumpfile)’);
dbms_output.put_line(v_separator);
dbms_output.put_line(’…Database Job Version…: ’ || var_values(15));
dbms_output.put_line(’…Internal Dump File Version…: ’ || var_values(1));
dbms_output.put_line(’…Creation Date…: ’ || var_values(6));
dbms_output.put_line(’…File Number (in dump file set): ’ || var_values(4));
dbms_output.put_line(’…Master Present in dump file…: ’ || var_values(2));
IF dbms_datapump.KU_DFHDR_MAX_ITEM_CODE > 15 THEN
dbms_output.put_line(’…Data Compressed…: ’ || var_values(18));
IF dbms_datapump.KU_DFHDR_MAX_ITEM_CODE > 15 THEN
dbms_output.put_line(’…Data Compressed…: ’ || var_values(18));
IF dbms_datapump.KU_DFHDR_MAX_ITEM_CODE);
END IF;
ELSE
dbms_output.put_line('Filetype.: ’ || v_filetype);
dbms_output.put_line(v_separator);
dbms_output.put_line(‘ERROR…: Not an export dumpfile.’);
END IF;
dbms_output.put_line(v_separator);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line(‘Disk Path: ?’);
dbms_output.put_line(‘Filetype.: ?’);
dbms_output.put_line(v_separator);
dbms_output.put_line(‘ERROR…: Directory Object does not exist.’);
dbms_output.put_line(v_separator);
WHEN no_file_found THEN
dbms_output.put_line('Disk Path: ’ || v_path);
dbms_output.put_line(‘Filetype.: ?’);
dbms_output.put_line(v_separator);
dbms_output.put_line(‘ERROR…: File does not exist.’);
dbms_output.put_line(v_separator);
END;
/




