-
SQL Server を使用する過程で、データベース ログが非常に大きくなる状況がよく発生します。この問題が発生した場合、それを解決する 2 つの方法を紹介します。
方法 1
通常の状況では、SQL データベースを縮小してもデータベース サイズを大幅に縮小することはできません。その主な機能は、データベース ログが大きくなりすぎないようにするために、この操作を定期的に実行する必要があります。
1. データベース モードをシンプル モードに設定します。SQL Enterprise Manager を開き、コンソールのルート ディレクトリで Microsoft SQL Server をクリックします --> SQL Server グループ --> ダブルクリックしてサーバーを開きます --> ダブルクリックしてデータベースを開きますディレクトリ -- > データベース名 (フォーラム データベース Forum など) を選択し、右クリックして [プロパティ] を選択し、 [オプション] を選択します --> フェイルオーバー モードで [シンプル] を選択し、[OK] を押して保存します。
2. 現在のデータベースを右クリックし、すべてのタスクで圧縮データベースを表示します。通常、デフォルト設定を調整する必要はありません。「OK」をクリックするだけです。
3. データベースを圧縮した後、データベースのプロパティを標準モードにリセットすることをお勧めします。これは、方法 2 のような異常な状況では、ログがデータベースを復元するための重要な基盤となることが多いためです。
ノーカウントをオンに設定
DECLARE @LogicalFileName システム名、
@MaxMinutesINT、
@NewSizeINT
USE tablename -- 操作対象のデータベースの名前
SELECT @LogicalFileName = 'tablename_log', -- ログ ファイル名
@MaxMinutes = 10, -- ログのラップに許可される時間の制限。
@NewSize = 1 -- 設定するログ ファイルのサイズ (M)
--セットアップ/初期化
@OriginalSize int を宣言します
SELECT @OriginalSize = サイズ
システムファイルから
WHERE 名 = @LogicalFileName
SELECT ' ' + db_name() + ' LOG の元のサイズは ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K ページまたは ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
システムファイルから
WHERE 名 = @LogicalFileName
テーブルの作成 DummyTrans
(DummyColumn char (8000) が null ではありません)
@Counter INTを宣言、
@StartTime DATETIME、
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE()、
@TruncLog = 'バックアップ ログ ' + db_name() + ' TRUNCATE_ONLY 付き'
DBCC SHRINKFILE (@LogicalFileName、@NewSize)
EXEC (@TruncLog)
-- 必要に応じてログをラップします。
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- 時間は経過していません
AND @OriginalSize = (sysfiles WHERE name = @LogicalFileName からサイズを選択)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- 外側のループ。
SELECT @カウンター = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
開始 -- 更新
INSERT DummyTrans VALUES ('Fill Log')
ダミートランスの削除
SELECT @カウンター = @カウンター + 1
終わり
EXEC (@TruncLog)
終わり
SELECT ' + db_name() + ' LOG の最終サイズは ' +
CONVERT(VARCHAR(30),size) + ' 8K ページまたは ' +
CONVERT(VARCHAR(30),(サイズ*8/1024)) + 'MB'
システムファイルから
WHERE 名 = @LogicalFileName
DROP TABLE DummyTrans
カウントをオフに設定