SQL Serverログファイルを切り捨てるコマンドは何ですか?


回答:


131

私がよく覚えている場合...クエリアナライザまたは同等のもので:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
これは、データベースの復旧モデルをSIMPLE(Blorgbeardの回答のように)に設定するよりも間違いなく優れています。復旧モデルがFULLの場合、理由のためにそのように設定しているからです。
スコットウィットロック

52
truncate_onlyはSQL Server 2008では非推奨であるため、dbを単純復旧に切り替える必要がありますmsdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Justin Moore

10
SQL Server 2012の場合、これは機能しますが、はありませんWITH TRUNCATE_ONLY
net_prog 2013

4
net_progの発言に加えて、SQL Server 2012では最初の行をに置き換えましたBACKUP LOG DatabaseNameHere TO DISK='NUL:'
アーロンニュートン

'TRUNCATE_ONLY'は、認識されているBACKUPオプションではありません。(SQL Server 2019 RC1)
Tomasz Gandor

304

管理スタジオで:

  • ライブ環境ではこれを行わないでください。ただし、開発データベースをできる限り縮小するには、次のようにします。
    • データベースを右クリックし、を選択してからProperties、をクリックしますOptions
    • 「復旧モデル」が「フル」ではなく「シンプル」に設定されていることを確認します
    • OKをクリックします
  • もう一度データベースを右クリックし、Tasks-> Shrink->を選択します。Files
  • ファイルの種類を「ログ」に変更します
  • OKをクリックします。

あるいは、それを行うSQL:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

参照:http : //msdn.microsoft.com/en-us/library/ms189493.aspx


1
あなたの答えが私の一日を救った!「右クリック-タスク->縮小」オプションを知りませんでした。ありがとうございました!
ルネ・

7
ライブ環境で何をしますか?最初にログをバックアップしますか?
ジョンブブリスキー

1
私はDBAよませんが、はい、私は、ログのバックアップは、それを切り捨てるだろうと信じている:technet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeardは外で

2
@JohnBubriskiシンプル以外の復旧モデルを使用している場合、ログはデータの復旧またはトランザクションのロールバックの基礎になります。したがって、本番環境では、ログファイルを圧縮する前に、まずこれらのログをバックアップする必要があります。そうでなければ、実際の回復の可能性はありません。残念ながら、回復状況にある場合、DBを完全に回復するには、すべてのトランザクションログバックアップを再ロードする必要があります。楽しい時間、確かに!:)
定義

1
SQL Server 2012では、use mydatabase実行する前に実行する必要がありましたdbcc shrinkfile
knb

62

SQL Server 2008の場合、コマンドは次のとおりです。

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

これにより、14 GBのログファイルが1 MBに減少しました。


5
どのバージョンと承認された回答がSQL Server 2008に該当しないかについての質問はあいまいであるため、この回答は年齢に関係なく有効です。
James Law、

おかげで、DBCC SHRINKFILEに反応しなかった大きなログファイルを削減することができました
Christian Navelot '5/10/05

6
完了したら、復旧モデルを完全に戻すことを忘れないでください!
Dan Bechard

これを実行する前にバックアップする必要があります(または他の切り捨てオプション)。完全バックアップを実行し、SSMSで[コピーのみのバックアップ]をオンにすると、ログは不要になります。(これは単なるバックアップです)。
Simon_Weaver

37

SQL 2008の場合、ログをnulデバイスにバックアップできます。

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

次に、を使用DBCC SHRINKFILEしてログファイルを切り捨てます。


2
これが私の状況で動作するようになった唯一のものです... TRUNCATE_ONLYでバックアップを使用しようとするとエラーが発生しました
TomXP411

注:SSDを使用している場合でも、この処理にはかなり時間がかかることがあります(ログを読み取って破棄する必要があります)。中程度のパワーを持つAzure VMの30GBのログファイルの場合、40%を実行するのに10分かかります。処理されたパーセンテージを確認するには、SSMSで「メッセージ」テイクに切り替えてください。
Simon_Weaver

3

truncate_onlyとそれに続くdbccrinkfileコマンドを使用したバックアップログログ名


0

私の答えはコメントに埋もれていたので。SQL Server 2012以降では、以下を使用できます。

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

もう1つのオプションは、Management Studioを介してデータベースをデタッチすることです。次に、ログファイルを削除するか、名前を変更して後で削除します。

Management Studioに戻り、データベースを再度アタッチします。アタッチウィンドウで、ファイルのリストからログファイルを削除します。

DBは新しい空のログファイルをアタッチして作成します。すべてが正しいことを確認したら、名前を変更したログファイルを削除できます。

おそらくこれを本番データベースに使用すべきではありません。


4
絶対にしないでください!ログにまだデータファイルにコミットされていないデータがある可能性があります。そのようなデータは失われます。
ポール、

回答で、本番環境で試さないように警告した場合、投稿する価値はまったくありません。
スタンショー

9
私は反対投票者に同意しません-それはオプションです。管理者は、自分のシナリオを理解する必要があるだけです。たとえば、開いているトランザクションがない場合、「コミットされていない」データはありません。
Gerard ONeill

3
これは私のために働いた唯一の解決策です。ドライブがいっぱいになり、バックアップも縮小もできず、他に何も機能していないようです。ありがとうございました!
ブライアン

3
同意する; これはベストプラクティスではありませんが、ブライアンのシナリオなどの他のオプションがない場合に役立つツールです。
ScottFoster1000 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.