- - PR -
SQLServer2005 ログ領域不足
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-12 18:02
いつもお世話になっております。
現在SQLServer2005にてログ領域が不足する問題が発生して困っています。 状況としては大量のデータを削除した時に、ログ領域が制限以上になってしまうようで、途中でエラーとなってしまいます。 復旧モデルは単純にしているので、ログ領域を使わないと思っていたのですが、 どうも使った後に切り捨てる動作になっているようです。 ログ領域の上限を増やせば問題ないような気もしますが、増やさずに済む方法は無いでしょうか? もし、わかる方がおられましたらご教授お願いします。 | ||||
|
投稿日時: 2008-11-12 21:43
復旧モデルは単純でもコミットされてデータファイルに書き込まれるまでは、
トランザクションログに残るので、 1回のトランザクションで削除するデータ量を減らすべし。 | ||||
|
投稿日時: 2008-11-13 11:16
データベースエンジンクエリからトランザクションを張らずに
単純にDELETE文を呼んでいるだけなのですが、 それでもトランザクションが残ってしまうのでしょうか? 逆にトランザクションログを残さずに削除を行う方法はありませんか? | ||||
|
投稿日時: 2008-11-15 13:30
ムリ。明示しなくてもに自動トランザクションてやつが、
ステートメント単位の一貫性を保証してくれますね。 それをしないと、SQLが途中でこけたときに、中途半端に更新されてしまうわけで、 DBMSの実装としてはありえないはず。 TOP 10000 とかつけたSQLを、WHILEループでまわしてください。 | ||||
|
投稿日時: 2008-11-15 13:48
仮に対象テーブルの全てのデータを削除してもよいのであればtruncate table句を
使えばトランザクションログの増加は抑止出来ます。 全部消せないのであれば消したくないデータを一時テーブルへ退避した上で truncate tableを使って全削除→必要なデータを戻すという対応も可能かと。 http://msdn.microsoft.com/ja-jp/library/ms177570.aspx
| ||||
|
投稿日時: 2008-11-15 16:05
Insertでログがあふれたりすると…大混乱するかもね。
| ||||
|
投稿日時: 2008-11-15 16:45
大混乱ってw 細かいことを言い出したらtopを使った方法だって同じですよね? 最適な制御方法については状況を把握した上で対応するしかないと思いますよ。 | ||||
|
投稿日時: 2008-11-18 09:26
色々コメントありがとうございます。
単純に一定の件数まで削除したいだけなので、 途中でこけても途中まで削除されているのであれば全然良いのですがね ![]() トランザクションログの容量を増やしてチャレンジしてみましたが、 今度はtempdbがあふれちゃいまして(笑) おとなしく少しずつ削除する方法に切り替えようかと思います。 しかし、7億件・・・。 設計がマズイと思うんだけど、聞き入れてくれない(泣) |