日志文件满而造成SQL数据库无法写入文件时,可用以下方法
方法1

启用SqlServer客户端工具“Sql查询分析器”,选择"Sql Server身份认证",输入服务器地址、数据库登录名及密码,最后在命令框内输入:
 
DECLARE @LogicalFileName sysname,
@NewSize INT

USE dbname  -- 要操作的数据库名
select  @LogicalFileName = 'dbname_log', -- 日志文件名
@NewSize = 1  -- 你想设定的日志文件的大小(M)
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
 
注:根据提示修改您所连接的数据库名与日志文件名后,按F5键执行就可以了

方法2

打开查询分析器,输入命令
DUMP TRANSACTION 数据库名 WITH NO_LOG

方法3

打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。也可以用SQL语句来完成
  --收缩数据库
  DBCC SHRINKDATABASE(客户资料)
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
  DBCC SHRINKFILE(1)


方法4

该方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。
1: 删除LOG
分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K

SQL方法:
    a.分离
     E X E C sp_detach_db @dbname = 'pubs'
  b.删除日志文件
  c.再附加
     E X E C sp_attach_single_file_db @dbname = 'pubs',
    @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
      为了以后能自动收缩,做如下设置:
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
  --SQL语句设置方式:
  E X E C sp_dboption '数据库名', 'autoshrink', 'TRUE'
方法5
截断事务日志,BACKUP LOG 数据库名 WITH NO_LOG

注意:如果以后,不想要它变大。
SQL2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用SQL语句:alter database 数据库名 set recovery simple
SQL 2000中即故障恢复模型选择为简单模型,在开发数据库时常设置选项为True Auto shrink(自动收缩),定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25% ,当文件大小没有超过其建立时的初始大小时不会缩减文件,缩减后的文件也必须大于或等于其初始大小。