排查 BarTender 系统数据库事务日志文件(.LDF)问题
症状
您发现系统数据库变得异常庞大,并且维护操作失败,出现以下错误信息:
存储过程: [dbo].[SpDeleteOlderRecords] 失败;内部信息: 数据库 'SystemDB' 的事务日志已满,原因是 'ACTIVE_TRANSACTION'
环境
BarTender 系统数据库
诊断
在管理控制台中,进入“管理任务 > 查看数据库大小...”,确保事务日志文件的大小较小。
通常,BarTender 系统数据库的 SQL Server 事务日志文件(.LDF)会在数据库维护期间增长,但维护完成后应恢复到原始大小。然而,有时不会自动缩小,导致 LDF 文件持续增大。
解决方案
在对系统数据库进行以下更改前,请务必咨询您的数据库管理员。
建议在对系统数据库进行以下更改前,先备份您的系统数据库。
客户的事务日志空间不足,无法处理所有维护操作的事务信息。维护操作包括三个步骤:
- 备份
- 删除旧记录
- 重新组织或重建索引(可能需要大量事务日志空间)
建议为事务日志分配更多空间。此外,恢复模式应设置为“简单”,这样可以大大减少事务日志空间的占用。
操作步骤:
- 在 SQL Server Management Studio 中,右键点击您的系统数据库 > 属性 > 文件,查看事务日志文件的最大大小。
- 在系统数据库属性中,右键点击您的系统数据库 > 属性 > 选项 > 恢复模式,确认恢复模式已设置为“简单”。
- 如有需要,运行“手动解锁”操作以解锁维护(见下文)。
- 启动管理控制台,执行维护操作。
- 维护完成后,查看事务日志文件的增长情况。
- 再次进入数据库属性,将文件的大小限制设置为磁盘上文件的实际大小,而不是无限制。
注意:如果由于 SQL Server Express 的大小限制,需要每周清理系统数据库,10GB 的大小限制可能不够。此时可能需要完整版本的 SQL Server 和专用磁盘(也可能是另一台 VMWare 镜像/服务器刀片)。请注意,进行这些更改并不能替代定期备份和归档数据库的必要性。
“手动解锁”操作步骤
- 停止“BarTender System Service” Windows 服务。
- 在 SQL Server Management Studio 的对象资源管理器(通常在左侧面板),展开您的数据库,进入“可编程性”文件夹,选择“存储过程”文件夹。
- 运行以下过程(如果影响的行数为 0,请再运行一次):
exec SpDsUnlockMaintenance 0
- 找到“SpDeleteRecords”存储过程。
- 右键点击“SpDeleteRecords”,选择“脚本存储过程为” > “ALTER 到” > “新建查询编辑器窗口”
- 在新编辑器窗口,将“ALTER PROC”行中的“WITH EXECUTE AS 'dbo'”删除,使其变为:
ALTER PROC [dbo].[SpDeleteRecords](@pastUtcTicks bigint, @categories nvarchar(1024))
- 现在运行此查询(通常按 F5),以修改存储过程。
- 重启“BarTender System Service” Windows 服务。
收缩日志文件大小
在执行如截断表或删除表等会产生大量未用空间的操作后,您应执行以下查询来收缩当前数据库的日志文件大小。(在以下脚本中,请将 [Database name] 替换为您的数据库名称)
-- 将系统数据库恢复模式设置为 SIMPLE,然后对事务日志执行 DBCC SHRINKFILE 操作。
ALTER DATABASE "[Database name]" SET RECOVERY SIMPLE
DBCC SHRINKFILE ([Database name]_Log, 1);
GO
其他资源