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 ...
随机推荐
- php函数每日学习二十个
数学函数 1,abs() 求绝对值 2,ceil() 进一法取整 3,floor() 舍去法取整 4,fmod()对浮点数进行取余 例如fmod(5.7,1.3) 5,pow() 返回数的n次方 po ...
- OC 动态类型和静态类型
多态 允许不同的类定义相同的方法 动态类型 程序直到执行时才能确定所属的类 静态类型 将一个变量定义为特定类的对象时,使用的是静态形态 将一个变量定义为特定类的对象时,使用的是静态类型,在编译的时候就 ...
- C#文件下载(适用于各个浏览器)
1.cs代码 public void DownFile(string filePath ,string fileName ) { // filePath 文件路径 例如:/File/记录.xlsx / ...
- Spring3.0配置多个事务管理器(即操作多个数据源)的方法
大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义 ...
- Java中线程的实现:
Java中线程的实现: 一.线程简介: 实现的两种方式为: 1.Thread类 2.Runnable接口 都在java.lang中 都有共通的方法:public void run() 二.线程常用方法 ...
- 自己编写jQuery动态引入js文件插件 (jquery.import.dynamic.script)
这个插件主要是结合jquery或者xhr异步请求来使用的,它可以把已经引入过的js文件记录在浏览器内存中,当下次再引入相同的文件就忽略该文件的引入. 此插件不支持浏览器刷新保存数据,那需要利用cook ...
- 多人合作开发启动activity-----规范问题
A----FirstActivity button1.setOnClickListener(new OnClickListener() { @Override public void ...
- vim 编辑中执行正则表达式
1.进入vim 编辑模式 2.输入:set magic 3.输入/,然后再次输入正则表达式
- http协议中:GET/POST/PUT/DELETE/TRACE/OPTIONS/HEAD方法
###1 HTTP/1.1协议中共定义了八种方法(有时也叫"动作")来表明Request-URI指定的资源的不同操作方式: OPTIONS 返回服务器针对特定资源所支持的HTTP请 ...
- Android相机是如何获取到图像的
在研究zxing的过程中,脑袋中一直有个疑惑,那个相机并没有拍照,它是怎么获取图像的 带着这个疑惑查看Camera源码 Camera源码中有这样一个接口: public interface Previ ...