【问题标题】:Create mssql job via Liquibase通过 Liquibase 创建 mssql 作业
【发布时间】:2019-11-25 13:55:57
【问题描述】:

我想通过 liquibase 在 sql server 上创建工作。我有原始 sql 文件,如果存在则删除作业并定义一个新文件。

我必须从'use msdb' 子句开始脚本才能访问sp_add_job/sp_delete 作业程序。

作业已正确创建,但执行 liquibase 后返回错误。它没有看到 databasechangelog 表。

我猜这个问题的子句是脚本liquibase在msdb之后,但它应该在我的db中。

我不想在脚本中使用我的数据库名称,因为它在另一个环境中可能会有所不同。通过liquibase创建mssql作业的正确方法是什么?

感谢您的回答。

【问题讨论】:

  • 您能提供您正在执行的实际变更集吗?
  • SQL 代理作业永远不会存在于用户数据库中。它们保存在msdb。如果您的作业必须针对用户数据库(或用户数据库中的存储过程)执行代码,或者作业创建脚本必须在您的用户数据库中创建对象,您需要参数化您的创建脚本,以便用户数据库名称可以执行时传入。
  • @alroc - 我认为 OP 明白这一点。问题不在于运行 SQL 作业......它首先是在创建 SQL 作业,例如 Liquibase。当 liquibase 脚本完成后,它会尝试更新更改日志,但由于更改日志已回到用户的数据库中,因此无法更新,但此时,上下文是 msdb。这几乎是一种鸡/蛋的情况。就个人而言,我不喜欢像这样盲目地部署 SQL Job,我见过太多的错误。提供脚本和一些步骤供某人完成会更好/更容易。

标签: sql-server liquibase jobs


【解决方案1】:

一种可能的方法是使用更改日志参数来指定正在管理的数据库的名称。你可能有这样的事情:

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <property name="user-database" value="dev-user" context="DEV"/>
    <property name="user-database" value="test-user" context="TEST"/>
    <property name="user-database" value="prod-user" context="PROD"/>

    <changeSet id="1" author="joe">
         <sql endDelimiter="\nGO" splitStatements="true">
           use MSDB
           GO

           (create the job you need)
           GO

           use ${user-database}
           GO
         </sql>
    </changeSet>
</databaseChangeLog>

${user-database} 将被替换为用户数据库属性的值,具体取决于您设置的上下文。然后,您将使用--contexts=DEV--contexts=TEST 等运行liquibase update 命令。

ChangeLog 参数记录在https://www.liquibase.org/documentation/changelog_parameters.html

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 2018-04-08
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多