oracle的导出命令


资料来自百度搜索,测试全库备份正常导出。

 

 

常用的oracle数据库备份(导入/导出)有两种,分别是exp/imp和expd/impd,前者是Orace早期版本带有的导入导出工具,后者是Oracle10g后出现的,下面进行分别介绍!

1.exp/imp

三种导入导出类型

Oracle支持三种导入导出类型分别是

表方式(T方式),用户方式(U方式),全库方式(Full方式)

A: 表方式(T方式)

备份(exp)某个用户模式下指定的对象(表),

exp guwei/ai123456@10.21.19.63/orcl rows=y indexes=n compress=n buffer=50000000 file=exp_table.dmp log=exp_table.log tables=USER_INFO,POLICY_INFO

恢复(imp)备份数据中的指定表,

imp yuwen/ai123456@10.21.13.14/orcl fromuser=guwei touser=yuwen rows=y indexes=n commit=y buffer=50000000 ignore=n file=exp_table.dmp log=exp_table.log tables=USER_INFO,POLICY_INFO

B:用户方式(U方式)

备份(exp)某个用户模式下的所有对象,

exp jnth/thpassword@oracle owner=guwei rows=y indexes=n compress=n buffer=50000000 file=exp_table.dmp log=exp_table.log

恢复(imp)备份数据的全部内容,

imp yuwen/ai123456@10.21.13.14/orcl fromuser=guwei touser=yuwen rows=y indexes=n commit=y buffer=50000000 ignore=n file=exp_table.dmp log=exp_table.log

恢复(imp)备份数据中的指定表,

imp yuwen/ai123456@10.21.13.14/orcl fromuser=guwei touser=yuwen rows=y indexes=n commit=y buffer=50000000 ignore=n file=exp_table.dmp log=exp_table.log tables=USER_INFO,POLICY_INFO

C:全库方式(Full方式)

备份(exp)完整的数据库,

exp system/systempassword@oracle rows=y indexes=n compress=n buffer=50000000 full=y file=exp_table.dmp log=exp_table.log

导入(imp)完整数据库,

imp system/systempassword@oracle rows=y indexes=n commit=y buffer=50000000 ignore=y full=y file=exp_table.dmp log=exp_table.log

导出导入的优缺点

优点:

  • 简单易行;
  • 可靠性高;
  • 不影响数据库的正常运行。

缺点:

  • 只能提供到"某一时间点上"的恢复,不能最大可能的恢复数据;
  • 数据量大时,恢复较慢。

导出exp参数说明

参数名

说明

默认值

USERID

用户名/口令

FULL

导出整个文件

BUFFER

数据缓冲区的大小

OWNER

导出指定的所有者用户名列表

FILE

输出文件

(EXPDAT.DMP)

TABLES

导出指定的表名列表

COMPRESS

是否压缩导出的文件

RECORDLENGTH

IO 记录的长度

GRANTS

导出权限

INCTYPE

增量导出类型

INDEXES

导出索引

RECORD

跟踪增量导出

ROWS

导出数据行

PARFILE

参数文件名

CONSTRAINTS

导出限制

CONSISTENT

交叉表一致性

LOG

屏幕输出的日志文件

STATISTICS

分析对象(ESTIMATE)

DIRECT

直接路径

TRIGGERS

导出触发器

FEEDBACK

显示每 x 行 (0) 的进度

FILESIZE

各转储文件的最大尺寸

QUERY

选定导出表子集的子句

TRANSPORT_TABLESPACE

导出可传输的表空间元数据

TABLESPACES

导出指定的表空间列表

导入imp参数说明

参数名

说明

默认值

USERID

用户名/口令

FULL

导入整个文件

BUFFER

数据缓冲区大小

FROMUSER

所有人用户名列表

FILE

输入文件

(EXPDAT.DMP)

TOUSER

用户名列表

SHOW

只列出文件内容

TABLES

表名列表

IGNORE

忽略创建错误

RECORDLENGTH

IO记录的长度

GRANTS

导入权限

INCTYPE

增量导入类型

INDEXES

导入索引

COMMIT

提交数组插入

ROWS

导入数据行

PARFILE

参数文件名

LOG

屏幕输出的日志文件

CONSTRAINTS

导入限制

DESTROY

覆盖表空间数据文件

INDEXFILE

将表/索引信息写入指定的文件

SKIP_UNUSABLE_INDEXES

跳过不可用索引的维护

FEEDBACK

每 x 行显示进度

TOID_NOVALIDATE

跳过指定类型 ID 的验证

FILESIZE

