一、获取帮助

exp/imp help=y

二、数据导出

1.将数据库完全导出,设置full选项
exp system/manager@orcl file=d:\db.dmp full=y

2、导出数据库结构,不导出数据,设置rows选项
exp system/manager@orcl file=d:\db.dmp rows=n full=y

3、当导出数据量较大时,可以分成多个文件导出,设置filesize选项
exp system/manager@orcl file=d:\db1.dmp,d:\db2.dmp filesize=50M full=y

4.将数据库中system用户与sys用户的表导出,设置owner选项
exp system/manager@orcl file=d:\Test_bak.dmp owner=(system,sys)

5.将数据库中的表t_result,t_khtime导出,设置tables选项
exp system/manager@orcl file= d:\Test_bak.dmp tables=(t_result,t_khtime)

6、将数据库中的表T_SCORE_RESULT中updatedate日期字段大于某个值的数据导出,设置query选项
exp kpuser/kpuser@orcl file=d:\Test_bak.dmp tables=(T_SCORE_RESULT) query=\" where updatedate>to_date('2016-9-1 18:32:00','yyyy-mm-dd hh24:mi:ss')\"

三、数据导入

1、导入dmp文件,如果表已经存在,会报错且不导入已经存在的表,设置ignore选项
imp system/manager@orcl file=d:\Test_bak.dmp ignore=y

2、导入dmp文件中部分指定的表,设置tables选项
imp kpuser/kpuser@orclfile=d:\kpuser.dmp tables=(T_SCORE_RESULT)

3、导入一个或一组指定用户所属的全部表、索引和其他对象,设置fromuser选项
imp system/manager@orcl file=d:\kpuser.dmp fromuser=kpuser //kpuser必须存在
imp system/manager@orcl file=d:\users.dmp fromuser=(kpuser,kpuser1,test) //kpuser,kpuser1,test用户必须存在

4、将数据导入指定的一个或多个用户,设置fromuser和touser选项
imp system/manager file=d:\kpuser.dmp fromuser=kpuser touser=kpuser1 //kpuser1必须存在
imp system/manager file=d:\users.dmp fromuser=(kpuser,kpuser1) touser=(kpuser2, kpuser3) //kpuser2、kpuser3必须存在

四、exp/imp优化

当需要导入/导出的数据量比较大时,这个过程需要的时间是比较长的,我们可以用一些方法来优化exp/imp的操作。
1、exp
1)使用直接路径 direct=y,oracle会避开sql语句处理引擎,直接从数据库文件中读取数据,然后写入导出文件
2)如果没有使用直接路径,必须保证buffer参数的值足够大.

2、imp
1)避免磁盘排序
将sort_area_size设置为一个较大的值,比如100M
2)避免日志切换等待
增加重做日志组的数量,增大日志文件大小.
3)优化日志缓冲区
比如将log_buffer容量扩大10倍(最大不要超过5M)
4)使用阵列插入与提交
commit = y
注意:阵列方式不能处理包含LOB和LONG类型的表,对于这样的table,如果使用commit = y,每插入一行,就会执行一次提交.
5)使用NOLOGGING方式减小重做日志大小
在导入时指定选项indexes=n,只导入数据而忽略index,在导完数据后在通过脚本创建index,指定 NOLOGGING选项

五、注意

1、源用户(fromuser)是dmp文件中表所属的用户,不是指当前数据库中的用户;目标用户(touser)是指数据要导入的用户,在当前数据库中必须不存在,如果不存在,需要先创建该用户;如果只指定了fromuser,未指定touser,则默认导入数据库中和fromuser同名的用户下,即fromuser指定的用户必须在数据库中存在。

2、如果导入整个dmp文件,即full=y,则最好把数据库中dmp中对应的表都删除再导入

3、ignore选项
Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据ignore选项的设置来决定如何操作。
1)若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据插入到表中,如果插入的记录违背了约束条件,比如主键约束,则出错的记录不会插入,但合法的记录会添加到表中。
2)若ignore=n,Oracle不执行CREATE TABLE语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。

4、indexes选项
在恢复数据的过程中,若indexes=n,则表上的索引不会被恢复,但是主键对应的唯一索引将无条件恢复,这是为了保证数据的完整性。

5、导出/导入与字符集
进行数据的导入导出时,要注意关于字符集的问题。对于单字节字符集(例如US7ASCII),恢复时,数据库自动转换为该会话的字符集(NLS_LANG参数); 对于多字节字符集(例如ZHS16CGB231280),恢复时,应尽量使字符集相同(避免转换),如果要转换,目标数据库的字符集应是输出数据库字符集的超集。
在EXP/IMP过程中需要注意四个字符集的参数:导出端的客户端字符集、导出端数据库字符集、导入端的客户端字符集、导入端数据库字符集。通常在导出时最好把客户端字符集设置得和数据库端相同。当进行数据导入时,主要有以下两种情况:
1)源数据库和目标数据库具有相同的字符集设置
这时,只需设置导出和导入端的客户端NLS_LANG等于数据库字符集即可。
2)源数据库和目标数据库字符集不同
先将导出端客户端的NLS_LANG设置成和导出端的数据库字符集一致,导出数据,然后将导入端客户端的NLS_LANG设置成和导出端一致,导入数据,这样转换只发生在数据库端,而且只发生一次。
如果imp和exp字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息,导入完成后再改回来.

