暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用DBMS_DATAPUMP导出数据泵

askTom 2016-06-24
272

问题描述

下午好,这是一个开始的程序员。我遇到了DBMS_DATAPUMP.data_filter的问题。Data_filter不起作用。

创建过程exp_tables_w_qfilter
(
VARCHAR2中的p_schema_name,-- 'LTP'
VARCHAR2中的p_table_name,-“AUDITTABLE_TEST”
VARCHAR2中的p_table_filter默认为NULL-'where TIME >= time_templ'
)


v_sid VARCHAR2(200) := 'test1'; -此数据库的sid
V _ 句柄号; -- 作业句柄
v_current_time日期: = SYSDATE; -- 文件、作业名称等的一致时间戳。
v_start_time日期; -- 日志文件的开始时间
v_logfile_name VARCHAR2(200); -- 日志文件名
v_dumpfile_name VARCHAR2(200); -- 日志文件名
v_default_dir VARCHAR(30) := 'DPDIR'; -目录
v_line_no整数: = 0; -- 调试行号
v_sqlcode编号; -- sqlcode
v_compatible VARCHAR2(40) := '兼容'; -- 默认为 '兼容'
vc_job_mode常数VARCHAR2(200) := '表'; -- 作业模式
-v_inpup_param3 VARCHAR2(2000);
-- v_sysdate VARCHAR2(2000);
-v_some_var VARCHAR2 (2000);
var1 varchar2(1000) := 'where time >= to_date(''repl_val'',''DD-MM-yyy'')';
var2 varchar2(1000) := 'repl_val';
var3 varchar2(1000);

开始
v_line_no := 100; -调试行号

-创建日志和转储文件名
如果v_compatible = '兼容'
然后
v_logfile_name := 'expdp _ '| | v_sid | |' _ '| | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '.log';
v_dumpfile_name := 'expdp _ '| | v_sid | |' _ % U _ '| | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '.dmp';
其他
v_logfile_name := 'expdp _ '| | v_sid | |' _ '| TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi') | | '_' | | V _ 兼容 | | '.log';
v_dumpfile_name := 'expdp _ '| | v_sid | |' _ % u' | | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi ') | |' _ '| | V _ 兼容 | |'.dmp';
如果结束;

v_line_no := 150; -调试行号

-打开工作
开始
V _ 句柄: =
DBMS_DATAPUMP.open (操作 => '导出',
job_mode => vc_job_mode,
job_name => '导出 _' | | vc_job_mode | | '_' | | TO_CHAR(v_current_time,'yyyy_mmdd_hh24mi '),
版本 => v_compatible);
异常
当其他人
然后
DBMS_OUTPUT.put_line(SUBSTR('在dbms_datapump.open中失败',1,255));
加薪;
结束;

v_line_no := 200; -调试行号

-- 添加日志文件
DBMS_DATAPUMP.add_file (句柄 => v_handle,
文件名 => v_logfile_name,
目录 => 虚拟默认目录,
文件类型 => DBMS_DATAPUMP.ku $ _ 文件类型 _ 日志文件);
v_line_no := 400; -调试行号
-添加数据文件
DBMS_DATAPUMP.add_file (句柄 => v_handle,
文件名 => 'dp' | | '_ % u' | | v_dumpfile_name,
目录 => 虚拟默认目录,
文件类型 => DBMS_DATAPUMP.ku $ _ 文件类型 _ 转储文件);
v_line_no := 500; -调试行号


-模式的过滤器
DBMS_DATAPUMP.metadata_filter(handle => v_handle,name => 'schema_list ',VALUE => ''' | | p_schema_name | | ''');
v_line_no := 550; -调试行号

-表格的过滤器
DBMS_DATAPUMP.metadata_filter(handle => v_handle,name => 'name_list ',VALUE => ''' | | p_table_name | | ''');

v_line_no := 570; -调试行号

从dual中选择sysdate-365到var3;
dbms_output.put_line('第一个变量值为:' | | var1);
dbms_output.put_line('第二个变量值为:' | | var2);
dbms_output.put_line('第三个变量值为:' | | var3);
var1 := 替换 (var1,var2,var3);
dbms_output.put_line('填充后的第一个变量值为:' | | var1);


DBMS_DATAPUMP.data_filter (句柄 => v_handle,名称 => '子查询',值 => var1);


----------------------------
v_line_no := 600; -调试行号

-获取开始时间
v_start_time := 系统日期;

-在日志文件中添加开始时间
DBMS_DATAPUMP.log_entry(handle => v_handle,MESSAGE => '作业开始于' | | TO_CHAR(v_start_time,'dd-Mon-RR HH24:MI:SS'),log_file_only => 0);

v_line_no := 700; -调试行号
-开始工作
DBMS_DATAPUMP.start_job (句柄 => v_handle);
DBMS_DATAPUMP.detach (句柄 => v_handle);
v_line_no := 800; -调试行号
异常
当其他人
然后

开始
DBMS_DATAPUMP.detach (句柄 => v_handle);
异常
当其他人
然后
NULL;
结束;

DBMS_OUTPUT.put_line(SUBSTR ('v_line_no的值 = '| | TO_CHAR(v_line_no),1,255));
加薪;
结束exp_tables_w_qfilter; -过程exp_tables_w_qfilter

/

专家解答

你很接近-只是需要一点日期格式更改。这是代码的整理版本,第47行是关键格式部分。