每个转储文件的最大大小

STATISTICS

始终导入预计算的统计信息

RESUMABLE

在遇到有关空间的错误时挂起

RESUMABLE_NAME

用来标识可恢复语句的文本字符串

RESUMABLE_TIMEOUT

RESUMABLE 的等待时间

COMPILE

编译过程, 程序包和函数

STREAMS_CONFIGURATION

导入 Streams 的一般元数据

STREAMS_INSTANITATION

导入 Streams 的实例化元数据

TRANSPORT_TABLESPACE

导入可传输的表空间元数据

TABLESPACES

将要传输到数据库的表空间

DATAFILES

将要传输到数据库的数据文件

TTS_OWNERS

拥有可传输表空间集中数据的用户

2.expd/impd

ORCALE10G提供了新的导入导出工具,数据泵。

一、主要特性

1.支持并行处理导入、导出任务2.支持暂停和重启动导入、导出任务3.支持通过Database Link的方式导出或导入远端数据库中的对象4.支持在导入时通过Remap_schema、Remap_datafile、Remap_tablespace几个参数实现导入过程中自动修改对象属主、 数据文件或数据所在表空间。5.导入/导出时提供了非常细粒度的对象控制。通过Include、Exclude两个参数,甚至可以详细制定是否包含或不包含某个对象。

Directory对象

Directory对象是Oracle10g版本提供的一个新功能。他是一个 指向,指向了操作系统中的一个路径。每个Directory都包含 Read,Write两个权限,可以通过Grant命令授权给指定的用户或角色。拥有读写权限的用户就可以读写该Directory对象指定的操作系统路 径下的文件。

除了使用network_link参数意外,expdp生成的文件都是在服务器上(Directory指定的位置)

基本语法

导出

 expdp TEST/123456 schemas=geoff dumpfile=test.dmp directory=exp_imp_data logfile=impdp_20191219.log;

 test/123456:导出用户账号密码test.dmp:导出dmp文件名

exp_imp_data:directory对象目录

geoff:导出给哪个用户

impdp_20191219.log:日志名称

导入

impdp TEST/123456 file=test.dmp directory=exp_imp_data REMAP_SCHEMA=test:geoff logfile=impdp_20191219.log;

test/123456:待导入用户账号密码test.dmp:导入dmp文件名

exp_imp_data:directory对象目录testgeoff :将test用户数据导入到Geoff用户下

impdp_20191219.log:日志名称

二、操作模式

1.全库模式

导入或者导出整个数据库,对应impdp/expdp命令中的full参数,只有拥有dba或者 exp_full_database和imp_full_database权限的用户才能执行。

2.Schema模式

导出或导入Schema下的自有对象,对应impdp/expdp命令中的Schema参数,这是默认的操作模式。 如果拥有dba或者 exp_full_database和imp_full_database权限的用户执行的话,就可以导出或导入多个Schema中的对象。

3.表模式

导出指定的表或者表分区(如果有分区的话)以及依赖该表的对象(如该表的索引,约束等,不过前提是这些对象在同一个 Schema中,或者执行的用户有相应的权限)。对应impdp/expdp命令中的Table参数。

4.表空间模式

导出指定的表空间中的内容。对应impdp/expdp中的Tablespaces参数,这种模式类似于表模式和 Schema模式的补充。

5.传输表空间模式

对应impdp/expdp中的Transport_tablespaces参数。这种模式与前面几种模式最显著的区 别是生成的Dump文件中并不包含具 体的逻辑数据,而只导出相关对象的元数据(即对象的定义,可以理解成表的创建语句),逻辑数据仍然在表空间的数据文件中,导出时需要将元数据和数据文件同 时复制到目标端服务器。
这种导出方式效率很高,时间开销主要是花在复制数据文件产生的I/O上。expdp执行传输表空间模式的导出,用户必须 拥有 exp_full_database角色或者DBA角色。而通过传输表空间模式导入时,用户必须拥有imp_full_database角色或者DBA角 色。

三、过滤数据

过滤数据主要依赖于Query和Sample两个参数。其中Sample参数主要针对expdp导出功能。

1.Query

exp命令中的Query功能类似,不过Expdp中,该参数功能得到了增强,控制的粒度更细。Expdp中的Query也是指定类 似where语句来限定记录。语法如下:
Query = [Schema.][Table_name:] Query_clause
默认 情况如果不指定Schema.table_name,则Query_clause针对所有导出的表有效,或者你可以为每一个表指定不同的 Query_clause,如:导出a表中所有id<5的记录,导出b表中所有name=’a’的记录,则Query的参数应该如下:
Query=A:”Where id<5″,B:”Where name=’a’”
如果Where条件前没有指定Schema名或者表名的话,默认就是针对当前所有要被 导出的表。如:Query=Where id <5
Warning: 建议把Query参数放入到参数文件中使用,以避免转义符带来的麻烦。

