2012-08-30 2 views
0

데이터베이스에서 Liquibase를 처음 실행할 때 변경 집합을 관리하는 데 사용하는 두 개의 테이블을 만들려고합니다. 내 오라클 데이터베이스에 Liquibase을 실행하면Liquibase의 자체 테이블에 대한 데이터 형식을 변경하는 방법

는 다음과 같은 테이블을 만들려고 :

java.sql.SQLSyntaxErrorException: ORA-00902: invalid datatype 

오라클은 TIMESTAMP 데이터 형식을 가지고 있지 않습니다

CREATE TABLE myuser.DATABASECHANGELOG (
    ID VARCHAR2(63) NOT NULL, 
    AUTHOR VARCHAR2(63) NOT NULL, 
    FILENAME VARCHAR2(200) NOT NULL, 
    DATEEXECUTED TIMESTAMP NOT NULL, 
    ORDEREXECUTED INTEGER NOT NULL, 
    EXECTYPE VARCHAR2(10) NOT NULL, 
    MD5SUM VARCHAR2(35), 
    DESCRIPTION VARCHAR2(255), 
    COMMENTS VARCHAR2(255), 
    TAG VARCHAR2(255), 
    LIQUIBASE VARCHAR2(20), 
    CONSTRAINT PK_DATABASECHANGELOG PRIMARY KEY (ID, AUTHOR, FILENAME) 
); 

을이 오류/예외가 (이후 버전의 오라클).

Liquibase가 다른 데이터 유형을 사용하도록 설정하거나 Liquibase가 이전 버전의 Oracle과 호환되고 있음을 알리는 방법이 있습니까?

Liquibase가 Oracle9i를 지원하지 않기 때문에 운이 없습니까?

EDIT : Oracle9i 에 타임 스탬프 데이터 유형이 있지만 데이터베이스가 8i 호환 모드로 실행 중이며 불행히도이를 변경할 수 없습니다. 문제는 여전히 남아 있습니다.

답변

2

제가 생각해 낸 해결책은 날짜 데이터 유형을 사용하여 DATABASECHANGELOG 테이블과 DATABASECHANGELOGLOCK 테이블을 수동으로 생성하는 것이 었습니다.

INSERT INTO myuser.DATABASECHANGELOGLOCK (ID, locked, lockgranted, lockedby) VALUES (1, 0, NULL, NULL); 
:

CREATE TABLE myuser.DATABASECHANGELOG (
    ID VARCHAR2(63) NOT NULL, 
    AUTHOR VARCHAR2(63) NOT NULL, 
    FILENAME VARCHAR2(200) NOT NULL, 
    DATEEXECUTED DATE NOT NULL, 
    ORDEREXECUTED INTEGER NOT NULL, 
    EXECTYPE VARCHAR2(10) NOT NULL, 
    MD5SUM VARCHAR2(35), 
    DESCRIPTION VARCHAR2(255), 
    COMMENTS VARCHAR2(255), 
    TAG VARCHAR2(255), 
    LIQUIBASE VARCHAR2(20), 
    CONSTRAINT PK_DATABASECHANGELOG PRIMARY KEY (ID, AUTHOR, FILENAME) 
); 

CREATE TABLE myuser.DATABASECHANGELOGLOCK (
    ID INTEGER NOT NULL, 
    LOCKED NUMBER(1) NOT NULL, 
    LOCKGRANTED DATE, 
    LOCKEDBY VARCHAR2(255), 
    CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID) 
); 

는 또한 잠금 테이블에 레코드를 삽입 할 필요가

관련 문제