1、SQL Server 2005 数据库日志文件过大的处理方法
(一)数据库日志文件的用作
SQL Server 使用各数据库的事务日志来恢复事务。
事务日志是数据库中已发生的所有修改和执行每次修改的事务的一连串记录。事务日志记录每个事务的开始。它记录了在每个事务期间,对数据的更改及撤消所做更改(以后如有必要)所需的足够信息。(二)数据库日志文件太大的处理方法
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志: BACKUP LOG 库名 WITH NO_LOG 3.收缩数据库文件企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了也可以用SQL语句来完成
--收缩数据库 DBCC SHRINKDATABASE(库名) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1)4.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"--SQL语句设置方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'5.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
(1)分离数据库: 企业管理器--服务器--数据库--右键--分离数据库 (2)在我的电脑中删除LOG文件 (3)附加数据库: 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 (1)分离 EXEC sp_detach_db @dbname = '库名' (2)删除日志文件 (3)再附加 EXEC sp_attach_single_file_db @dbname = '库名', @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf' 6.如果想以后不让它日志增长得太大 企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)(三)说明:
1.请按步骤进行,未进行前面的步骤,请不要做后面的步骤 ,否则可能损坏你的数据库。
2.一般不建议做第5,6两步
第5步不安全,有可能损坏数据库或丢失数据 。第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复。3.上面的所有“库名”都指你要处理的数据库的库名
转自:
2、SQL 2008清理数据库日志文件
首先,清理数据库日志文件的脚本是这样的。
Use 数据库名
Select NAME,size From sys.database_files
ALTER DATABASE 数据库名 SETRECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE
USE 数据库名
DBCC SHRINKFILE(N’日志文件名’,0,TRUNCATEONLY)
ALTER DATABASE 数据库名 SET RECOVERY FULL WITH NO_WAIT
ALTER DATABASE 数据库名 SETRECOVERY FULL
其次,需要清理的数据库日志文件有多大,可以在SQL Server Management Studio看到:
鼠标右键点击对应的数据库,选择属性,在“文件”这个标签下就能看到日志文件大小。
现在开始清理:
打开SQL ServerManagement Studio。
连接上数据库服务器后,新建查询。新建查询的方式有两种,结果都是一样的。
第一步:新建查询。
1:右击需要进行清理的数据库,选择“新建查询”。
或者,
2:点击“新建查询”,然后在下方选择需要处理的数据库。
第二步:录入查询脚本。
以打开或者手工录入的形式,将脚本文件内容输入进去。
最后是这样一个情况,请注意左上的数据库名。
第三步:开始清理。
接下来将脚本中的“数据库名”更换为需要清理的数据库的名字。因为我的数据库名字中有特殊字符“-”,所以需要用到“[”“]”。如果您的数据库名称第一位是数字,也需要这么处理。
点击执行:
接下来出现了这个:
切换到“结果”:
将这里的数据库Name填写进刚才的脚本中。
再次执行。
完成收工。