我们运行 Ola Hallengrens 备份、dbcc 和索引作业,但由于某种原因我们没有安排输出文件清理。今天注意到了这一点,当我们尝试在具有 2 个或更多实例的服务器上运行它时,它不会删除旧日志。例如,我们设置了 1 个带有 2 个实例的服务器,并且它设置了 AvailabilityGroups。运行脚本时,这是输出:(我删除了几行,所以它没有占用整个页面,但删除了一些文件)
日期 2017-07-04 10:57:55 记录作业历史(输出文件清理)
步骤 ID 1 服务器 SERVER1183\INST01 作业名称 输出文件清理 步骤名称 输出文件清理持续时间 00:01:54 Sql Severity 0 Sql Message ID 0 Operator Emailed Operator Net sent Operator Paged Retries Attempted 0
消息以用户身份执行:VT\sqladmin-internaltes。...8C0E25584E08C4CB393567C2C66083E_1_20170301_132833.txt" del "E:\MSSQL\INST01\MSSQL12.INST01\MSSQL\Log"\"DatabaseBackup_0x18C0E25584E08C4CB393567C2C66083E_1_20170304_200000.txt" del "E:\MSSQL\INST01\MSSQL12.INST01\MSSQL\Log"\"DatabaseBackup_0x6DFC82E95 ... 处理退出代码 0。该步骤成功。
检查位于 E:\MSSQL\INST01\MSSQL12.INST01\MSSQL\Log 的 Logs 文件夹后,我们仍然有 12500 个文件。
添加 Olas 作业时,这些作业被设置为标准,输出文件配置为:
$(ESCAPE_SQUOTE(SQLLOGDIR))\IndexOptimize_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt
我们根本没有更改作业命令,即:
cmd /q /c "For /F "tokens=1 delims=" %v In ('ForFiles /P
"$(ESCAPE_SQUOTE(SQLLOGDIR))" /m *_*_*_*.txt /d -30 2^>^&1') do if
EXIST "$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v echo del
"$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v& del
"$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v"
当脚本是单个实例或默认实例时,该脚本可以正常工作。如果相关的话,它是 sql 2014,但我们在 2008 年和 2012 年也有这个问题。
任何人都知道这个或知道如何解决这个问题?
我应该补充一点,这适用于 2 个或更多未设置可用性组的实例。只有当它超过 1 个实例和 AG 设置时。但我所做的是编辑参数并将 $(ESCAPE_SQUOTE(SQLLOGDIR)) 更改为实际路径文件夹,效果很好。