求一个批量导入导出sql server 的方案(100分),有经验者,高人进!

liyong1983 liyong1983 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
本人在做一个系统时遇到一个批量导入导出数据功能。请大家看完下面的内容,再做评论。如果问题,未描述清楚,请指出。
问题:用户在一个数据库中存了数据,各个用户存在数据库中的数据没有任何关系,用户数可能有几百,现要把单个用户的数据导出来,存储起来,用户可以把以前导出的数据重新导入到数据库。导入时,现有市场上使用的机器(最低档配置:cpu:c700 内存:128MB 硬盘:5G空间),需要在1分钟内完成。最低要求不能超过2分钟。
前题条件:
1、要导入导出的数据库里面有200-500个数据表。第个表里面可能有大容量的text(有可能存储超过8000个汉字的数据)和image字段(存图像)。第个数据表都有相同的字段“用户名”,供导入导出时,区分需提取的数据。也就是各个用户都在数据库中存有一份数据,导出时把该用户的数据提取出来。导入时,把导出的用户数据替换要导入用户的数据。
2、导入时可能发生在一个sql server的数据库或局域网内的两台机器的相同数据库之间。
3、要导入数据的规模:所导出来的记录数在1W行-3W行。各个表的记录分布没有规律,存在大容量字段,字段可能是图像或文本(超过8000个字符的文本)。
4、数据库必需是sql server 2000。

要实现的功能(数据导出,数据导入):
1、数据导出:从一个数据库的所有表中,抽取一“用户”的数据导出存储起来,供导入时使用。存储的方式,最好存到sql server中。这样便于客户机从服务器中取数据。也可以采取其它方式。
2、数据导入:把导出时一个用户的数据,替换掉数据库中另一个用户的数据。

3、数据导入的时间须在1分钟之内,机器硬件最低要求要是(cpu:c700 内存:128MB 硬盘:5G空间),操作系统要在win 2000以上的版本,加了这一条,问题就比较麻烦了。
4、不能使用数据库的备份和恢复功能。也就是不能改变生成新的数据库中的数据结构。
5、必须能在开发工具里面调用这两个方功能,最好这两个功能做成存储过程调用。如:.net,delphi中调用。


各位高手,看到这里,有没有好的解决方案,哪位朋友做过这方面的内容,请多指导。谢谢!

本人现在已实现导入导出功能,在配置256内存的机器上面,需要2-3分钟。实在没有办法把速度提高到1分钟。

小弟不才,试过的方法如下:
1、先把一个数据库的数据用存储过程把里面的数据查出来,生成sql 语句,存储到image字段中,导入时先把导入的用户数据删除,再调用字段中的sql 代码,此方法记录总数在2000条时,速度还可以,超过时,不管机器性能如何,速度成正比增加,在有15000行记录时,(cpu:c700 内存:128MB 硬盘:5G空间)配置的机器,导入时需要8-10分钟。双核+1G内存需要2分钟。
2、改进第一种方法,因为第一种方法,实际,sql server 所用时间,全花在编绎1W多行代码上,现把导入的存储过程行数,要执行的sql 语句减少,方案:另建一个相同结
构的数据库(简称备份库,供后面引用),导出时,把数据存到备份库中,导入时,再从备份库取数据用 insert into *** select ***把数据插入进去。
此方法明显比第一种速度快,在双核的机器,1G内存下,只需要几秒钟(除第一次,因第一次如果没设sql的内存以及数据库文件的大小时,需要将近1分钟左右)。但在(cpu:c700 内存:128MB 硬盘:5G空间)配置的机器上,仍需要2-3分钟。

各位高手,看了小弟的方案后,有什么更好的改进意见或方案。如果实在实现困难,局域网内的两台机器的相同数据库之间进行数据导入导出暂不考虑。本人还未用dts,bcp工具进行测试,因为这两种工具都需要生成文本文件,如果数据库中有300多个表,中间就需要生成300多个文本文件,这样,系统处理起来,本人推测,速度应该跟不上。注:机器配置在256内存的机器。而且在导入数据时,本人估计删除以前的数据需要10-15秒。
本人一直用sql server 2000,并未用过2005,不知2005里面有没有提供新的导入功能。





...全文

相关推荐

评论 27
收藏 已收藏
分享
返回顶部
liyong1983
疑难问题 22,298 成员 121,727 内容