Oracle - e​x​p​d​p、​i​m​p​d​p​ ​用​法​详​解

来源:互联网 发布:社交媒体情景类数据 编辑:程序博客网 时间:2024/05/20 07:15
expdp/impdp使用总结


用expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入, 如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

一.创建逻辑目录,该命令不会在操作系统创建真正的目录.最好以system等管理员创建.
create directory dpdata1 as 'd:\test\dump';

二.查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错.)
select * from dba_directories;

三.给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予.
grant read, write on directory dpdata1 to scott;

四.导出数据
1)按用户导
expdp scott/tiger@orcl DIRECTORY=dpdata1 dumpfile=expdp.dmp LOGFILE=expdp.log schemas=scott;

2)并行进程parallel
expdp scott/tiger@orcl DIRECTORY=dpdata1 dumpfile=expdp.dmp LOGFILE=expdp.log schemas=scott parallel=40 job_name=scott3;

3)按表名导
expdp scott/tiger@orcl DIRECTORY=dpdata1 dumpfile=expdp.dmp LOGFILE=expdp.log TABLES=emp,dept;

4)按查询条件导
expdp scott/tiger@orcl DIRECTORY=dpdata1 dumpfile=expdp.dmp LOGFILE=expdp.log Tables=emp query='WHERE deptno=20';

5)按表空间导
expdp scott/tiger@orcl DIRECTORY=dpdata1 dumpfile=expdp.dmp LOGFILE=expdp.log TABLESPACES=temp,example;

6)导整个数据库
expdp scott/tiger@orcl DIRECTORY=dpdata1 dumpfile=expdp.dmp LOGFILE=expdp.log FULL=y;


五.还原数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;

2)改变表的owner
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;

3)导入表空间
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLESPACES=example;

4)导入数据库
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp FULL=y;

5)追加数据
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;

6)导入的用户和表空间改变的情况(<qss:原用户,data_spc:原表空间>; <qsstest:目标用户,test_tablespace:目标表空间>)
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp remap_schema=qss:qsstest remap_tablespace=data_spc:test_tablespace
 
 
----------------------------------------------------------------------------------------------------------------------------------------------------------


EXPDP和IMPDP使用说明

OracleDatabase 10g引入了最新的数据泵(DataDump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中.
在Oracle10g中,数据泵(DataPump)的所有工作都有数据库实例来完成,数据库可以并行来处理这些工作,不仅可以通过建立多个数据泵工作进程来读/写正在被导出/导入的数据,
也可以建立并行I/O服务器以更快地读取或插入数据,从而,单进程瓶颈被彻底解决。

        数据泵导出导入(EXPDP和IMPDP)的作用
1、实现逻辑备份和逻辑恢复,通过数据泵,以前通过EXP/IMP主要基于Client/Server的逻辑备份方式转换为服务器端的快速备份,数据泵主要工作在服务器端,可以通过并行方式快速装入或卸载数据,而且可以在运行过程中调整并行的程度,以加快或减少资源消耗.
2、在数据库用户之间移动对象.
3、在数据库之间移动对象
4、 数据泵通过新的API来建立和管理,这些新的工作主要由DBMS_DATAPUMP来完成。新的导入/导出工具完全成为了一个客户端应用,
5、通过IMPDP/EXPDP执行的命令实际上都是在调用Server端的API在执行操作,所以一旦一个任务被调度或执行,客户端就可以推出连接,任务会在server端继续执行,随后通过客户端实用程序从任何地方检查任务的状态和进行修改
6、实现表空间搬移. 数据泵导出导入与传统导出导入的区别:
    在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.使用EXPDP和IMPDP时应该注意的事项;
    1) EXP和IMP是客户段工具程序,它们既可以在客户端使用,也可以在服务器段使用.
    2) IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件.
    3) 数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.
    4) EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用
    

7、EXPDP命令行选项
1.ATTACH
该选项用于在客户会话与已存在导出作用之间建立关联.语法如下
ATTACH=[schema_name.]job_name
Schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:
Expdp scott/tiger ATTACH=scott.export_job

2.CONTENT
该选项用于指定要导出的内容.默认值为ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置CONTENT为ALL时,将导出对象定义及其所有数据.为DATA_ONLY时,只导出对象数据,为METADATA_ONLY时,只导出对象定义
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump CONTENT=METADATA_ONLY

