相关信息如下:
数据库版本:9.2.0.4
导出数据库:db1
导入数据库:db2
逻辑导出语句如下:
exp user1/password@db1 file=TABLE1.dmp log=TABLE1.log tables=table1 buffer=10485760 constraints=n compress=n statistics=none
imdexes=n triggers=n grants=n
逻辑导入语句如下:
imp user1/password@db1 file=TABLE1.dmp log=TABLE1.log ignore=y full=y constraints=n grants=n buffer=10485760 commit=y
1.回滚段确认:30G,imp导入时加了参数commit=y,控制回滚段无限的加大
2.临时表空间大小确认:62G
3.内存大小确认:127G
4.CPU颗数:32颗
5.有足够的归档空间
6.用户表空间足够大
7.TABLE1段大小为:1.1010E+10 (11G)
8.TABLE1有98258468(1亿)条数据
9.导出后的TABLE1.dmp文件大小为8.1G
我的问题:
1.大概跟踪了一下进度,复制的效率开始时是在100万条记录/小时,按照这个速度需要4.1天的时间才能完全导入,不能够接受的时间长度,有
没有提高性能的方法呢?
2.我是在归档模式下进行的导入,不过设置成非归档是否会快一些?
3.对应的索引没有禁止,这个表上有四个索引,其中一个为主键索引,如果禁掉索引以及约束会不会提高速度?
4.在imp导入过程中,索引表空间会不会增大,这个没有监控出来?
5.imp的原理是什么?是转换成sql的insert语句进行插入么?按照我的设置,是否是每插入10M的数据就会进行提交一次?
6.9.2.0.4版本的imp可以增加并行度么?(如果能请给出方法,目前没有找到相应的参数)
我发现,就是现在,好像数据导入到第3735438条时,停止了,不知道为什么,难道在大小上有什么限制,或者有什么类似死锁的事情发生?
彻底被这个任务击沉了!有朋友有过迁移大表的经验么?请指导,非常感谢。
======================================================
======================================================
问题已经解决,感谢大家的帮助。在去掉索引和约束后,速度惊人!超快的完成了任务,不过在重新创建索引和加约束时很是用时。
结果证明:经验很重要!
经验总结
技术经验总结:
1.根本问题是:没有将目标端的索引和约束全部去掉,估计是在不停的插入过程中一直在扫描索引,具体的原理还得深入研究;
2.在回滚段够大的情况下,可以不用加commit=y参数,频繁的提交会影响效率;
3.在表比较小的情况下可以考虑使用DBLINK迁移;
4.在迁移的过程中时刻注意各种空间是否够用(包括redolog,archivelog,undo segment,temp tablespace);
5.查找是否有其他的因素干扰任务的进展,我的任务中就是因为after类的trigger给我添乱不少;
6.多google,多查询,只有遇到问题,思考问题,解决问题才能迅速的提高。
工作经验总结:
2.还是应该对手中的任务好好研究一下,定一个,考虑周全后在定使用什么方式;
3.多向老DBA取经,不管问题多么简单,大家都有这么一个过程;
4.遇到问题不可盲目的慌张,慢启动才能快完成!
5.认真做好工作完成后的总结工作。
======================================================
======================================================
基本上是简单的INSERT,其实只要网络环境和机器配置好的话,这个不成问题
insert /*+ append*/ into select /*+ parallel(t,4)*/ * from t@dblink;