6、数据库对象有主外键约束
不符合主外键约束时, 数据会导入失败, 解决办法:
1)先导入主表(父表), 再导入从表(子表)
2)disable目标导入对象的主外键约束, 导入数据后, 再enable它们

7、可以跨版本的使用EXP/IMP,但必须正确地使用EXP和IMP的版本
1)总是使用IMP的版本匹配数据库的版本,如:要导入到817中,使用817的IMP工具。
2)总是使用EXP的版本匹配两个数据库中最低的版本,如:从9201往817中导入,则使用817版本的EXP工具。

8、导出和导入权限
需要有EXP_FULL_DATABASE 和 IMP_FULL_DATABASE角色权限。

9、导入大表( 大于80M ) 时, 存储分配失败
默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.
导入时, 如果不存在连续一个大数据块, 则会导入失败. 导出80M以上的大表时, 记得compress= N, 则不会引起这种错误。

Oracle exp/imp数据导入导出工具基本用法的更多相关文章

  1. pt-archiver(数据导入导出工具)

    数据导入导出工具pt-archiver 工具可以将MySQL的表数据导出到一个新表或者一个文件,也有自己的应用场景,比如数据归档,删除数据,数据合并等. 具体用法: pt-archiver [OPTI ...

  2. HData——ETL 数据导入/导出工具

    HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC.Hive.HDFS.HBase.MongoDB.FTP.Http.CSV.Excel.Kafka等)之间数据 ...

  3. MySQL多线程数据导入导出工具Mydumper

    http://afei2.sinaapp.com/?p=456 今天在线上使用mysqldump将数据表从一个库导入到另外一个库,结果速度特别慢,印象中有个多线程的数据导入导出工具Mydumper,于 ...

  4. PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)(转)

    一.摘要 在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间.oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间, ...

  5. HBase数据导入导出工具

    hbase中自带一些数据导入.导出工具 1. ImportTsv直接导入 1.1 hbase中建表 create 'testtable4','cf1','cf2' 1.2 准备数据文件data.txt ...

  6. exp/imp 多用户导入导出

    创建用户 创建三个用户test1,test2,test3及表table1,table2,table3 SQL> create user test1 identified by test1 def ...

  7. Oracle数据库的数据导入导出

    --备份数据库--数据库系统用户账号system/adminuser --查看oracle数据库的用户select * from all_users;--查看oracle数据库的版本号select * ...

  8. oracle触发器与数据导入导出的简单使用

    exp cjtxx/123456@192.168.80.231/orcl file=d:\cjtxx.dmp owner=cjtxx [tables=tablename] imp cjttest/12 ...

  9. oracle数据库数据导入导出步骤(入门)

    oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp ...

随机推荐

  1. 漏洞预警 | Apache Struts2 曝任意代码执行漏洞 (S2-045)

    近日,Apache官方发布Apache Struts 2.3.5–2.3.31版本及2.5–2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152 ,CVE-2017-5638)的紧急 ...

  2. .net之简单工厂模式

    //抽象一个生产笔的方法 namespace simpleFactory{ public abstract class AbstractPen { public abstract void creat ...

  3. 点击滚动图片JS部分代码以及css设置注意事项

    下面js代码可以实现8张图片点击左右按钮后切换的过渡动画效果 var pslul11=document.getElementById('pslul11')var pslspan1=document.g ...

  4. [luoguP2912] [USACO08OCT]牧场散步Pasture Walking(lca)

    传送门 水题. 直接倍增求lca. x到y的距离为dis[x] + dis[y] - 2 * dis[lca(x, y)] ——代码 #include <cstdio> #include ...

  5. kafka java使用

    首先添加maven依赖 Kafka <dependency> <groupId>org.apache.kafka</groupId> <artifactId& ...

  6. 微信小程序之获取当前位置经纬度以及地图显示

    最近刚开始接触微信小程序,在弄懂其结构以及相关接口之后,准备着手实现一个小程序,功能包括--获取用户当前位置的经纬度,在地图上查看位置,通过地图获取不同位置的经纬度. 微信小程序的主体部分包括: 新增 ...

  7. mysql sql语句

    1.数据库和表的操作 创建 create修改 alter删除 drop查看 show 1.1创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name    [crea ...

  8. ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小

    在使用Oralce时,直接取出 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换时,会出现ORA-22835的异常,以下是个人的解决方案 create or replace Function ...

  9. 关于php调用.net的web service 踩过的坑

    从前一阵开始,公司要和对方做web service对接.由于对方使用.net语言,而我方使用php.本来经理是要求我们也用.net写web service的服务端.而我上学时学的.net全忘了... ...

  10. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); $.fn = { ready: function(callback){ // don ...