我有两个模式:Oracle数据库中的OWNER和USER。基本上,所有表都是在OWNER中创建的,并且之后使用USER帐户创建同义词。
<execution>
<id>apply.owner</id>
<phase>process-resources</phase>
<configuration>
<url>${database.url}</url>
<username>${database.owner.user}</username>
<password>${database.owner.password}</password>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<changeLogFile>${changelog.owner.file}</changeLogFile>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<goals>
<goal>update</goal>
</goals>
</execution>
<execution>
<id>apply.user</id>
<phase>process-resources</phase>
<configuration>
<url>${database.url}</url>
<username>${database.user.user}</username>
<password>${database.user.password}</password
<driver>oracle.jdbc.driver.OracleDriver</driver>
<changeLogFile>${changelog.user.file</changeLogFile>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<goals>
<goal>update</goal>
</goals>
</execution>
为OWNER帐户创建了DATABASECHANGELOG(LOCK)表,添加了USER帐户的同义词,并且我可以在SQL Developer中看到它们。但是,当我为USER模式运行初始迁移时,我得到了:
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.0.8:rollback (apply.user) on project liquitest: Error setting up or running Liquibase: liq
uibase.exception.DatabaseException: Error executing SQL CREATE TABLE DATABASECHANGELOGLOCK (ID NUMBER(10) NOT NULL, LOCKED NUMBER(1) NOT NULL, LOCKGRANTED TIMES
TAMP, LOCKEDBY VARCHAR2(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID)): ORA-01031: insufficient privileges -> [Help 1]
当我可以使用USER帐户从DATABASECHANGELOGLOCK表中进行选择时,为什么尝试创建此表?谢谢!
Liquibase检查数据库元数据中是否存在databasechangelog表,但是不幸的是,它没有查看同义词的功能。
如果需要使用USER.DATABASECHANGELOG作为同义词,则需要创建liquibase.snapshot.jvm.TableSnapshotGenerator的子类,该子类可以处理同义词或对DATABASECHANGELOG表的响应进行硬编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句