SQL ServerのSHRINKFILEエラーソリューション

メッセージ
CN \ HKSQLPWV625sqlagent:ユーザーとして実行。ファイルの端に位置する論理ログファイルが使用中であるため、ログファイル2(DIX_Log)を縮小することはできません。[SQLSTATE 01000](メッセージ9008)DBCC実行完了。DBCCがエラーメッセージを印刷した場合は、システム管理者にお問い合わせください。[SQLSTATE 01000](メッセージ2528)DBCC実行完了。DBCCがエラーメッセージを印刷した場合は、システム管理者にお問い合わせください。[SQLSTATE 01000](メッセージ2528)がファイルの末尾に位置する論理ログファイルが使用中であるため、ファイル2(LTD_Log)をログ縮小できません。[SQLSTATE 01000](メッセージ9008)DBCC実行完了。DBCCがエラーメッセージを印刷した場合は、システム管理者にお問い合わせください。[SQLSTATE 01000](メッセージ2528)バックアップ、ファイル操作の操作(例えば、ALTERデータベースとしてファイルを追加)し、データベースの暗号化の変更は、シリアル化されなければなりません。現在のバックアップやファイル操作操作が完了した後、文を再発行してください。[SQLSTATE 42000](エラー3023)。ステップが失敗しました。

 

DIXを使用

DBCC LOGINFO

- 情報を格納するテーブルを作成しますLOGINFO

CREATE TABLE DoxLoginfo

ID int型アイデンティティ、
RecoveryUnitId int型はnull、
fileld int型はnull、
ファイルサイズint型はnull、
StartOffset int型はnull、
ステータスint型はnull、
パリティint型はnull、
CreateLSN int型はnull、
CREATEDATE日時デフォルトGETDATE()

DixLoginfoに挿入(RecoveryUnitId、fileld、ファイルサイズ、StartOffset、FSeqNo、ステータス、パリティ、CreateLSN)

EXEC( 'DBCCのLOGINFO')

- 仮想ログを照会し、ゼロ収縮の最終的な状態を決定します

ID =(DixLoginfoからMAX(ID)を選択)DixLoginfoから@status int型選択@status =ステータスを宣言する   

(@status = 0)であれば      

ベギン        

DBCC SHRINKFILE(DIX_log、TRUNCATEONLY)     

- 7日よりLOGINFOを削除します。        

DATEDIFF(日、CREATEDATE、GETDATE())> 7 DixLoginfo。DELETE FROM      

終わり 

GO

 

- インターネットの予感からの振替

データベースは、小さなトランザクションログの数を定義するために関係なく、物理的なファイルの、少なくとも1つのログファイルを持っている、SQL Serverは、一つの連続したファイルとみなされています。トランザクション・ログ・ファイルは、実際には仮想ログファイルVLF一連によって管理されています。仮想ログファイルのサイズは、SQL Serverののログファイルの合計サイズによって決定されます。仮想ログファイルの物理的な構造は次のよう:

ログファイルが契約している場合は、ログファイルのVLF未使用の終わりを削除することができます。

SQLのクライアントアクセスライセンスでは、ログファイルは、ログファイルのみの尾から契約することができますが、Microsoftがバックアップまたはログを切り捨てるには、SQL Serverは自動的にファイルにログのアクティブな部分を転送します7.0 SQLサーバーの問題で以前に修正されましたそして、最後の始まり、とあなたは未使用領域を解放するためにDBCC SHRINKFILEまたはDBCC SHRINKDATABASEコマンドを実行します。

ログファイルどのように多くの仮想ログファイル、およびこれは、アクティブな仮想ログファイルであるかどうかを判断するには、文書化されていないコマンドDBCCコマンドを使用することができます。次のようにDBCC LOGINFO、その構文は次のとおりです。

DBCC LOGINFO [(DBNAME)]

収縮とログの切り捨てと実施のメカニズムの動作原理を見ながら、私たちは、例を通じてDBCC LOGINFOの使用状況をご紹介しましょう。

まず、作成テスト・データベースを次のように、スクリプトは次のとおりです。

MASTERを使用してください。

行きます

データベースlogtestをCREATE

GO

FULL ALTER DATABASEのlogtest SET回復

GO

USE logtest。

GO

DBCCのLOGINFO。GO

その後にいくつかの行を埋め、今テーブルを作成し、現在は仮想ログファイルがアクティブになって、仮想ログファイルの活動の、状態​​(ステータス)が2である、logtestデータベースは、2つの仮想ログファイルを持っている図から知ることができますいくつかのログを生成して、ログ内の変更を表示します。

bigOrderHeader INTO SELECT TOP 10000 *

AdventureWorks.Sales.SalesOrderHeader FROM

GO

DBCC LOGINFO GO

この時点で、ログを縮小し、次に何が起こるかを見るために、今、あなたは、ログファイルに12個の仮想ログファイルが表示されます、そして、彼らはアクティブ(両方の状態2)ですか?

DBCC SHRINKFILE(logtest_log)DBCC LOGINFO GO

データベースがバックアップされていないので、まだアクティブでないトランザクション、SQL Serverはログの非アクティブな部分を保持する必要はありませんだと思うだろう、それが削除されます。今すぐ、データベースをバックアップします。

BACKUP DATABASEのlogtest

DISK = 'F:\ logtest.bak' へGOデータベースは 'logtest'、ファイル 'logtest'(位置文献1)には、440を処理しました。

これは、2つのデータベース「logtest」、ファイル「logtest_log」(位置文献1)があります。

BACKUP DATABASEが正常に442ページを処理し、それが(4.246メガバイト/秒)0.851秒かかります。

現在、いくつかのログの変更を実行し、再チェックログ:

SET ROWCOUNTの1000年

GO

TRANをBEGIN

bigOrderHeaderをDELETE

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 TRANは、GO LOGINFO 0 GO DBCC bigOrderHeader ROLLBACK TRAN GO SET ROWCOUNTをDELETE BEGIN

このとき、ログが原因で復元操作のための仮想ログマークの縮小することができない、ログだけがバックアップまたは切り捨てをした、スペースを解放することができます。

TRUNCATE_ONLY WITH BACKUP LOGのlogtest

DBCC LOGINFO

GO

今マークされた仮想ログが不要になったでしょう(ログイン切り捨てられるか、すでにディスクにバックアップされるか)、ログファイルを縮小することができます。

DBCC SHRINKFILE(logtest_log)

DBCC LOGINFO

GO

(影響を受けた1行)

DBCCの実行が完了しました。DBCCがエラーメッセージを印刷した場合は、システム管理者にお問い合わせください。

(2行が影響を受けます)

DBCCの実行が完了しました。DBCCがエラーメッセージを印刷した場合は、システム管理者にお問い合わせください。

ます。https://www.cnblogs.com/tutuyforever/p/6322894.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34185320/article/details/94682066