2011-01-12 62 views
0

我有一個運行模擬SQL 2005數據庫的SQL 2008的Web服務器,並且我有一個本地SQL 2005數據庫用於測試環境。SQL日誌和活動事務

這使我使用腳本備份/恢復數據進行測試,因爲2008服務器備份不會還原到2005服務器。

當我運行該SQL查詢,以減少我的生產Web SQL Server上的表的大小(2008)

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

我得到這個消息:

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還原> ..但我有100個存儲過程,所以我才這樣做....

  1. 與此同時...我怎樣才能根除這一問題?我已經嘗試收縮,我已經嘗試備份Db ...

  2. 正如你所看到的,它是在SIMPLE模式下...我不知道如何備份一個僅記錄文件......(還沒有找到如何做到這一點)......

回答

1

你也許能夠得到解決這個問題只需通過讓SQL 處理利用整個表上只需要日期索引刪除。另一種方式如果你運行這個頻率足夠高(至少每天),它是指數型

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

那麼它只有通過對TickersDay索引來處理1/9日或更小([日]),而不必去如果您在現場使用DATEDIFF,則可以通過整個表。

如果仍然導致此:

的事務日誌數據庫 「VTNET」充滿

你真的需要增加日誌的大小,因爲我懷疑它是不是設置爲自動增長並且這個操作不夠大。要麼是這樣或者開始考慮批量刪除(再次假設你有一個日期索引,所以這隻能有效地定位到100行)。

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

您既可以循環它(@@ rowcount> 0),也可以更頻繁地安排它作爲滴漏背景刪除。

+0

感謝您的詳細解釋和答案(多個)...不知道哪些工作,但我增加了大小(和使用不受限制),並使用您的查詢,它的工程很棒!足夠的未提交的交易bs ...我以後會擔心的.. – CraigJSte 2011-01-12 22:52:21