Oracle exp/imp数据导入导出工具基本用法
一、获取帮助
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数据导入导出工具基本用法的更多相关文章
- pt-archiver(数据导入导出工具)
数据导入导出工具pt-archiver 工具可以将MySQL的表数据导出到一个新表或者一个文件,也有自己的应用场景,比如数据归档,删除数据,数据合并等. 具体用法: pt-archiver [OPTI ...
- HData——ETL 数据导入/导出工具
HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC.Hive.HDFS.HBase.MongoDB.FTP.Http.CSV.Excel.Kafka等)之间数据 ...
- MySQL多线程数据导入导出工具Mydumper
http://afei2.sinaapp.com/?p=456 今天在线上使用mysqldump将数据表从一个库导入到另外一个库,结果速度特别慢,印象中有个多线程的数据导入导出工具Mydumper,于 ...
- PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)(转)
一.摘要 在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间.oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间, ...
- HBase数据导入导出工具
hbase中自带一些数据导入.导出工具 1. ImportTsv直接导入 1.1 hbase中建表 create 'testtable4','cf1','cf2' 1.2 准备数据文件data.txt ...
- exp/imp 多用户导入导出
创建用户 创建三个用户test1,test2,test3及表table1,table2,table3 SQL> create user test1 identified by test1 def ...
- Oracle数据库的数据导入导出
--备份数据库--数据库系统用户账号system/adminuser --查看oracle数据库的用户select * from all_users;--查看oracle数据库的版本号select * ...
- oracle触发器与数据导入导出的简单使用
exp cjtxx/123456@192.168.80.231/orcl file=d:\cjtxx.dmp owner=cjtxx [tables=tablename] imp cjttest/12 ...
- oracle数据库数据导入导出步骤(入门)
oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp ...
随机推荐
- [进程管理]Load和CPU利用率是如何算出来的
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.penglixun.com/tech/system/how_to_ca ...
- 分布式锁与实现(二)——基于ZooKeeper实现
引言 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...
- centos系统修改网络配置注意事项
这也是无意之中发现的,我在做一个远程修改工控机网络配置的程序, 网络配置参数/etc/sysconfig/network-scripts/ifcfg-enp1s0下面,当然名字可能不一样ifcfg-e ...
- 写具有良好风格的ABAP代码
编程风格是一个经久不衰的话题,大家所公认的事实是:一个良好的编程风格会带来很多的好处.而对于“良好”的标准,则众说纷纭,莫衷一是.编程风格在ABAP程序中当然也有着重要的意义,因为很少看到专门针对AB ...
- 用VsCode编辑TypeScript
文地址:https://code.visualstudio.com/Docs/languages/typescript TypeScript是Javascript的超集,它提供了类.模块.接口来帮助你 ...
- js-获取两个字符串日期的相隔周
例如说"2017-04-01 23:00:00"是周六, "2017-04-28 23:00:00"是周五,包含各自所在的那一周,我真正需要获得的结果是5个周. ...
- hdu4614 Vases and Flowers 线段树+二分
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题意: 给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. ...
- ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
前言 最近公司项目进行架构调整,由原来的三层架构改进升级到微服务架构(准确的说是服务化,还没完全做到微的程度,颗粒度没那么细),遵循RESTFull规范,使前后端完全分离,实现大前端思想.由于是初次尝 ...
- Hive load from hdfs 出错
hive 加载HDFS的数据时出现错误, FATAL:SemanticException [Error 10028] search了一下,跟他一样Hive load from hdfs 出错. 我按照 ...
- Tomcat Server处理一个http请求过程
假设来自客户端的请求为: http://localhost:8080/lizhx/lizhx_index.jsp 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Conne ...