Sql Server 清除日志的存储过程 Procedure of cleaning sql server's log
生活随笔
收集整理的這篇文章主要介紹了
Sql Server 清除日志的存储过程 Procedure of cleaning sql server's log
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
CREATE?PROCEDURE?[dbo].[strink_logspace]?AS
???SET?NOCOUNT?ON
???DECLARE?@LogicalFileName?sysname,
???????????@MaxMinutes?INT,
???????????@NewSize?INT
???SELECT??@LogicalFileName?=?rtrim(name),
???????????@MaxMinutes?=?10,??????--?最大執行時間
???????????@NewSize????=?10???????--?最小空間
???from?sysfiles?where?status?&?0x40?=?0x40
???--?Setup?/?initialize
???DECLARE?@OriginalSize?int
???SELECT?@OriginalSize?=?size?--?in?8K?pages
?????FROM?sysfiles
?????WHERE?name?=?@LogicalFileName
???SELECT?db_name()?+'日志原始大小'?+??
???????????CONVERT(VARCHAR(30),@OriginalSize)?+?'?pages/?8K?或?'?+?
???????????CONVERT(VARCHAR(30),(@OriginalSize*8/1024))?+?'MB'
?????FROM?sysfiles
?????WHERE?name?=?@LogicalFileName
???CREATE?TABLE?DummyTrans
?????(DummyColumn?char?(8000)?not?null)
???--?Wrap?log?and?truncate?it.
???DECLARE?@Counter???INT,
???????????@StartTime?DATETIME,
???????????@TruncLog??VARCHAR(255)
???SELECT??@StartTime?=?GETDATE(),
???????????@TruncLog?=?'BACKUP?LOG?['+?db_name()?+?']?WITH?TRUNCATE_ONLY'
???--?Try?an?initial?shrink.
???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)??--?the?log?has?not?shrunk????
?????????AND?(@OriginalSize?*?8?/1024)?>?@NewSize??--?The?value?passed?in?for?new?size?is?smaller?than?the?current?size.
?????BEGIN?--?Outer?loop.
???????SELECT?@Counter?=?0
???????WHILE??((@Counter?<?@OriginalSize?/?16)?AND?(@Counter?<?50000))
?????????BEGIN?--?update
???????????INSERT?DummyTrans?VALUES?('Fill?Log')??--?Because?it?is?a?char?field?it?inserts?8000?bytes.
???????????DELETE?DummyTrans
???????????SELECT?@Counter?=?@Counter?+?1
?????????END???--?update
???????EXEC?(@TruncLog)??--?See?if?a?trunc?of?the?log?shrinks?it.
?????END???--?outer?loop
???DBCC?SHRINKFILE?(@LogicalFileName,?@NewSize)
???SELECT?db_name()?+'日志最后大小'?+?
???????????CONVERT(VARCHAR(30),size)?+?'?pages/?8K?或??'?+?
???????????CONVERT(VARCHAR(30),(size*8/1024))?+?'MB'
?????FROM?sysfiles?
?????WHERE?name?=?@LogicalFileName
???DROP?TABLE?DummyTrans
???PRINT?'***?數據庫日志壓縮成功?***'
轉載于:https://www.cnblogs.com/Magicworks/archive/2008/06/05/1214518.html
總結
以上是生活随笔為你收集整理的Sql Server 清除日志的存储过程 Procedure of cleaning sql server's log的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欠薪解决新途径:劳动者可向法院申请支付令
- 下一篇: 替 ASP.NET 的 Table 控件