none
导入大量数据的问题。 RRS feed

  • 问题

  • 我使用导入导出进行导入数据。通过编写查询来导入数据。

    SELECT pinpai, shopcontent, tiaoxingma, shopname, isbn
    FROM dbo.shop_snsn
    WHERE shopid > 39000 and shopid < 40001

    现在控制每次导入1000条数据,如果不控制传输的数据数量,导入的虚拟主机的数据库肯定就会出错,但是如果控制每次导入数据太少又会造成操作过于频繁,如何循环导入数据呢?

    2011年8月16日 4:07

答案

  • 你好,

    使用SSIS实现分批数据导入,可以创建一个文件夹,将分段的T-SQL语句分别保存到这个文件夹下的一个.txt文件中。然后通过Foreach Loop Container控件遍历这个文件夹的.txt文件,通过Execute SQL Task循环执行每个.txt文件的内容。

    下面的例子也是使用SSIS实现类似的功能,你可以作为参考:
    http://www.windows-tech.info/15/f5ecd3ddb4ca9c3a.php

     


    Best Regards,
    Stephanie Lv

    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.
    2011年8月17日 1:36
  • 又尝试了一下ssis,每次修改一下要导入的数据条件,执行起来也比较简单,导入大量数据用这个还好点。
    2011年8月19日 3:31

全部回复

  • Use SSIS.
    2011年8月16日 9:39
  • 第一次执行导入39000-40000,使用ssis,下次能自动执行41000-42000吗?还是能省多少步骤

    2011年8月16日 10:28
  • What's your data source? Did you set batch size in ssis?
    2011年8月16日 14:22
  • 都是sql数据库,没用过ssis,

    2011年8月16日 23:01
  • 你好,

    使用SSIS实现分批数据导入,可以创建一个文件夹,将分段的T-SQL语句分别保存到这个文件夹下的一个.txt文件中。然后通过Foreach Loop Container控件遍历这个文件夹的.txt文件,通过Execute SQL Task循环执行每个.txt文件的内容。

    下面的例子也是使用SSIS实现类似的功能,你可以作为参考:
    http://www.windows-tech.info/15/f5ecd3ddb4ca9c3a.php

     


    Best Regards,
    Stephanie Lv

    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.
    2011年8月17日 1:36
  • 谢谢楼上的了,我只是一个初级使用者,使用这个对我来说可能会麻烦点,

    我想问一下,如果本地使用asp读取数据保存到虚拟主机数据库,这样是不是能简单点?缺点在哪里?也有一些优点吗?

    2011年8月17日 8:41
  • 以前只是碰到过sqlserver向oracle一次导入数据过多会报错,但是sqlserver到sqlserver导数据的话,一次几十万笔都没问题的。

    另外你说多了之后就报错,是指什么错误?


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2011年8月17日 9:15
  • - 正在复制到 [dbo].[shop_snsn] (错误)
    消息
    错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。
    已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“数据库 'a0715082214' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。”。
     (SQL Server 导入和导出向导)


    log_reuse_wait_desc  值 NOTHING 。

    我想是因为使用的虚拟主机的原因吧?还没到数据库限制的大小。


    2011年8月18日 23:38
  • 看看数据库中选项配置参数,是否有日志最大增长限制? 如果你两个服务器版本一致,你不妨尝试一下,用事务日志进行还原到另外一台服务器上。如果你还有问题,你不妨尝试一下使用SQL Delta 工具呢?


    星光总能为我指引方向
    2011年8月19日 2:24
  • - 正在复制到 [dbo].[shop_snsn] (错误)
    消息
    错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。
    已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“数据库 'a0715082214' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。”。
     (SQL Server 导入和导出向导)


    log_reuse_wait_desc  值 NOTHING 。

    我想是因为使用的虚拟主机的原因吧?还没到数据库限制的大小。



    What's recovery model of target db? Set it to bulk-logged and backup log every 15 minutes.
    2011年8月19日 2:50
  • 网站的虚拟主机已经都设置好了,不允许个人修改。数据库限制大小200M,未到数据库限制。如果一次导入数据比较少,就不会报错。

    刚才尝试传输5000行就可以。

     

    2011年8月19日 3:21
  • 又尝试了一下ssis,每次修改一下要导入的数据条件,执行起来也比较简单,导入大量数据用这个还好点。
    2011年8月19日 3:31
  • Ask dba ther to backup log more frequently.
    2011年8月19日 3:32