3.DIRECTORY
指定转储文件和日志文件所在的目录    DIRECTORY=directory_object
Directory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS目录
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
建立目录:    CREATE DIRECTORY dump as ‘d:dump’;
查询创建了那些子目录:    SELECT * FROM dba_directories;

4.DUMPFILE
用于指定转储文件的名称,默认名称为expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象
Expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp

5.ESTIMATE
指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKS
EXTIMATE={BLOCKS | STATISTICS}
设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间
Expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS    DIRECTORY=dump DUMPFILE=a.dump

6.EXTIMATE_ONLY
指定是否只估算导出作业所占用的磁盘空间,默认值为N
EXTIMATE_ONLY={Y | N}
设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作.
Expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y

7.EXCLUDE
该选项用于指定执行操作时释放要排除对象类型或相关对象
EXCLUDE=object_type[:name_clause] [,….]
Object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW

8.FILESIZE
指定导出文件的最大尺寸,默认为0,(表示文件尺寸没有限制)

9.FLASHBACK_SCN
指定导出特定SCN时刻的表数据
FLASHBACK_SCN=scn_value
Scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp     FLASHBACK_SCN=358523

10.FLASHBACK_TIME
指定导出特定时间点的表数据
FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=
“TO_TIMESTAMP(’25-08-200414:35:00’,’DD-MM-YYYYHH24:MI:SS’)”

11.FULL
指定数据库模式导出,默认为N
FULL={Y | N}
为Y时,标识执行数据库导出.

12.HELP
指定是否显示EXPDP命令行选项的帮助信息,默认为N
当设置为Y时,会显示导出选项的帮助信息.
Expdp help=y

13.INCLUDE
指定导出时要包含的对象类型及相关对象
INCLUDE = object_type[:name_clause] [,… ]

14.JOB_NAME
指定要导出作用的名称,默认为SYS_XXX
JOB_NAME=jobname_string

15.LOGFILE
指定导出日志文件文件的名称,默认名称为export.log
LOGFILE=[directory_object:]file_name
Directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值.
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log

16.NETWORK_LINK
指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.

17.NOLOGFILE
该选项用于指定禁止生成导出日志文件,默认值为N.

18.PARALLEL
指定执行导出操作的并行进程个数,默认值为1

19.PARFILE
指定导出参数文件的名称
PARFILE=[directory_path] file_name

20.QUERY
用于指定过滤导出数据的where条件
QUERY=[schema.] [table_name:] query_clause
Schema用于指定方案名,table_name用于指定表名,query_clause用于指定条件限制子句.QUERY选项不能与CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等选项同时使用.
Expdp scott/tiger directory=dump dumpfiel=a.dmp
Tables=emp query=’WHEREdeptno=20’

21.SCHEMAS
该方案用于指定执行方案模式导出,默认为当前用户方案.

22.STATUS
指定显示导出作用进程的详细状态,默认值为0

23.TABLES
指定表模式导出
TABLES=[schema_name.]table_name[:partition_name][,…]
Schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.

24.TABLESPACES
指定要导出表空间列表

25.TRANSPORT_FULL_CHECK
该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N.
当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表空间所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.当设置为N时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.

26.TRANSPORT_TABLESPACES
指定执行表空间模式导出

