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 ...
随机推荐
- myeclipse中文乱码
解决myeclipse中乱码问题. 改变整个Eclipse工作空间的编码格式 window->preferences->General->workspace中 把text file ...
- java线程(一)
java线程基础 什么是线程? 这里引用百度百科的一句话:"线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当 ...
- hdu4185二分图匹配
Thanks to a certain "green" resources company, there is a new profitable industry of oil s ...
- Spring+SpringMvc+Mybatis 框架的搭建(一)
本文是因为实习结束后学习到了新的技术,想写下来和更多人交流.开发中遇到的问题我也会一一说明,希望有更多人可以互相探讨,加入到一起来. 1. Spring+SpringMvc +Mybatis 的作用有 ...
- 图论算法-Dijkstra
原理 Dijkstra是一个神奇的最短路径算法,它的优点在于它可以稳定的时间内求出一张图从某点到另一点的距离.它的工作原理非常简单,思路类似于广搜.在搜索前,将每个点的颜色设为白色,第一次将源点Ins ...
- 玩一玩nodejs--一个简单的在线实时填表应用
学习nodejs三天,入了个门,感觉他和jsp.php还是存在较大的差别.本文首先复习这些天学的一些知识点,然后谈一下如何一步一步到做一个在线实时填表的小应用,进一步巩固一下这些个知识点.这里先简单介 ...
- 学习笔记:JavaScript-进阶篇
1.二维数组 二维数组的表示: myarray[ ][ ] var myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一维长度为2 ...
- LeetCode:1. Add Two Numbers
题目: LeetCode:1. Add Two Numbers 描述: Given an array of integers, return indices of the two numbers su ...
- 个人对于epollhup的理解
1.原因 由于最近对于异步connect函数的测试,发现提前将一个套接字加入epoll监听队列会不断爆出epollhup事件 2.示例 ........ iEpoll = epoll_create( ...
- .Net程序员学用Oracle系列(26):PLSQL 之类型、变量和结构
1.类型 1.1.属性类型 1.2.记录类型 2.变量 2.1.变量类型 2.2.变量定义 2.3.变量赋值 3.结构 3.1.顺序结构 3.2.选择结构 3.3.循环结构 4.总结 1.类型 在&l ...