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文件......(还没有找到怎么做)...
没有找到相关结果
已邀请:
1 个回复
蹄渭信妥扳
如果你经常运行这个(至少每天一次),那么它只需通过TickersDay([Date])上的索引处理1/9或更少,而不是必须通过整个表,如果你在字段上使用DATEDIFF。 如果仍然导致这种情况: 数据库的事务日志 'VTNET'已满 你真的需要增加日志大小,因为我怀疑它没有设置为自动增长,并且不足以进行此操作。要么就是这样,要么开始考虑批量删除(再次假设你有一个日期索引,所以这有效地只针对100行),例如
你可以循环它(同时@@ rowcount> 0)或者只是更频繁地安排它作为滴流背景删除。