【发布时间】: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