目前数据库有50多个G了。现在D盘只剩几百M了。  日志文件经常在清理,不知道有什么方法能压缩数据的。。大家有什么好的办法?

解决方案 »

  1.   

    SQL Server:收缩 SQL Server Tempdb 大小 
    系统管理员报告说,SQL Server Tempdb 数据库文件占用了大量的磁盘空间。让解决下。 查看 MS-SQL Tempdb 所占空间大小。 
    exec sp_helpdb tempdb 
    发现 Tempdb 数据文件大小有 10G,Tempdb 日志文件大小有 2G。 收缩 MS-SQL Tempdb 大小。 
    收缩 MS-SQL Tempdb 大小,我一般采用 dbcc shrinkfile() 命令。它作用在数据库文件上,可以最大限度的收缩 Tempdb 数据库。 use tempdb 
    go dbcc shrinkfile(tempdev, 1024) 
    想把 Tempdb 数据文件(逻辑文件名为 tempdev)收缩到 1024MB。结果只能缩小到 6556 MB。 use tempdb 
    go dbcc shrinkfile(templog, 512) 
    很顺利就把 Tempdb 日志文件大小(逻辑文件名为 tempdev)缩小到 512M 左右。 如果条件允许的话,你也可以重启 SQL Server,这样 Tempdb 就恢复到创建数据库时的初始大小了。
      

  2.   

    应该可以的
        SQL Server 2000允许收缩数据库的每个文件以除掉未使用的页面,数据文件和事务日志文件都能被收缩。收缩可以成组进行,也可以个别进行。可以指定时间间隔使得数据库在给定的时间自动收缩,这时收缩操作是在后台发生的,不会影响任何数据库用户的活动。当使用了ALTER DATABASE 的AUTO_SHRINK 选项设置数据库的自动收缩(或者是系统存储过程sp_dboption)时,每当数据库中有大量的空闲空间时,数据库就会收缩,然而如果要移除的空闲空间百分比不能被设置的话则空闲空间将会尽可能地被释放。     不能收缩比其最初的规模小的完全的数据库,所以假定一个数据库在创建时的初始大小是10M,然后增长到了100M,如果此时数据库中所有的数据都被删除了,则它能收缩到的最小规模也是10M,不过使用DBCC SHRINKFILE语句可以将单个数据库文件收缩到小于初始规模的大小,如果使用这种方法就必须对每个文件进行操作而不能对整个数据库收缩。     事务日志文件的收缩有固定的界线,虚拟日志的规模决定了可能的减少。因此日志文件决不能收缩到比虚拟日志文件更小的规模,收缩事务日志文件将删除未使用的虚拟日志文件,但会留下至少一个虚拟日志文件。     SQL Server 2000中DBCC SHRINK DATABASE或DBCC SHRINKFILE操作会试图立即将事务日志文件收缩到要求的尺寸(在取整的条件下).应该在收缩文件之前就截取好日志文件已减少逻辑日志文件的大小,并且标记出不含有任何逻辑日志的虚拟日志。
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/michaelwang2007/archive/2008/06/26/2589239.aspx
      

  3.   

    UFC1_Data                                                                                                                        1 D:\Program Files\Microsoft SQL Server\MSSQL\Data\UFC_Data.MDF                                                                                                                                                                                                    PRIMARY 54143808 KB Unlimited 51200 KB data only
    UFC1_Log                                                                                                                         2 D:\Program Files\Microsoft SQL Server\MSSQL\Data\UFC_log.LDF                                                                                                                                                                                                     NULL 768 KB Unlimited 10% log only
      

  4.   

    发现我们的数据库日志满了,下面将解决的办法发出来,希望对大家有所帮助。方法1:
    第一步:
    backup log database_name with no_log
    或者 backup log database_name with truncate_only --no_log和truncate_only是在这里是同义的,随便执行哪一句都可以
    第二步:
    1. 收缩特定数据库的所有数据和日志文件,执行 dbcc shrinkdatabase (database_name,[,target_percent])--database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比
    2.收缩一次一个特定数据库中的数据或日志文件,执行 dbcc shrinkfile(file_id,[,target_size]) --file_id是要收缩的文件的标识 (ID) 号,若要获得文件 ID,请使用 FILE_ID 函数或在当前数据库中搜索 sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc shrinkfile 将文件大小减少到默认文件大小两个dbcc都可以带上参数notruncate或truncateonly,具体意思看帮助。
    方法2
    (这个方法在sqlserver2000的环境下做一般能成功,在sqlserver7及以下版本就不一定了):
    第一步:
    先备份整个数据库以备不测
    第二步:
    备份结束后,在Query Analyzer中执行如下的语句:
    exec sp_detach_db yourDBName,true --卸除这个DB在MSSQL中的注册信息
    第三步:
    到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
    第四步:
    在Query Analyzer中执行如下的语句:
    exec sp_attach_single_file_db yourDBName,'d:\mssql7\data\yourDBName_data.mdf'
    --以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。以上方法在清除log日志中均有效。
    但,能否让sql server 不产生log日志呢?以上方法好像均无效。
    我这儿正好有个case:
    我客户的sql server每天都会产生4,500M的log日志,每天都清除一下,非常不便。有没有办法实现不产生log日志呢?我分析了一下客户产生log日志的原因,并且做了相应测试。
    客户是每天将数据库清空,从总系统中将数据导入到sql server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。
    比如:
    SELECT * into test_2 from b_bgxx
    共45000条记录,产生十几M log,如果
    delete from test_2
    产生80多M log ,这明显存在问题。虽然可以换成:
    truncate table test_2
    但我还是希望能找到不产生log的方法。就如oracle不产生归档一样。
      

  5.   

    服务器: 消息 8985,级别 16,状态 1,行 2
    未能在 sysfiles 中找到文件 'UFCdev'。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。出错了 找不到这个
      

  6.   

    我这里每天备份都要清除掉Log,否则Log的增长N可怕。备份和删除log写在一个存储过程中,每天定时执行。
      

  7.   

    ALTER DATABASE Test1 
    ADD FILE 
    (
     NAME = Test1dat2,
     FILENAME = D:\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
     SIZE = 5MB,
     MAXSIZE = 100MB,
     FILEGROWTH = 5MB
    )
      

  8.   

    如果不是7X24小时使用的话,建议每周定时自动用DBCC重建、修复一下索引,至少每天全备份一次并清除日志。