有一张表,里面有110万条数据,而每条数据都有64KB,我把这张表的数据导到另一个数据库的相同结构的表中,导了一晚上还没导完,而且数据库从600MB膨胀到244GB,已经把磁盘空间占得所剩无几了。(原始数据库只有170GB)不知道有谁遇到过这种问题,怎么才能安全稳定快速的导过去呢?

解决方案 »

  1.   

    64K 110 万条数据,数据自身就已经有约70G,怎么会只有600M呢?
    再加上你的LOG文件,2百多G太正常了.
      

  2.   

    那么就是正常的了撒。楼主是愁空间不够,就分成几次导入进去,每次清理LOG吧。
      

  3.   

    分批导入吧 大量频繁的insert 操作会使日志文件增长很快。
      

  4.   

      写个脚本定时收缩数据库,在数据量大的表中创建索引,使用SQL SERVER的分区技术优化:
    USE [master]
    GO
    ALTER DATABASE DataBase_Name SET RECOVERY SIMPLE WITH NO_WAIT
    GO
    ALTER DATABASE DataBase_Name SET RECOVERY SIMPLE --简单模式
    GO
    USE DataBase_Name 
    GO
    DBCC SHRINKFILE (N'DataBase_Log' , 11, TRUNCATEONLY)
    GOUSE [master]
    GO
    ALTER DATABASE DataBase_Name SET RECOVERY SIMPLE WITH NO_WAIT
    GO
    ALTER DATABASE DataBase_Name SET RECOVERY SIMPLE --简单模式
    GO
    USE DataBase_Name 
    GO
    DBCC SHRINKFILE (N'INTERFACE_Log' , 11, TRUNCATEONLY)
      

  5.   

    楼主可以将数据分拆成小块(例如按照规则每10W),先Insert到一个临时表中,然后在转移到最终表中,这样做的好处是每次执行的时间不长。
    在这执行的过程中你可以使用7楼的Script缩减一下日志。
      

  6.   

    请教一个问题,假如ldf文件很小,而mdf文件的大小比实际大小多上百倍,请问能把mdf收缩多一点吗,假如实际大小只有2GB,而文件大小有200GB,哪怕收缩到20GB都好点,但我用企业管理器的工具只能收缩几十GB。