优化exp/imp导入导出速度大全
、exp
个相关的参数:DIRECT和RECORDLENGTH参数。
DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。
和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。其用法如下:
如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
一些限制如下:
· 直接路径不能使用在tablespace-mode
· 直接路径不支持query参数。query只能在conventional path模式下使用。
版本的数据库了。这点可以忽略掉了。
· buffer选项只对conventional path exp(传统路径)有效。对于直接路径没有影响。对于直接路径,应该设置RECORDLENGTH参数。
)。这个值对性能提高比较大。
、IMP
Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。
· IMP作了大量的跟普通方式一样的insert
· IMP时候创建索引通常是logging的,产生了大量的undo和redo
提高IMP速度:
、不建议使用commit参数,因为当imp失败的时候,会导致很多后续的麻烦事儿
、增大buffer参数值,以便于一次读进更大的array
Imp 参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:
imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000
、设置较大的初始化参数sort_area_size,以加快创建索引时候的排序速度,大内存启用ASMM/AMM之后感觉没有什么作用。
、使用INDEXES=N选项,导入数据之后再手工创建索引。
前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N只导入数据不创建索引,从而加快导入速度。
我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法
如下:
imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n
imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y
、增加 LARGE_POOL_SIZE
如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。
检查数据库是否在MTS模式下:
SQL>select distinct server from v$session; ----如果返回值出现none或shared,说明启用了MTS。
、增大重作日志的大小
以减少log switch的次数,也就是减少checkpoint次数,减少写磁盘的次数
、如果要往已经存在的表中追加数据
那么有些情况下,比如表中存在位图索引,那么最好先删除索引,再导入。否则更新索引时会产生大量等待
注意:相关的几个参数
、db_writer_processes imp导入时,如果吧上面的几点都做好了,还有一个影响最大的参数需要确认,那就是db_writer_processes,进程的个数,可以根据服务器的CPU酌情增加。速度可以大大提高。
秒。加快系统做检查点
其他需要注意的:
1. 目标数据库设置为非归档模式,当然停掉资料库同使用Nologging更好。
2. 导入的时候可以将索引和约束全部去掉( index , constraint , trigger等, drop或者disable掉所有的index以及相关的pk)
3. 在回滚段够大的情况下,不用加commit=y参数,频繁提交会影响效率;
4. 可以考虑使用DBLINK迁移,同样使用非归档模式,insert /*+ append*/ into select /*+ parallel(t,4)*/ * from t@dblink; ;
5. 迁移的过程中时刻注意各种空间是否够用(包括redolog,archivelog,undo segment,temp tbs);
6. 其他的因素干扰(Job, Trigger, Profile等等)。
.Imp的时候buffer给的大一些。
.imp没有parallel,想要用parallel那么就把原表输出成多个csv然后用sqlldr
9. 可以试试物化视图(Material View),如果是单独表空间的话,也可以考虑transport tablespace 。
.可以考虑使用EXPDP和IMPDP。
11 为 table/index设置Nologging。
12. 同平台的话,按表空间传输,更快 .
13. 用的query子查询导出导入 (exp imp) .
.ignore=y buffer=40960000,一秒至少应该是10w记录。
.先创建表,删除索引信息。表设置并行度。如果可以分区的话。建议并行导入。即写多个脚本。每个脚本导入不同的分区内容。加上commit=y,导入完毕后并行创建索引,创建完毕后取消并行度。
优化exp/imp导入导出速度大全的更多相关文章
- [转帖]优化IMPDP/EXPDP导入导出速度
优化IMPDP/EXPDP导入导出速度 https://www.2cto.com/database/201308/238176.html 一年半没太学习数据库了.. 其实这个parallel 的参数一 ...
- Oracle中exp,imp(导入导出)数据迁移注意事项
这几天做开发库schema备份,出现些问题,记录一下.一,exp时,os语言环境和数据库不同时会自动发生转换. 如果操作系统的字符集小于数据库字符集,就可能出现乱码现象.imp时,同理,也是有可能 ...
- oracle使用exp/imp导入导出(用户)
实例,从远程机器上导出nxgy用户的所有对象和数据,然后导入到本机数据库的nxgy用户里(用户名可自定义) 如果本机nxgy用户已经存在(数据没用,可以删除),级联删除用户所有对象 首先,从远程机器上 ...
- [转]mysqldump备份还原和mysqldump导入导出语句大全详解
FROM : http://www.cnblogs.com/zeroone/archive/2010/05/11/1732834.html mysqldump备份还原和mysqldump导入导出语句大 ...
- exp和imp导入导出时表空间问题【未完】
准备工作 第一步: 创建教师和学生用户 教师用户/密码 TEACHER/t123456 学生用户/密码 STUDENT/s123456 参考链接 http://www.cnblogs.com/what ...
- 加快mysql导入导出速度
MySQL导出的SQL语句在处理百万级数据的时候,可能导入要花几小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSERT语法; --max_all ...
- oracle exp imp 导入 正在跳过表 plsql 导入表 成功终止 数据 被导入
http://blog.csdn.net/agileclipse/article/details/12968011 .导入过程中,所有表导入都出现提示, 正在跳过表...某某表名 最后提示成功终止导入 ...
- Oracle 导入导出--and一些知识,备忘
这两天在做迁移Ora数据库,有一个圆友帮忙,哈哈,两个臭皮匠顶半个诸葛亮. 本来以为很简单的就imp和exp就欧了,结果各种状况百出,百度了老多,学到好多东西. 你的导出:exp yc/yc@orcl ...
- Oracle exp/imp数据导入导出工具基本用法
一.获取帮助 exp/imp help=y 二.数据导出 1.将数据库完全导出,设置full选项exp system/manager@orcl file=d:\db.dmp full=y 2.导出数据 ...
随机推荐
- 详细查看数据库SQL执行计划
DBCC DROPCLEANBUFFERS 清除数据缓存DBCC FREEPROCCACHE 清除执行计划缓存 SET SHOWPLAN_XML ON 此语句导致 SQL Server 不执行 Tr ...
- 64位系统下System32文件系统重定向
前言 因为一次偶然的机会,需要访问系统目录“C:/Windows/System32“文件夹下的内容,使用的测试机器上预装了win7 64系统.在程序运行中竟然发生了该文件路径不存在的问题!!通过查看网 ...
- mysql 连接问题----转载
最近碰到一个mysql5数据库的问题.就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库.问题是待机一晚上后,第二天早上第一次登录总是失败.察看日志发现如下错误: “com. ...
- Java实现Linux下服务器程序的双守护进程
作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 现在的服务器端程序很多都是基于Java开发,针对于Java开发的Socket程序,这样的服务器端上线后出现问 ...
- jQuery判断文本框是否为空
1.引用jQuery库 <script src="/static/js/jquery_v1.6.1.js" type="text/javascript"& ...
- php中判断变量是否为空
从数据库中取出值后判断是否为空,这个看起来很简单,只要和null比较一下就可以了,其实不然, if($obj==null){ } 这样写会报错的:Notice: Trying to get prope ...
- wdcp对default站点开启apache url重写功能
网站开启对default网站的重写功能
- 分页插件jquery.simplePagination.js使用
利用ecshop后台,利用插件更改分页显示样式遇到的问题,由于是利用Ajax获取数据进行页面数据更新?所以出现了以下情况: 初始化页面前 : 分页更新后: 点击后出现了分页插件内容消失, 原因:分页一 ...
- 接受POST表单传过来的信息 可以用foreach循环进行遍历操作
if(isset($_POST['Goods'])){ foreach($_POST['Goods'] as $_k =>$_v){ ...
- Android Fragment基础及使用
同一个app内的界面切换 用Fragment比较合适,因为Activity比较重量级 Fragment 轻量级,切换灵活 --------------------------------------- ...