SQL SERVER数据库的日志文件太大太烦!!! 总共才30MB的文本文件,导入数据库膨胀到100MB,这还不说,日志居然200MB!晕死!我的程序根本不要考虑恢复的,这个日志能否限制大小不增长。我已经设定简单模式恢复。

解决方案 »

  1.   

    1,在查询分析器中执行:dump transaction 数据库名 with no_log
    2,在企业管理器中“收缩数据库”
      

  2.   

    backup log 数据库名 with no_log
    go
    dbcc shrinkdatabase(数据库名,50)
    go
    dbcc shrinkfile(日志文件逻辑名,10)
      

  3.   

    tempdb右键-》属性-》files-》选择文件-》自动增长-》限制文件大小-》改为100M试试呢
    tempdb大小最好不要随便限制,否则可能导致SQL执行失败。
      

  4.   

    谢谢楼上的XD们,我是在程序里面操作控制数据库的。因为要经常的操作这个数据。虽然一次dump transaction DB with NO_LOG,但是还是会慢慢的出现log啊。如何限定一个固定大小比如就10MB,自动循环使用?我设定了固定大小,不增长,结果导入数据不能导入了。  :( :( :(
      

  5.   

    如何通过SQL语句收缩数据库?1,在查询分析器中执行:dump transaction 数据库名 with no_log  
    2,在企业管理器中“收缩数据库” 我想把这2步都通过SQL语句执行。
      

  6.   

    不知楼主使用何种方式导入数据?建议:
    1.DOS命令行,使用bcp 加参数 -b10000
    2.SQL 语句,使用查询分析器的Bulk Insert 带参数 BatchSize=10000
    3.使用企业管理器-数据转换服务-本地包-新建(选择相应的源,目的)-转换数据任务属性-选中"总是提交最后的批处理"-插入批处理大小:10000
      

  7.   

    多谢楼上的xd建议。我是使用的SQL SERVER 2005 EXPRESS数据库,使用应用软件操作数据库ADO方式,通过使用OpenRowSet()函数进行数据的入库操作。其实,就是一堆CSV文本文件,我循环使用OpenRowSet或者OpenDataSource,目前我使用OpenRowSet导入。Bulk Insert也尝试过,和OpenRowSet效率差不多。此外对于此类 "1","2","3"....,"N"数据,如果使用Bulk Insert,则会连双引号"一起导入数据库,OpenRowSet/OpenDataSource则不会。请指教。
      

  8.   

    SQL SERVER数据库的日志文件太大太烦!!! 总共才30MB的文本文件,导入数据库膨胀到100MB,这还不说,日志居然200MB!晕死!我的程序根本不要考虑恢复的,这个日志能否限制大小不增长。
    --
    解决办法有三个:
    1 建立数据库的时候将日志文件设置成不增长的(也就是自动增长关闭)
    2 一定时间内进行数据库收缩
    3 将数据库进行分离,删除日志文件,在将数据文件附加但我的想法还是应该有日志文件的
      

  9.   

    SQL SERVER数据库的日志文件太大太烦!!! 总共才30MB的文本文件,导入数据库膨胀到100MB,这还不说,日志居然200MB!晕死!我的程序根本不要考虑恢复的,这个日志能否限制大小不增长。
    --
    解决办法有三个:
    1 建立数据库的时候将日志文件设置成不增长的(也就是自动增长关闭)
    2 一定时间内进行数据库收缩
    3 将数据库进行分离,删除日志文件,在将数据文件附加但我的想法还是应该有日志文件的
      

  10.   

    就数据导入而言,Bulk Insert 的导入效率是最高的,附来自SQL Server 联机丛书的示例:
    本例从指定的数据文件中导入订单详细信息,该文件使用竖杠 (|) 字符作为字段终止符,使用 |\n 作为行终止符。BULK INSERT Northwind.dbo.[Order Details]
       FROM 'f:\orders\lineitem.tbl'
       WITH 
          (
             FIELDTERMINATOR = '|', --行分隔符
             ROWTERMINATOR = '|\n'  --列分隔符
          )本例指定 FIRE_TRIGGERS 参数。BULK INSERT Northwind.dbo.[Order Details]
       FROM 'f:\orders\lineitem.tbl'
       WITH
         (
            FIELDTERMINATOR = '|', --行分隔符
            ROWTERMINATOR = ':\n', --列分隔符
            TabLock                --表级锁定,这是提高数据导入效率的关键参数  
          )另外,应避免在表上建有任何形式的索引,触发器等.
    至于楼主所述将"也装载之数据库,可使用FormatFile格式化文件进行更精确的处理.
    详见 SQL Server 联机丛书.
      

  11.   

    如果你的硬盘不是很欠缺,就不要限制tempdb的大小,不然导致一些操作不能执行不是很麻烦么?
      

  12.   

    我已经设置数据库恢复模式为简单,可是发现log还是很大. 后来我就干脆使用应用程序每次关闭时,进行数据的收缩操作.发现如果设定log为不增长,当日志满时会导致数据库停止操作! 这是个很大的问题.
      

  13.   

    试试设置几个LOG文件(一般可为三个),每个不要太大,各限制其最大文件大小.
      

  14.   

     压缩日志及数据库文件大小(ms SQL SERVER)      
    /*--特别注意请按步骤进行,未进行前面的步骤,请不要做后面的步骤
    否则可能损坏你的数据库.
    一般不建议做第4,6两步
    第4步不安全,有可能损坏数据库或丢失数据
    第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
    --*/--下面的所有库名都指你要处理的数据库的库名1.清空日志
    DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志:
    BACKUP LOG 库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小
    企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
    --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
    --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了也可以用SQL语句来完成
    --收缩数据库
    DBCC SHRINKDATABASE(库名)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
    DBCC SHRINKFILE(1)4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
    a.分离数据库:
    企业管理器--服务器--数据库--右键--分离数据库b.在我的电脑中删除LOG文件c.附加数据库:
    企业管理器--服务器--数据库--右键--附加数据库此法将生成新的LOG,大小只有500多K或用代码: 
    下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。a.分离
    EXEC sp_detach_db @dbname = '库名'b.删除日志文件c.再附加
    EXEC sp_attach_single_file_db @dbname = '库名', 
    @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'5.为了以后能自动收缩,做如下设置:
    企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"--SQL语句设置方式:
    EXEC sp_dboption '库名', 'autoshrink', 'TRUE'6.如果想以后不让它日志增长得太大
    企业管理器--服务器--右键数据库--属性--事务日志
    --将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:
    alter database 库名 modify file(name=逻辑文件名,maxsize=20)  一般来说只做前三步!!!!