欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle expdp导出和impdp导入使用方法

程序员文章站 2024-03-13 22:52:10
...

本篇介绍一下oracle expdp导出、impdp导入的使用方法

准备工作

oracle中的expdp导出、impdp导入的使用之前,都得先完成以下三个步骤

第一步 以管理员身份,创建逻辑目录

create directory my_dbdata as 'D:/my_dbdata';

第二步 查看逻辑目录是否创建成功

select * from dba_directories;

此时应该在再查看“D:/my_dbdata”这个磁盘物理路径是否存在。因为oracle创建时并不关心该磁盘目录是否存在,如果不存在,则在后续的操作中会报错

第三步 赋予导出用户的逻辑目录操作权限

比如我要导出一个用户名为“answer”的库,则需要用管理员来赋予“answer”用户对于逻辑目录的操作权限。

grant read,write on directory my_dbdata to answer;

操作系统为windows,则打开cmd窗口,若为linux或其他unix系统,则直接在命令行操作

特别注意:在expdp、impdp命令使用时,不要习惯性的在命令末尾加上分号“;”,会导致不经意间出现错误。

          曾经我进行导入操作是,最后加了个分号,语句如下:

impdp eppapp0805/eppapp0805 DIRECTORY=epp_data DUMPFILE=eppapptest_88_20130805.dmp 
    remap_schema=eppapptest:eppapp0805;

    看见了没,最后那个参数是remap_schema=eppapptest:eppapp0805,表示该dmp包是从eppapptest用户导出来的,要把这个dmp包导入到用户eppapp0805去,结果,导入时oracle把“eppapp0805;”连分号一起当成用户名了,一看现有库中不存在这个用户,就创建新用户,然后就创建了一个带分号结尾的用户。而这个用户还不能登录,因为有特殊字符,非常的郁闷

导出-expdp

1)按用户导出

expdp answer/[email protected] schemas=answer dumpfile=answer.dmp DIRECTORY=my_dbdata

2)按表名导出

expdp answer/[email protected] TABLES=a_answer,a_question 
    dumpfile=m_table.dmp DIRECTORY=my_dbdata

3)按查询条件导出

expdp answer/[email protected] directory=my_dbdata dumpfile=exp_by_query.dmp 
    tables=a_answer query='WHERE id < 20'

4)按表空间导出

expdp answer/answer DIRECTORY=my_dbdata DUMPFILE=tablespace.dmp TABLESPACES=user

5)整个数据库导出

expdp answer/answer DIRECTORY=my_dbdata DUMPFILE=full.dmp FULL=y

导入-impdp

1)导入到指定用户下

impdp answer/answer DIRECTORY=my_dbdata DUMPFILE=answer.dmp SCHEMAS=answer

2)如果导出的用户表空间跟导入的用户表空间不一致,则按下面的方法导入

impdp answer/answer DIRECTORY=my_dbdata DUMPFILE=answer.dmp 
    REMAP_SCHEMA=user1(导出时的所属用户名):user2(导入时的所属用户名)

3)只导入dmp文件中的某几个表

impdp answer/answer DIRECTORY=my_dbdata DUMPFILE=answer.dmp 
    TABLES=a_answer,a_question

4)导入表空间

impdp answer/answer DIRECTORY=my_dbdata DUMPFILE=tablespace.dmp TABLESPACES=user

5)导入整个数据库

impdp answer/answer DIRECTORY=my_dbdata DUMPFILE=full.dmp FULL=y;

6)追加数据

impdp answer/answer DIRECTORY=my_dbdata DUMPFILE=answer.dmp 
    SCHEMAS=answer TABLE_EXISTS_ACTION=APPEND

导出-expdp参数说明

CONTENT

用于指定要导出的内容,默认为ALL

CONTENT=ALL:导出对象定义和所有数据

        DATA_ONLY:只导出数据

        METADATA_ONLY:只导出对象定义

DIRECTORY

指定逻辑目录的名称,为之前创建的逻辑目录。

EXCLUDE

用于指定执行操作时释放要排除的对象类型或相关对象

EXCLUDE=object_type[:name_clause] [,….]

object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象

例:EXCLUDE=TABLE:EMP


EXCLUDE和INCLUDE不能同时使用

INCLUDE

导出时包含指定的类型

例:INCLUDE=TABLE_DATA,

   INCLUDE=TABLE:"LIKE 'TAB%'"

   INCLUDE=TABLE:”NOT LIKE ‘TAB%’”…


EXCLUDE和INCLUDE不能同时使用

FILESIZE

指定导出文件的大小,默认为0,表示没有大小限制(单位为bytes)

TABLESPACE

指定一个表空间导出

QUERY

QUERY=[schema.]
[table_name:] query_clause

schema为指定方案名,table_name为指定表名,query_clause用于指定条件限制子句


例:expdp answer/answer directory=my_dbdata dumpfiel=answer.dmp tables=a_answer query=’WHERE deptno=20’


QUERY选项不能与CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等选项同时使用.


PARALLEL

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


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


例:expdp answer/answer tables=a_answer directory=my_dbdata dumpfile=expCASES_%U.dmp parallel=4


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


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


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



导入-impdp参数说明

TABBLE_EXISTS_ACTION

TABBLE_EXISTS_ACTION={SKIP
| APPEND | TRUNCATE | FRPLACE }


SKIP:导入时会跳过已存在的对象

APPEND:导入时会追加数据

TRUNCATE:导入时会截断表,然后追加新的数据

REPLACE:导入时会删除已存在的表,重建表再追加数据

REMAP_SCHEMA

用于将源方案中的所有对象装载到目标方案中。

例:如果dmp文件导出时对应用户名为 user1,

    导入时对应用户名为user2,

则因为用户名不一致而无法导入,需要这样用

REMAP_SCHEMA=user1:user2

REMAP_TABLESPACE

将源表空间的所有对象导入到目标表空间

REMAP_TABLESPACE=source_tablespace:target:tablespace

REMAP_DATAFILE

将源数据文件转变为目标数据文件,在不同平台之间搬移表空间可能需要该选项

REMAP_DATAFIEL=source_datafie:target_datafile


原文:点击打开链接