【问题标题】:Liquibase Sybase - dbo.DATABASECHANGELOG not found errorLiquibase Sybase - dbo.DATABASECHANGELOG 未找到错误
【发布时间】:2021-07-16 16:43:07
【问题描述】:

我刚刚开始使用 Liquibase 进行 Sybase ASE 迁移。我遇到的问题是我们连接的数据库服务器有两个数据库 db_main 和 db_local。 db_main 包含包装器过程并引用 db_local 过程。在连接字符串中,我们传递 db_main。像这样-

spring.datasource.url=jdbc:jdts:sybase://serveraddress/db_main
spring.liquibase.default-schema: dbo

当 liquibase spring boot 应用程序启动时,它会在 db_main 数据库中创建 DATABASECHANGELOG 和 DATABASECHANGELOGLOCK 表,并在仅将更改隔离到 db_main 数据库时正确更新它们。但是,当我们尝试更新 db_local 数据库中的现有过程时,就像这样 -

use db_local
go
if object_id('employee_table_i') is not null
  drop ....
...

Liquibase 抛出异常 -

Caused by: java.sql.SQLException: dbo.DATABASECHANGELOG not found. Specify owner.objectname or use sp_help to check whether the object exists 

这是我的变更集 -

<changeSet author="12345" id="1">
    <sqlFile path="classpath:/liquibase/features/employee_proc_i.sql" endDelimiter="go"/>
</changeSet>

我相信问题正在发生,因为 proc 有 -

使用 db_local

如果我将 changeSet 更新到下面,它可以正常工作 -

<changeSet author="12345" id="1">
    <sqlFile path="classpath:/liquibase/features/employee_proc_i.sql" endDelimiter="go"/>
    <sql>use db_main</sql>
</changeSet>

但我不确定这是唯一的方法还是有更好的方法。感谢您提供任何帮助或指导。

我正在使用带有 spring boot 的 liquibase-core 版本 - 4.4.1。

【问题讨论】:

    标签: database spring-boot sybase liquibase


    【解决方案1】:

    试试这个。

    1. 从过程中删除use db_local
    2. 在我们的 sql 变更集中使用 3 个对象引用。例如:drop table db_name.schema_name.object_name
    3. 从变更集中删除 &lt;sql&gt;use db_main&lt;/sql&gt;。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2013-08-08
      相关资源
      最近更新 更多