《收缩sql server数据库日志文件》由会员分享,可在线阅读,更多相关《收缩sql server数据库日志文件(4页珍藏版)》请在金锄头文库上搜索。
1、ldf 文件过大 如何收缩 SQL Server 数据库日志 Ldf 文件总结:其实也就是两个指令就可以完成了 BACKUP LOG DateBaseName WITH TRUNCATE_ONLY DBCC ShrinkDatabase(DateBaseName) -最好备份日志,以后可通过日志恢复数据,以下为日志处理方法:一般不建议做第 4,6 两步,第 4 步不安全,有可能损坏数据库或丢失数据,第 6 步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复。-下面的所有库名都指你要处理的数据库的库名1清空日志DUMP TRANSACTION 库名 WITH NO_LOG2截断事
2、务日志:BACKUP LOG 库名 WITH NO_LOG3收缩数据库文件(如果不压缩,数据库的文件不会减小)企业管理器-右键你要压缩的数据库- 所有任务-收缩数据库- 收缩文件-选择日志文件 -在收缩方式里选择收缩至 XXM,这里会给出一个允许收缩到的最小 M 数,直接输入这个数,确定就可以了。-选择数据文件 -在收缩方式里选择收缩至 XXM,这里会给出一个允许收缩到的最小 M 数,直接输入这个数,确定就可以了。也可以用 SQL 语句来完成 -收缩数据库DBCC SHRINKDATABASE(库名)-收缩指定数据文件,1 是文件号,可以通过这个语句查询到:select * from sysf
3、ilesDBCC 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 = 库名, phys
4、name = c:Program FilesMicrosoft SQL ServerMSSQLData库名.mdf5为了以后能自动收缩,做如下设置:企业管理器-服务器- 右键数据库 -属性-选项-选择 自动收缩-SQL 语句设置方式:EXEC sp_dboption 库名, autoshrink, TRUE6如果想以后不让它日志增长得太大企业管理器-服务器- 右键数据库 -属性-事务日志 -将文件增长限制为 xM(x 是你允许的最大数据文件大小)-SQL 语句的设置方式:alter database 库名 modify file(name=逻辑文件名,maxsize=20)-首先,用下面的语句
5、 ,检查/修复数据库/并整理索引碎片(需要比较长的时间,请在系统空闲时进行此工作) USE MASTER GO sp_dboption 你的数据库名, single user, true Go DBCC CHECKDB(你的数据库名, REPAIR_REBUILD) Go USE 你的数据库名 go exec sp_msforeachtable DBCC CHECKTABLE(?,REPAIR_REBUILD)exec sp_msforeachtable DBCC DBREINDEX(?) go sp_dboption 你的数据库名, single user, false Go -然后用这个压
6、缩数据库日志文件.SET NOCOUNT ONDECLARE LogicalFileName sysname,MaxMinutes INT,NewSize INT-Select * From SysfilesUSE YSERP - 要操作的数据库名SELECT LogicalFileName = YSERP_Log , - 日志文件名MaxMinutes = 10, - Limit on time allowed to wrap log.NewSize = 20 - 你想设定的日志文件的大小(M)- Setup / initializeDECLARE OriginalSize intSELEC
7、T OriginalSize = sizeFROM sysfilesWHERE name = LogicalFileNameSELECT Original Size of + db_name() + LOG is +CONVERT(VARCHAR(30),OriginalSize) + 8K pages or +CONVERT(VARCHAR(30),(OriginalSize*8/1024) + MB FROM sysfilesWHERE name = LogicalFileNameCREATE TABLE DummyTrans(DummyColumn char (8000) not nul
8、l)DECLARE Counter INT,StartTime DATETIME,TruncLog VARCHAR(255)SELECT StartTime = GETDATE(),TruncLog = BACKUP LOG + db_name() + WITH TRUNCATE_ONLY DBCC SHRINKFILE (LogicalFileName, NewSize)EXEC (TruncLog)- Wrap the log if necessary.WHILE MaxMinutes DATEDIFF (mi, StartTime, GETDATE() - time has not/*expired*/ AND OriginalSize = (SELECT size FROM sysfiles WHERE name =LogicalFileName) AND (OriginalSize * 8 /1024) NewSizeBEGIN - Outer loop.SELECT Counter = 0WHILE (Counter 所有任务-压缩数据库- 压缩文件-文件-压缩到最终大小-输入最小值即可