SQL日志和活动事务

我有一个运行模拟SQL 2005数据库的SQL Server的Web服务器,我有一个用于测试环境的本地SQL 2005数据库。 这使我使用脚本来备份/恢复数据以进行测试,因为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
以下是我的问题和问题: 我明白了..我有一个需要回滚命令的事务语句 <如果@@ Trancount> 0回滚> ..但我有100个存储过程所以在我这样做之前.... 在意义中......我怎么能根除这个问题?我试过SHRINKING,我试过备份Db ...... 正如你所看到的,它处于SIMPLE模式......我不知道如何备份LOG ONLY文件......(还没有找到怎么做)...     
已邀请:
您可以通过仅在需要删除的日期使用索引来获取SQL NOT来处理整个表,从而解决此问题。将其改为索引友好
DELETE FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO
如果你经常运行这个(至少每天一次),那么它只需通过TickersDay([Date])上的索引处理1/9或更少,而不是必须通过整个表,如果你在字段上使用DATEDIFF。 如果仍然导致这种情况:   数据库的事务日志   'VTNET'已满 你真的需要增加日志大小,因为我怀疑它没有设置为自动增长,并且不足以进行此操作。要么就是这样,要么开始考虑批量删除(再次假设你有一个日期索引,所以这有效地只针对100行),例如
DELETE TOP (100) FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO
你可以循环它(同时@@ rowcount> 0)或者只是更频繁地安排它作为滴流背景删除。     

要回复问题请先登录注册