2011-01-12 45 views
0

私は、SQL 2008のシミュレートされたSQL 2005データベースを実行しているWebサーバーを持っており、テスト用のローカルSQL 2005 dbを持っています。SQLログとアクティブなトランザクション

これは、2008サーバのバックアップが2005サーバに復元されないため、テスト用のデータのバックアップ/リストアにスクリプトを使用する原因となります。

私は私の生産のWeb SQL Serverの(2008)

DELETE FROM TickersDay 
WHERE (DATEDIFF(day, TickersDay.[date], GETDATE()) >= 8) 
GO 

上の表のサイズを小さくするために、このSQLクエリを実行すると、私はこのメッセージが表示されます。

Msg 9002, Level 17, State 4, Line 3 
The transaction log for database 'VTNET' is full. To find out why space in the log 
cannot be reused, see the log_reuse_wait_desc column in sys.databases 

とき、私それが起動します時にはスクリプトを公開する。

私は、このSQLコマンドを実行すると、私は次のような結果を得る:

SELECT [name], recovery_model_desc, log_reuse_wait_desc 
FROM sys.databases 

結果:ここ

[name]  recovery_model_desc  log_reuse_wait_desc 

VTNET SIMPLE      ACTIVE_TRANSACTION 

は私の質問および問題については、次のとおりです。

  1. 私はそれを得ます。..ロールバックコマンドが必要なトランザクション文があります。

< @@ TRANCOUNT> 0ロールバック>もし..しかし、私はその間に

  1. ....それを行う前に、ので、私は100のストアドプロシージャを持っている...どのように私はこの問題を根絶することができます?私はSHRINKINGを試しましたが、私はDbをバックアップしようとしました...

  2. ご覧のとおり、SIMPLEモードです... LOG ONLYファイルをバックアップする方法はありません。あなたが使用してあることが必要日付だけにインデックスをテーブル全体を処理するために、単にSQL ませを取得することによってこの問題を回避することができるかもしれない...)ことを行う方法

答えて

1

を発見していません削除されました。あなたの代わりに移動することで、それが唯一のTickersDay([日付])のインデックスを経由して1/9位以下を処理しなければならない(少なくとも毎日)この十分な頻度で実行する場合

DELETE FROM TickersDay 
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE()) 
GO 

優しい指標とそれを修正してくださいフィールド上でDATEDIFFを使用する場合は、テーブル全体を使用します。

それはまだ、この発生した場合:

データベース 「VTNET」のトランザクションログがあなたが本当に私は自動拡張に設定されていない疑いがあるため、ログのサイズを大きくする必要が

いっぱいですこの操作に十分な大きさではありません。削除するアイテムをバッチ処理することを検討してください(これは、日付にインデックスがあると仮定すると、100行だけを効率的にターゲティングします)。

DELETE TOP (100) FROM TickersDay 
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE()) 
GO 

することはできいずれかのループそれ(> @@ ROWCOUNTしばらく0)またはちょうどより頻繁に散水背景を削除するようにスケジュールを設定。

+0

あなたの詳細な説明と回答(複数)ありがとう...どのように働いたのかわかりませんが、私はサイズを増やし(無制限で使用しました)、あなたのクエリを使用しました。十分なコミットされていない取引bs ...私はそれについて後で心配します.. – CraigJSte

関連する問題