Sql Server ShrinkFile Error 解決方案

來源:互聯網
上載者:User

標籤:end   error   大小   software   because   stat   logic   log   實現   

Message
Executed as user: CN\HKSQLPWV625sqlagent. Cannot shrink log file 2 (DIX_Log) because the logical log file located at the end of the file is in use. [SQLSTATE 01000] (Message 9008)  DBCC execution completed. If DBCC printed error messages, contact your system administrator. [SQLSTATE 01000] (Message 2528)  DBCC execution completed. If DBCC printed error messages, contact your system administrator. [SQLSTATE 01000] (Message 2528)  Cannot shrink log file 2 (LTD_Log) because the logical log file located at the end of the file is in use. [SQLSTATE 01000] (Message 9008)  DBCC execution completed. If DBCC printed error messages, contact your system administrator. [SQLSTATE 01000] (Message 2528)  Backup, file manipulation operations (such as ALTER DATABASE ADD FILE) and encryption changes on a database must be serialized. Reissue the statement after the current backup or file manipulation operation is completed. [SQLSTATE 42000] (Error 3023).  The step failed.

 

use DIX

dbcc loginfo

--建立表用於儲存loginfo資訊

create table DoxLoginfo
(
ID int identity,
RecoveryUnitId int null,
fileld int null,
filesize int null,
StartOffset int null,
Status int null,
Parity int null,
CreateLSN int null,
CreateDate datetime default getdate()
)

insert into DixLoginfo(RecoveryUnitId,fileld,filesize,StartOffset,FSeqNo,Status,Parity,CreateLSN)

EXEC (‘DBCC loginfo‘)

--查詢虛擬日誌最後一條狀態 並判斷為0時進行收縮

declare @status int select @status = Status from DixLoginfo where id = (select MAX(id) from DixLoginfo)   

if (@status =0)      

begin        

DBCC SHRINKFILE(DIX_log,TRUNCATEONLY)     

--刪除7天以外的loginfo        

DELETE FROM DixLoginfo where datediff(day,createdate,getdate())>7      

end 

GO

 

--以下轉自互連網 作者不祥

每一個資料庫至少有一個記錄檔,無論為交易記錄定義多個少物理檔案,SQL Server均視為一個連續的檔案。該交易記錄檔實際上由一系列的虛擬記錄檔VLF來管理。虛擬記錄檔的大小由SQL Server的總記錄檔的大小決定。虛擬記錄檔的物理結構圖如下所示:

當該記錄檔收縮時,記錄檔末端的未使用的VLF可以被刪除。

在SQL server2000中,記錄檔僅可以從記錄檔的尾部收縮,但是微軟已經糾正先前在SQL server 7.0中的問題,當你備份或截斷日誌時,SQL Server會自動將日誌的活動部分轉移到檔案的始端,然後你運行DBCC SHRINKFILE或DBCC SHRINKDATABASE命令來釋放未使用的空間。

如果要判斷記錄檔中有多少個虛擬記錄檔,並且哪些虛擬記錄檔是活動的,可以使用未歸檔命令DBCC命令:DBCC LOGINFO,其文法如下:

DBCC LOGINFO [ ( dbname ) ]

下面我們來通過一個樣本來介紹DBCC LOGINFO的用法,同時查看日誌收縮與截斷的工作原理與實現機制。

首先,建立一個測試資料庫,指令碼如下:

USE MASTER;

Go

CREATE DATABASE logtest

GO

ALTER DATABASE logtest SET recovery FULL

GO

USE logtest;

GO

DBCC loginfo; GO

可以知道,活動的虛擬記錄檔的狀態(status)為2,logtest資料庫有兩個虛擬記錄檔,當前僅有一個虛擬記錄檔是活動的,現在建立一個表,然後填充一些行,以產生一些日誌再查看日誌的變化情況。

SELECT TOP 10000 * INTO bigOrderHeader

FROM AdventureWorks.Sales.SalesOrderHeader

GO

DBCC loginfo GO

此時你將看到記錄檔中有12個虛擬記錄檔,並且它們都是活動的(狀態都為2),現在,收縮日誌然後再查看有什麼變化?

DBCC SHRINKFILE (logtest_log) DBCC LOGINFO GO

由於未對資料庫進行備份,仍沒有活動事務,SQL Server將認為你不需要保留日誌的不活動部分,就將其刪除。現在對資料庫進行備份。

BACKUP DATABASE logtest

TO DISK = ‘f:\logtest.bak‘ GO 已為資料庫‘logtest‘,檔案‘logtest‘ (位於檔案1 上)處理了440 頁。

已為資料庫‘logtest‘,檔案‘logtest_log‘ (位於檔案1 上)處理了2 頁。

BACKUP DATABASE 成功處理了442 頁,花費0.851 秒(4.246 MB/秒)。

現在再運行一些日誌記錄,重新檢查日誌的變化情況:

SET ROWCOUNT 1000

GO

BEGIN TRAN

DELETE bigOrderHeader

ROLLBACK TRAN

GO

SET ROWCOUNT 0

GO

DBCC loginfo

GO

從注意到,現在有3個標記為2的活動事務,然後收縮該日誌:

DBCC shrinkfile ( logtest_log)

GO

無法收縮記錄檔2 (logtest_log),因為所有的邏輯記錄檔都在使用中。

(1 行受影響)

DBCC 執行完畢。如果DBCC 輸出了錯誤資訊,請與系統管理員聯絡。

從輸出資訊知道,該檔案的上一個虛擬記錄檔仍舊是活動的,因此發生了失敗,SQL Server不能從檔案的末端進行收縮,接著我們執行另一個事務,讓日誌繼續增長:

SET ROWCOUNT 5000 GO BEGIN TRAN DELETE bigOrderHeader ROLLBACK TRAN GO SET ROWCOUNT 0 GO DBCC loginfo GO

此時的日誌也不能進行收縮,原因在於標記的虛擬日誌用於還原作業,只有該日誌做了備份或截斷,其空間才可以被釋放。

BACKUP LOG logtest WITH TRUNCATE_only

DBCC loginfo

GO

現在作了標記的虛擬日誌將不再需要(日誌記錄要麼是截斷的要麼是已經備份至磁碟),記錄檔可以進行收縮。

DBCC shrinkfile (logtest_log)

DBCC loginfo

GO

(1 行受影響)

DBCC 執行完畢。如果DBCC 輸出了錯誤資訊,請與系統管理員聯絡。

(2 行受影響)

DBCC 執行完畢。如果DBCC 輸出了錯誤資訊,請與系統管理員聯絡。

Sql Server ShrinkFile Error 解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.