27.VERSION
指定被导出对象的数据库版本,默认值为COMPATIBLE.
VERSION={COMPATIBLE | LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.调用EXPDP
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此,使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
 
 

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

三、EXPDP/IMPDP的停止与重启动

EXPDP和IMPDP的本质在于,通过API调用,把传统的EXP/IMP类交付式模式的操作,转变成数据库内部的job任务,从而实现了任务的可终止与重启动。
c:\expdptest/test@acfdirectory=dpdata dumpfile=full.dmp full=y job_name=expfull

在执行过程中,可以拿下Ctrl+C组合键,退出当前交互模式,退出之后,导出操作不会停止,这不同于Oracle以前的EXP。以前的EXP,如果退出交互式模式,就会出错终止导出任务。

在Oracle10中,由于EXPDP是数据库内部定义的任务,已经与客户端无关。退出交互之后,会进入export的命令行模式,此时支持status等查看命令:

Export>status

如果想停止改任务,可以发出stop_job命令:    Export>stop_job
接下来可以通过命令行再次连接到这个任务:    c:\expdptest/test@acfattach=expfull
通过start_job命令重新启动导出:            Export>start_job

4、EXPDP排出部分对象的导出
在EXPDP的帮助文件中,可以看到存在EXCLUDE和INCLUDE参数

这个两个参数文档中介绍的命令格式存在问题,这个两个参数的正确用法是:
EXCLUDE=OBJECT_TYPE[:name_clause][,...]
INCLUDE=OBJECT_TYPE[:name_clause][,...]

示例:
1、导出排除之后的所有内容
expdp <other_parameters> schema=scott exclude=sequence,table:"in('EMP','DEPT')"
2、导出包含的过程
impdp <other_parameters> schema=scott include=function,package,procedure,table:"='EMP'"
3、只导出过程,而不导出其它任何东西(不导出表、视图、甚至函数):
expdpscott/tiger directory=dmpdir dumpfile=procedure.dmp include=PROCEDURE

4、有了这些还不够,由于命令中包含了多个特殊字符,在不同的操作系统下需要通过转义字符才能使上面的命令顺利执行
如:EXCLUDE=TABLE:\"IN('BIGTALE')\"

5、只导出一些特定的对象(比如说,函数FUNC1和过程PROC1)
expdpscott/tiger directory=dmpdir dumpfile=test.dmp  include=PROCEDURE:\"=\'PROC1\'\",FUNCTION:\"=\'FUNC1\'\"

6、可以用导出的dmp文件来创建dmp文件中包含对象的DDL脚本,以供之后使用。
一个称为SQLFILE(impdp参数)参数允许创建DDL脚本文件。
impdpscott/tiger DIRECTORY=dmpdir DUMPFILE=expprocs.dmp SQLFILE=aa.sql
使用这种方法的impdp,可以从dp出来的dmp文件中提取对象的DDL语句,这样的impdp并不把数据导入数据库中,只是创建DDL语句文件

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

3.   导出过程中的监控
当DataPump Export (DPE)运行时,按Control-C;它将阻止消息在屏幕上显示,但不停止导出进程本身。相反,它将显示DPE提示符(如下所示)。进程现在被认为处于“交互式”模式:

Export>
这种方法允许在这个DPE作业上输入命令查询及控制当前作业。

4.   并行操作(PARALLEL)
您可以通过PARALLEL参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数dumpfile应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:

expdpananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmpparallel=4 job_name=Cases_Export

注意:dumpfile参数拥有一个通配符%U,它指示文件将按需要创建,格式将为expCASES_nn.dmp,其中nn从01开始,然后按需要向上增加。

在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。

分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。否则,与维护DataPump作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。

5.   数据库监控

您还可以从数据库视图获得关于运行的DataPump作业的更多信息。监控作业的主视图是DBA_DATAPUMP_JOBS,它将告诉您在作业上有多少个工作进程(列DEGREE)在工作。

另一个重要的视图是DBA_DATAPUMP_SESSIONS,当它与上述视图和V$SESSION结合时将给出主前台进程的会话SID。

selectsid, serial#
from v$session s, dba_datapump_sessions d
where s.saddr = d.saddr;

这条指令显示前台进程的会话。更多有用的信息可以从警报日志中获得。当进程启动时,MCP和工作进程在警报日志中显示如下:

kupprdp:masterprocess DM00 started with pid=23, OS id=20530 to execute -
 SYS.KUPM$MCP.MAIN('CASES_EXPORT','ANANDA');
kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 toexecute -
 SYS.KUPW$WORKER.MAIN('CASES_EXPORT','ANANDA');
kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 toexecute -
 SYS.KUPW$WORKER.MAIN('CASES_EXPORT','ANANDA');

它显示为数据泵操作启动的会话的PID。您可以用以下查询找到实际的SID:

selectsid, program from v$session where paddr in
 (select addr from v$process where pid in(23,24,25));

PROGRAM列将对应警报日志文件中的名称显示进程DM(为主进程)或DW(为工作进程)。如果一个工作进程使用了并行查询,比如说SID23,您可以在视图V$PX_SESSION中看到它,并把它找出来。它将为您显示从SID23代表的工作进程中运行的所有并行查询会话:

selectsid from v$px_session where qcsid = 23;

从视图V$SESSION_LONGOPS中可以获得其它的有用信息来预测完成作业将花费的时间。

selectsid, serial#, sofar, totalwork
from v$session_longops
where opname = 'CASES_EXPORT'
and sofar != totalwork;

列totalwork显示总工作量,该列的sofar数量被加和到当前的时刻—因而您可以用它来估计还要花多长时间。

0 0
原创粉丝点击