• 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不支持这个。

     

    clip_image001

     

     

    作业是在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

  • 相关阅读:
    MIME 部分扩展名与类型对应
    sql server 表变量、表类型、临时表
    SqlBulkCopy使用注意事项
    SQL Server为啥使用了这么多内存?
    SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现
    DQL、DML、DDL、DCL的概念与区别
    IIS解决CPU和内存占用率过高的问题
    SQL Server 表变量和临时表的区别
    I Count Two Three(打表+排序+二分查找)
    AC自动机入门经典题目(两种表达方式)
  • 原文地址:https://www.cnblogs.com/kerrycode/p/10455786.html
Copyright © 2020-2023  润新知