我在SQL Server 2008 R2中有一个数据库,其中有数百万个文件存储为varbinary blob。我上周设置了一个过程来执行以下操作:SQL Server日志文件在简单恢复模式下填充
- 使用一些实体框架代码来获取具有blob的行(即实体)。
- 将blob流复制到对象存储。
- 使用商店中的新对象ID更新数据库中的实体。
我有30个线程经常这样做,这个过程仍然需要几天。几天前,数据库日志文件已填满,我相信它必须由此过程引起。我确定时间点备份对于此数据库并不重要,并且将数据库设置为使用简单恢复模式。然后昨天我再次从我的过程中得到错误,说日志文件填满了!这在简单模式下如何实现?!任何想法我能做些什么来阻止这种情况的发生?当我监视日志文件时,SQL Server会让它达到7%的饱和度,然后将其截断为零,所以我感到非常困惑。看起来好像当完整备份开始时日志文件开始增长未被选中...
我根本没有使用事务,至少没有明确地说,我没有剩余的空间来分配。我不认为你的回答告诉我为什么它只在完全备份期间增长,是吗?我的猜测是,这与那里没有任何活动的休息点有关。 – influent
@influent我编辑了答案来澄清。 SQL Server不*需要一个没有活动的休息点,但它确实需要在备份开始之前启动的事务完成。 – TimothyAWiseman
谢谢。每条语句只更新一行,没有批次。我明白现在发生了什么(http://technet.microsoft.com/en-us/library/ms345414.aspx,ACTIVE_BACKUP_OR_RESTORE),但我不知道如何解决它,因为我没有任何剩余空间。我可能必须在另一个驱动器上添加第二个日志文件,以便完整备份可以在日志文件没有填满的情况下完成。 – influent