免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11774 | 回复: 13
打印 上一主题 下一主题

关于ORACLE单表导入导出的问题!高人进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-17 19:31 |只看该作者 |倒序浏览
利用EXP和IMP进行导入导出,如果单表的数据量过大,会占用大量的回滚段。
有没有更简洁的方法,从一张大数据量的表内将数据导出,再导入到另一个数据库的表中。
使用工具的话,目前我手上到是有一个。有其他工具的也可以介绍介绍。

论坛徽章:
0
2 [报告]
发表于 2007-04-17 20:23 |只看该作者
一点小建议:
用imp:

1. 将被导入表设置成nologging
2.先不要在被导入表上建index
3.将每次批量提交地参数设小一点

论坛徽章:
0
3 [报告]
发表于 2007-04-18 16:44 |只看该作者
db1 数据源库 ,db目标库

db1和db网络通的情况下可用这种方法

sqlplus usr/pwd@db
create database link db1 connect to user identified by pwd using db1net;
create table dist_table as select * from src_table@db1;

alter table dist_table primary key(xxx);
...
我导过 60万记录,速度很快。

[ 本帖最后由 stlyy 于 2007-4-18 16:49 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-04-18 20:07 |只看该作者
2楼的,弱弱的问下,怎样设置nologging
imp的时候 貌似没有提交的参数啊!

3楼的是设置数据通道么?有没有详细的发给瞧瞧,
不是很明白你的SQL  为什么要修改主键?

论坛徽章:
0
5 [报告]
发表于 2007-04-18 20:42 |只看该作者
建个DBlink不行吗?直接查了插入。

论坛徽章:
0
6 [报告]
发表于 2007-04-19 08:13 |只看该作者
原帖由 辐射 于 2007-4-18 20:07 发表
2楼的,弱弱的问下,怎样设置nologging
imp的时候 貌似没有提交的参数啊!

3楼的是设置数据通道么?有没有详细的发给瞧瞧,
不是很明白你的SQL  为什么要修改主键?



alter table table_name nologging;

呵呵﹐ 用dblink 插入只是方便了寫﹐如果真是很大table的話﹐于效率沒有什么提升。

论坛徽章:
0
7 [报告]
发表于 2007-04-19 11:27 |只看该作者
原帖由 OCPHUI 于 2007-4-19 08:13 发表



alter table table_name nologging;

呵呵﹐ 用dblink 插入只是方便了寫﹐如果真是很大table的話﹐于效率沒有什么提升。


sql loader 最快
oracle 批插也很快
这种方法也不是很慢,一般还能用。

某人的比较结果:

数据:外部数据文件包含十万条记录,将近 6MB 的文件大小,
机器:CPU Intel P4,内存 256M,数据库 Oracle 9i 企业版。


数据导入方法            总体导入时间(秒)      导入进程占用CPU时间(秒)
逐条数据插入INSERT                      172                           52
逐条数据插入INSERT,表暂无索引   130                           35
批量插入,表暂无索引                14                            7
Create As Select                            15                            8
INSERT Append as SELECT            15                            8
SQL*Loader 缺省导入选项           81                           12
SQL*Loader direct path 导入选项    9                            3


lz:可以再优化一下
create table dist_table nologging as select * from src_table@db1;

这样建的表是没有原来表的一些属性,需要手工改,例如:主键,需要在导入后建立。
这样也好,导入失败的可能性小,导入期间没有约束检查的开销。

再讨论讨论。

[ 本帖最后由 stlyy 于 2007-4-19 11:56 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-04-19 19:25 |只看该作者
我现在要导的表,数据量大概有2千多万条,而且表的容量相当庞大!
所以效率对我来讲相当重要!

另外,同时我现在用的导入导出的工具,很吃本地机器缓存。512M大概只能支持100多万的数据量。
6楼的,我没试过修改nologging  这样做会对单表产生什么影响?如果数据顺利导入后是否要进行再一步修改回原样?请指教。 另外手头没有关于nologgging的资料。正在查找。

论坛徽章:
0
9 [报告]
发表于 2007-04-22 11:05 |只看该作者
导入导出时加参数direct=true,绕过缓存区,直接对数据文件操作,会快些!如果表上有索引的话,alter index  ... unusable, alter session set skip_unusable_indexes=true. 试一下,看看是不是快了?

论坛徽章:
0
10 [报告]
发表于 2007-04-26 19:11 |只看该作者
这种大数据量单表导入导出的使用范围应该非常大才对。可是却找不到详细很有效的内容,
这样的表如果有几个,几种导入的方法都非常耗费时间。有没有人有好的工具!提供下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP