- PR -

トランザクションログを取らない

1
投稿者投稿内容
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-06-21 14:18
お世話になってます。

SQLServer2000を使用しています。
トランザクションログを取らないクエリの実行方法ってあるのでしょうか?

大容量のデータを扱っていて、クエリを実行するとトランザクションログが
ディスク容量を使いまくってしまいます。
DBのログファイルサイズは自動拡張にしていて、復旧モデルはシンプルにしています。
ログファイルサイズを制限すると、そのサイズに達した段階で
「データベース '×××' のログ ファイルはいっぱいです。ログ領域を解放するには、データベースのトランザクション ログをバックアップしてください。」
とエラーが出てしまいます。

ちなみに実行しているのは「SELECT INTO」で、この処理はトランザクションログを
取らないというふうにどこかでみたことがあるのですが、違うのでしょうか?

あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-06-21 14:54
引用:

Qさんの書き込み (2007-06-21 14:18) より:
ちなみに実行しているのは「SELECT INTO」で、この処理はトランザクションログを
取らないというふうにどこかでみたことがあるのですが、違うのでしょうか?


SELECT INTOは別テーブルへのINSERTですよ?
更新なのでトランザクションログへの書き込みは必須です。
書かないと一切のリカバリができなくなってしまいます。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2007-06-21 15:00
こんにちは。

以下の手順で最小限しかログに記録されなくなるはずです。

1. 完全復旧モデルに切り替える
2. 一括ログ復旧モデルに切り替える
3. INSERT INTO を行う
4. 単純復旧モデルに切り替える

ステップ 1. が必要なのかどうか確証が無いですが。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-06-21 15:34
あしゅさん、ueさん、早速のご回答ありがとうございます!

>あしゅさん
ということは、「SELECT INTO」は「CREATE TABLE」と「INSERT」を同時に行っている
ようなものってことですかね?
たとえば、皆さん大容量のレコードの一括削除って、どうされてるんでしょう?
とりあえず削除して、あとでログの切捨てって感じでしょうか?
すみません、質問だらけで・・・

>ueさん
1,2,4はそれぞれ選択してOKボタンを押せば手順完了ということでしょうか。
なんか、ゲームの裏コマンドみたいですね。。
この場合、4以降の処理から最小限のログということですか?
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2007-06-21 17:32
引用:

Qさんの書き込み (2007-06-21 15:34) より:

1,2,4はそれぞれ選択してOKボタンを押せば手順完了ということでしょうか。
なんか、ゲームの裏コマンドみたいですね。。
この場合、4以降の処理から最小限のログということですか?


Enterprise Manager で設定するならボタンを押すだけです。
GUI は有り難いですね。

最小限のログとなるのは 2. 以降です。
普段は単純復旧モデルで運用されているようなので、4. で元に戻しています。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2007-06-21 19:18
ueさん

ありがとうございます。
ちょっとやってみますね。
あとはどのぐらいログ容量が減るかですね。
前回はHDD容量が残り10MBになってましたので。。
1

スキルアップ/キャリアアップ(JOB@IT)