2.Sample

该参数用来指定导出数据的百分比,可指定的值的范围从0.000001到99.999999,语法如下:
Sample=[[Schema_name.]Table_name:]sample_percent
定该参数以后,EXPDP导出将自动控制导出的记录量,如导出A表中50%的记录,设置的Sample参数如下:
Sample=A:50
Warning: Sample_percent指定的值只是一个参考值,EXPDP会根据数据量算出一个近似值。

四、重定义表的Schema或表空间

我们还可能会遇到这样的需求,把A用户的对象转移到B用户,或者更换数据的表空间。数据泵通过 Remap_Schema和Remap_tablespace参数实现了该功能。

  1. REMAP_SCHEMA : 重定义对象所属Schema
    该参数的作用类似IMP中的Fromuser+Touser,支持多个Schema的转换,语法如下:
    REMAP_SCHEMA=Source_schema:Target_schema[,Source_schema:Target_schema]
    A的对象转换到C用户,将C转换到D用户。Remap_schema=a:b,c:d
    Warning: 不能在同一个IMPDP命令中指定remap_schema=a:b,a:c.
  2. REMAP_TABLESPACE : 重定义对象所在的表空间。
    该参数用来重映射导入对象存储的表空间,支持同时对多个表空间进行 转换,相互间用逗号分割。语法如下:
    REMAP_TABLESPACE=Source_tablespace:Target_tablespace[,Source_tablespace:Target_tablespace]
    Warning: 如果使用Remap_tablespace参数,则要保证导入的用户对目标表空间有读写权限。

五、优化导入/导出效率

对于大数据量来说,我们不得不考虑效率问题。数据泵对效率也提出了更高的要求。甚至官方的描述就是Oracle Data Pump technology enables Very High-Speed movement of data and metadata from one database to another.这里的Very High-Speed依赖我们的parallel参数。
有的优化操作都会有三种结果:变得更好、没有变化、变得更差。Parallel参数也是这样,并不是指定一个大于1的参数,性能就会有提升。

  1. 对于导出的parallel
    对于导出来说,由于dump文件只能由一个线程进行操作(包 括I/O处理),因此如果输出的DUMP文件只有一个,即使你指定再多的并行,实际工作仍然是 一个,而且还会触发ORA-39095错误。因此,建议设置该参数小于或等于生成的DUMP文件数量。那么,如何控制生成的DUMP文件数量呢?
    EXPDP 命令提供了一个FILESIZE参数,用来指定单个DUMP文件的最大容量,要有效的利用parallel参数,filesize参数必不可少。
    例:某用户对象占用了4G左右的空间,实际导出后的DUMP文件约为3G,我们尝试在导出该用户时指定并行度为4,设置单个文件不超过500M,则语法如 下:
    $ expdp user/pwd directory=dump_file dumpfile=expdp_20100820_%U.dmp logfile=expdp_20100820.log filesize=500M parallel=4
  2. 对于导入的parallel
    对于导入来说,使用parallel参数则要简单的多,我认为导入更能体现parallel参数的优势。 参数设置为几,则认为同时将几张表的内容导入到库中。
    举例:某dmp文件中包含了200张表,我们尝试在导入该DMP文件时指定并行度为10,则 语法如下:
    $ impdp user/pwd directory=dump_file dumpfile=expdp_20100820.dmp logfile=impdp_20100820.log parallel=10

3.区别

? 在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP

1.EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。

2EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。

3IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。

4EXPDP和IMPDP在导出导入的时候需要依赖Directory对象,而IMP和EXP不需要依赖。

5oracle11g中有个新特性,当表无数据时,不分配segment,以节省空间,所以exp导不出空表,解决的办法是用expdp。

数据泵取只能在服务器端运行,客户端只能用来连接服务器启动导入导出操作

exp和expdp原理对比

1exp/imp客户端程序,受网络,磁盘的影响; impdp/expdp服务器端程序,只受磁盘的影响

2、假设文件把文件导出在服务端,exp常规方式是使用SELECT的方式查询数据库中的数据,是需要通过buffer cache并通过sql的语句处理层再转移至exp的导出文件(即要经过sga,pga才传输到客户端,而exp直接路径则是直接从磁盘上将数据转移至exp的导出文件,所