2014-04-04 3 views
0

내 Oracle 데이터베이스에 OWNER & USER라는 두 개의 스키마가 있습니다. 기본적으로 모든 테이블은 OWNER에서 생성되고 USER 계정을 사용하여 동의어가 생성됩니다.동의어 사용시 Liquibase 문제

<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> 

DATABASECHANGELOG (LOCK) 테이블이 OWNER 계정에 생성 된 사용자 계정에 대한 동의어를 첨가하고, 나는 SQL 개발자에서 볼 수 있어요. 나는 사용자 스키마에 대한 초기 마이그레이션을 실행하는거야하지만 내가 가지고 :

[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] 

은 왜 내가 사용자 계정을 사용 DATABASECHANGELOGLOCK 테이블에서 선택할 수 있습니다 때이 테이블을 만들려고? 감사합니다.

답변

2

Liquibase는 databasechangelog 테이블이 있는지 데이터베이스 메타 데이터를 확인하지만 불행히도 동의어를 볼 수있는 기능이 없습니다.

USER.DATABASECHANGELOG를 동의어로 사용해야하는 경우 DATABASECHANGELOG 테이블에 대한 응답을 동의어 또는 하드 코드로 처리 할 수있는 liquibase.snapshot.jvm.TableSnapshotGenerator의 하위 클래스를 만들어야합니다.

+0

감사합니다. Nathan! 동의어에는 몇 가지 문제가 있지만 확인해 주셔서 감사합니다. 그리고 liquibaseSchemaName/liquibaseTableName은 다른 스키마에 DATABASECHANGELOG (LOCK) 테이블을 갖는 데 도움이 될 수 있습니까? – dbf

+0

예, 이러한 매개 변수를 사용하면 DATABASECHANGELOG 및 LOCK 테이블이 일반 스키마와 다른 스키마에있는 경우 스키마를 설정할 수 있습니다. –

+0

LIquibase의 스냅 샷 및 diff 로직은 아직 스냅 샷이있는 데이터베이스 관련 기능을 사용하려고하지 않으므로 제대로 작동하지 않습니다. –