Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1148869
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2013-10-11 14:27:00

使用数据泵的导出导入任务进行数据传输。
数据泵是一种基于数据库服务端的技术,所以需要使用到服务端的物理目录,不能将文件写到客户端上。
使用数据泵的用户,需要具有某个数据库目录的读写权限。
 
使用TABLES参数,表级别的导入导出:
expdp scott/tiger@db10g tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log
impdp scott/tiger@db10g tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=impdpEMP_DEPT.log TABLE_EXISTS_ACTION=APPEND
TABLE_EXISTS_ACTION=APPEND表示允许数据导入到已存在的表中。imp工具使用的是IGNORE=y
 
使用SCHEMAS参数,schema级别的导入导出。exp工具使用的是OWNER
expdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
impdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log
 
使用FULL参数,执行全库的导入导出
expdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log
impdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=impdpDB10G.log
 
 
INCLUDE和EXCLUDE可以用于导出导入时指定对象。当使用INCLUDE参数时,只有指定的对象可以导出导入。当使用EXCLUDE参数时,除了这些对象的其他所有对象都可以导出导入。2个参数是相互排斥的,不能同时使用,2个参数的语法相同。
INCLUDE=object_type[:name_clause] [, ...]
EXCLUDE=object_type[:name_clause] [, ...]
 
例如:
expdp scott/tiger@db10g schemas=SCOTT include=TABLE:"IN ('EMP', 'DEPT')" directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
expdp scott/tiger@db10g schemas=SCOTT exclude=TABLE:"= 'BONUS'" directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
 
对于某些操作系统,需要使用转移字符
include=TABLE:\"IN (\'EMP\', \'DEPT\')\"
 
单个导出导入可以使用多个参数内容,例如:
INCLUDE=TABLE,VIEW,PACKAGE:"LIKE '%API'"

INCLUDE=TABLE
INCLUDE=VIEW
INCLUDE=PACKAGE:"LIKE '%API'"
 
所有可以包括或排除的对象类型,都显示在DATABASE_EXPORT_OBJECTS,SCHEMA_EXPORT_OBJECTS,TABLE_EXPORT_OBJECTS视图中。
 
 

通过查询dba_datapump_jobs视图,可以监控当前正在运行的数据泵任务,只有正在运行的才有显示。
 
SQL> select * from dba_datapump_jobs;
 
OWNER_NAME     JOB_NAME                OPERATION   JOB_MODE    STATE           DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS
-------------- ----------------------- ----------- ----------- ----------- ---------- ----------------- -----------------
TEST           SYS_EXPORT_SCHEMA_01    EXPORT      SCHEMA      EXECUTING            1                 1                 3

数据泵提供了一个PL/SQL API,可以在数据库中执行数据泵的操作,不需要在操作系统上执行命令,也可以写成存储过程,放在数据库job中调度。
例如:
 
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
  l_dp_handle       NUMBER;
  l_last_job_state  VARCHAR2(30) := 'UNDEFINED';
  l_job_state       VARCHAR2(30) := 'UNDEFINED';
  l_sts             KU$_STATUS;
BEGIN
  l_dp_handle := DBMS_DATAPUMP.open(
    operation   => 'EXPORT',
    job_mode    => 'SCHEMA',
    remote_link => NULL,
    job_name    => 'EMP_EXPORT',
    version     => 'LATEST');

  DBMS_DATAPUMP.add_file(
    handle    => l_dp_handle,
    filename  => 'SCOTT.dmp',
    directory => 'TEST_DIR');

  DBMS_DATAPUMP.add_file(
    handle    => l_dp_handle,
    filename  => 'SCOTT.log',
    directory => 'TEST_DIR',
    filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);

  DBMS_DATAPUMP.metadata_filter(
    handle => l_dp_handle,
    name   => 'SCHEMA_EXPR',
    value  => '= ''SCOTT''');

  DBMS_DATAPUMP.start_job(l_dp_handle);

  DBMS_DATAPUMP.detach(l_dp_handle);
END;
/
 
一旦job开始运行,就可以在dba_datapump_jobs视图中查看到。

阅读(1419) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~