国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL使用--Shrink所有數據庫的Log

2019-11-03 08:35:41
字體:
來源:轉載
供稿:網友
數據處理是當前數據庫常見的應用。一些數據庫組成DATA mart從數據源里抽取關心的表進行聚合,將結果推送到算法中進行處理,從而高性能的回答用戶的查詢。

總所周知,Log文件是記錄數據庫操作的文件,對數據庫的完整性,一致性有著重要的意義。作為數據處理的一個常見后果是Log文件的超級龐大。雖然將數據庫的恢復模式設置成Simple可以提醒數據庫盡量使用已有的Log空間,而不是申請新的,后者將會導致文件的增長。但是對于活動的事務,如果一個事務中記錄的Log 行數很多,必然會導致Log文件的龐大。有時這種事務是不能避免的,因為至少一個SQL語句就是一個天然的事務。加入你的Update語句涉及到3千萬行數據,結果必然導致眾多的Log行被寫入,當Update結束的時候,log文件就會增加到200G。

問題是當事務結束后,log文件并不會因為事務已經提交而自動縮短。后果就是10幾個數據庫的log 文件都處在自己的最大值上,也許這需要幾個T的空間,但事實上,同一時刻只有一個數據庫在活動,也就是說500G就夠了。

下面的這個SQL可以自動縮短數據庫服務器上所有的Log文件。

declare @ssql nvarchar(4000)
set @ssql= '
        if ''?'' not in (''tempdb'',''master'',''model'',''msdb'') begin
        use [?]
        declare @tsql nvarchar(4000) set @tsql = ''''
        declare @iLogFile int
        declare LogFiles cursor for

        --找出所有的Log文件,Log文件的status是0x40
        select fileid from sysfiles where  status & 0x40 = 0x40
        open LogFiles
        fetch next from LogFiles into @iLogFile
        while @@fetch_status = 0
        begin

          --使用DBCC名字縮短Log文件
          set @tsql = @tsql + ''DBCC SHRINKFILE(''+cast(@iLogFile as varchar(5))+'', 1) ''
          fetch next from LogFiles into @iLogFile
        end

        --DBCC shrink只能釋放標記為無效的Log區段,使用backup log可以完成這個標記
        set @tsql = @tsql + '' BACKUP LOG [?] WITH TRUNCATE_ONLY '' + @tsql
        --PRint @tsql
        exec(@tsql)
        close LogFiles
        DEALLOCATE LogFiles
        end'
--依次遍歷所有的數據庫,用數據庫名字替換@ssql中的?,并執行語句
exec sp_msforeachdb @ssql 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连平县| 陇川县| 漳浦县| 晋宁县| 海门市| 聂荣县| 罗田县| 基隆市| 尖扎县| 增城市| 措勤县| 安顺市| 鄯善县| 南阳市| 西昌市| 教育| 巫山县| 图片| 柳江县| 宁海县| 交城县| 津市市| 曲阳县| 临湘市| 驻马店市| 云林县| 沙坪坝区| 信丰县| 郧西县| 阜南县| 阳谷县| 宁南县| 荥阳市| 长垣县| 长岛县| 包头市| 芮城县| 达州市| 那坡县| 林芝县| 始兴县|