java log.dir_Variable SQLLOGDIR not found

昨天在一数据库(SQL Server 2008 R2 SP3)上部署了一个作业,今天早上收到告警邮件,作业执行报错“Unable to start execution of step 1 (reason: Variable SQLLOGDIR not found).The step failed”,刚开始有点莫名其妙,后面检查发现出错的原因是因为在高级选项(Advanced)里面的output file使用了标记(tokens),而SQL Server 2008R2不支持这个。

d8e7cffa872a7df4b78b31526b996051.png

作业是在SQL Server 2017下创建、测试的,然后生成作业的相关脚本,部署到SQL Server 2008 R2上,部分具体的代码如下所示:

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep@job_id=@jobId, @step_name=N’YourSQLDba_Index_Statistics_Maintenance_Step_One’,

@step_id=1,

@cmdexec_success_code=0,

@on_success_action=1,

@on_success_step_id=0,

@on_fail_action=2,

@on_fail_step_id=0,

@retry_attempts=0,

@retry_interval=0,

@os_run_priority=0, @subsystem=N’TSQL’,

@command=N’EXECUTE [dbo].[IndexOptimize]

@Databases = ”USER_DATABASES”,

@LogToTable = ”Y”

EXECUTE dbo.IndexOptimize @Databases = ”USER_DATABASES”,

@FragmentationLow = NULL,

@FragmentationMedium = ”INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE”,

@FragmentationHigh = ”INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE”,

@FragmentationLevel1 = 5,

@FragmentationLevel2 = 30,

@SortInTempdb = ”Y”,

@MaxDOP = 0,

@UpdateStatistics=”ALL”,

@StatisticsSample=80,

@LogToTable = ”Y”’,

@database_name=N’TMISDB’,

@output_file_name=N’$(ESCAPE_SQUOTE(SQLLOGDIR))\IndexOptimize_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt’,

@flags=0

关于标记(tokens) SQLLOGDIR的介绍如下;

(SQLLOGDIR)SQL Server 错误日志文件夹路径的替换标记 – 例如 $(ESCAPE_SQUOTE(SQLLOGDIR))。

其实SQL Server Agent的标记(token) SQLLOGDIR是从SQL Server 2014之后才开始支持的。所以需要修改output file设置,取消标记SQLLOGDIR.

如需测试当前数据库版本是否支持这个比较,可以创建一个简单作业执行下面命令,个人测试发现,SQL Server 2014以及后续版本才支持这个标记。SQL Server 2008R2、2012等版本皆不支持。

PRINT ‘$(ESCAPE_SQUOTE(SQLLOGDIR))’

参考资料:

https://docs.microsoft.com/zh-cn/sql/ssms/agent/use-tokens-in-job-steps?view=sql-server-2017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值