非常に大きなデータベース(50 GB以上)があります。ハードドライブの空き容量を増やすために、テーブルの1つから古いレコードを削除してみました。私はコマンドを実行しました:
delete from Table1 where TheDate<'2004-01-01';
ただし、SQL Server 2012は次のように述べています。
Msg 9002, Level 17, State 4, Line 1
The transaction log for database 'MyDb' is full due to 'ACTIVE_TRANSACTION'.
そして、それは物を削除しませんでした。そのメッセージはどういう意味ですか?レコードを削除するにはどうすればよいですか?
エラーを回避するために私がやったことは次のとおりです。
最初に、データベース復旧モデルをSIMPLEとして設定します。詳細情報 こちら 。
次に、いくつかの古いファイルを削除することで、5GBの空き領域を作成し、ログファイルの容量を増やしました。
警告なしでDELETEステートメントを再実行しました。
DELETEステートメントを実行すると、データベースがすぐに小さくなり、ハードドライブの領域が解放されると考えました。しかし、それは真実ではありませんでした。 DELETEステートメントの後に解放されたスペースは、次のコマンドを実行しない限り、オペレーティングシステムに仲介されません。
DBCC SHRINKDATABASE (MyDb, 0);
GO
そのコマンドの詳細 here 。
SQL Serverを再起動すると、データベースで使用されているログ領域がクリアされます。これがオプションではない場合、次を試すことができます:
* Issue a CHECKPOINT command to free up log space in the log file.
* Check the available log space with DBCC SQLPERF('logspace'). If only a small
percentage of your log file is actually been used, you can try a DBCC SHRINKFILE
command. This can however possibly introduce corruption in your database.
* If you have another drive with space available you can try to add a file there in
order to get enough space to attempt to resolve the issue.
これが解決策を見つけるのに役立つことを願っています。