【问题标题】:Liquibase Error: Found multiple catalogs matchingLiquibase 错误:找到多个匹配的目录
【发布时间】:2014-12-09 22:22:44
【问题描述】:

我有一个用于测试目的的简单更改日志文件,该文件应用了 1 个更改集,该更改集删除并创建了一个表。我们有 20 个 DEV / QA 数据库,它们都在相同版本的 DB2、OS 等上。这个 changeSet 在其中的 19 个中有效。它在 1 个 DB 中爆炸,错误如下所示。永远不会构建 databasechangelog 和 databasechangeloglock 表。

我在网上找不到太多帮助。非常感谢您提供的任何帮助!

错误

运行 Liquibase 时出现意外错误:liquibase.snapshot.InvalidExampleException:找到多个与 XXX 匹配的目录

严重的 2014 年 12 月 9 日下午 2:02:liquibase:liquibase.snapshot.InvalidExampleException:找到多个与 XXX 匹配的目录 liquibase.exception.LockException:liquibase.exception.UnexpectedLiquibaseException:liquibase.snapshot.InvalidExampleException: gs 匹配 XXX 在 liquibase.lockservice.StandardLockService.acquireLock(StandardLockService.java:214) 在 liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.java:153) 在 liquibase.Liquibase.update(Liquibase.java:182) 在 liquibase.Liquibase.update(Liquibase.java:174) 。 . .

databaseChangeLog.xml 
=====================
<?xml version="1.0" encoding="UTF-8"?>

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

   <preConditions>
      <dbms type="DB2"/>
   </preConditions>

   <include file="db2\viewname_changeSet_005.xml"/>

</databaseChangeLog>


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

   <changeSet id="STPL_TEST Drop Table" author="Joan">
      <preConditions onFail="CONTINUE">
         <sqlCheck expectedResult="1">SELECT COUNT(*) FROM syscat.tables where tabname = 'STPL_TEST'</sqlCheck>
       </preConditions>
      <sql>
         DROP TABLE STPL_TEST; 
      </sql>
   </changeSet>

   <changeSet id="STPL_TEST Create Table" author="Joan">
      <sql>
         CREATE TABLE STPL_TEST (
           ST_ID     BIGINT NOT NULL,
           ST_VCHAR  VARCHAR(10),
           ST_DATE   DATE
         );
      </sql>
   </changeSet>

</databaseChangeLog>

【问题讨论】:

  • 你有两个同名但不同案例的目录吗?
  • 目录是指模式吗?运行此选择时我没有找到任何重复的行:select * from syscat.schemata order by 1;
  • 当我在数据库服务器上运行这个命令时,它不会返回重复的条目:db2 list db directory
  • 找到了!从 sysibm.tables 中选择不同的 table_catalog、table_schema;会得到纠正。谢谢内森!
  • 上面的选择现在只返回 1 个 table_schema 但 Liquibase 问题仍然存在。您能否让我知道 Liquibase 正在运行什么以确定存在超过 1 个目录?该数据库正在使用中,我可以毫无问题地创建表。尝试创建 databasechangelog 表时,Liquibase 正在轰炸。谢谢!

标签: liquibase


【解决方案1】:

这可能发生了,因为 Oracle 创建了 2 个同名用户,它们仅在注册表方面有所不同。因此,在您的示例中,如果您的用户是 XXX,则在创建此用户期间,Oracle 还可以创建名为 xxx 或“XXX”的用户等。你可以通过运行来检查它

SELECT * FROM all_users 
order by username

然后您必须使用引号删除您的用户。如果是管理的,运行

alter session set “_oracle_script”=true;
drop user "xxx" cascade;

如果没有,只需使用引号删除用户

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多