SQL>
SQL> create or replace
  2  PROCEDURE exp_tables_w_qfilter
  3  (
  4  p_schema_name IN VARCHAR2 := 'SCOTT',
  5  p_table_name IN VARCHAR2 := 'EMP'
  6  )
  7  IS
  8
  9    v_sid VARCHAR2(200) := 'NP12'; -- sid for this databaes
 10    v_handle NUMBER; -- job handle
 11    v_current_time DATE := SYSDATE; -- consistent timestamp for files, job_name etc.
 12    v_start_time DATE; -- start time for log file
 13    v_logfile_name VARCHAR2(200); -- logfile name
 14    v_dumpfile_name VARCHAR2(200); -- logfile name
 15    v_default_dir VARCHAR(30) := 'TEMP'; -- directory
 16    v_line_no INTEGER := 0; -- debug line no
 17    v_sqlcode NUMBER; -- sqlcode
 18    v_compatible VARCHAR2(40) := 'COMPATIBLE'; -- default is 'COMPATIBLE'
 19    vc_job_mode CONSTANT VARCHAR2(200) := 'TABLE'; -- Job mode
 20    var1 varchar2(1000) := 'where hiredate >= to_date(''repl_val'', ''DD-MM-YYYY'')';
 21    var2 varchar2(1000) := 'repl_val';
 22    var3 varchar2(1000);
 23
 24  BEGIN
 25
 26    v_logfile_name := 'expdp_' || v_sid || '_' || TO_CHAR(v_current_time, 'YYYY_MMDD_HH24MI') || '.log';
 27    v_dumpfile_name := 'expdp_' || v_sid || '_%U_' || TO_CHAR(v_current_time, 'YYYY_MMDD_HH24MI') || '.dmp';
 28
 29    v_handle := DBMS_DATAPUMP.open(operation => 'EXPORT',
 30    job_mode => vc_job_mode,
 31    job_name => 'EXPORT_' || vc_job_mode || '_' || TO_CHAR(v_current_time, 'YYYY_MMDD_HH24MI'),
 32    version => v_compatible);
 33
 34    DBMS_DATAPUMP.add_file(handle => v_handle,
 35    filename => v_logfile_name,
 36    directory => v_default_dir,
 37    filetype => DBMS_DATAPUMP.ku$_file_type_log_file);
 38
 39    DBMS_DATAPUMP.add_file(handle => v_handle,
 40    filename => 'dp' || '_%U_' || v_dumpfile_name,
 41    directory => v_default_dir,
 42    filetype => DBMS_DATAPUMP.ku$_file_type_dump_file);
 43
 44    DBMS_DATAPUMP.metadata_filter(handle => v_handle, name => 'SCHEMA_LIST', VALUE => '''' || p_schema_name || '''');
 45    DBMS_DATAPUMP.metadata_filter(handle => v_handle, name => 'NAME_LIST', VALUE => '''' || p_table_name || '''');
 46
 47    select to_char(date '1981-07-01','DD-MM-YYYY') into var3 from dual;
 48
 49    dbms_output.put_line('First variable value is: ' || var1);
 50    dbms_output.put_line('Second variable value is: ' || var2);
 51    dbms_output.put_line('Third variable value is: ' || var3);
 52    var1 := replace(var1, var2, var3);
 53    dbms_output.put_line('First variable value after perlacement is: ' || var1);
 54
 55    DBMS_DATAPUMP.data_filter(handle => v_handle, name => 'SUBQUERY', VALUE => var1);
 56
 57    v_start_time := SYSDATE;
 58    DBMS_DATAPUMP.log_entry(handle => v_handle, MESSAGE => 'Job Start at ' || TO_CHAR(v_start_time, 'DD-Mon-RR HH24:MI:SS'), log_file_only => 0);
 59
 60    DBMS_DATAPUMP.start_job(handle => v_handle);
 61    DBMS_DATAPUMP.detach(handle => v_handle);
 62  EXCEPTION
 63  WHEN OTHERS
 64  THEN
 65    BEGIN
 66    DBMS_DATAPUMP.detach(handle => v_handle);
 67    EXCEPTION
 68    WHEN OTHERS
 69    THEN
 70    NULL;
 71    END;
 72
 73  END;
 74  /

Procedure created.

SQL>
SQL>
SQL> set serverout on
SQL> exec exp_tables_w_qfilter
First variable value is: where hiredate >= to_date('repl_val', 'DD-MM-YYYY')
Second variable value is: repl_val
Third variable value is: 01-07-1981
First variable value after perlacement is: where hiredate >= to_date('01-07-1981', 'DD-MM-YYYY')

PL/SQL procedure successfully completed.


;;; Job Start at 27-Jun-16 09:09:12
FLASHBACK automatically enabled to preserve database integrity.
Starting "MCDONAC"."EXPORT_TABLE_2016_0627_0909":  
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/TRIGGER
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
. . exported "SCOTT"."EMP"                               8.531 KB       8 rows
Master table "MCDONAC"."EXPORT_TABLE_2016_0627_0909" successfully loaded/unloaded
******************************************************************************
Dump file set for MCDONAC.EXPORT_TABLE_2016_0627_0909 is:
  C:\TEMP\DP_01_EXPDP_NP12_01_2016_0627_0909.DMP
Job "MCDONAC"."EXPORT_TABLE_2016_0627_0909" successfully completed at Mon Jun 27 09:09:14 2016 elapsed 0 00:00:02




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论