programing

Liquibase 업데이트 오류

coolbiz 2023. 7. 29. 13:08
반응형

Liquibase 업데이트 오류

저는 Liquibase를 사용하여 DB에 몇 개의 테이블을 만들려고 합니다.

일부 배경:로컬 h2 데이터베이스에서 동일한 changelog.xml 파일을 실행했는데 성공적으로 작동했습니다.그리고 아래 오라클 데이터베이스, 사용자 이름, 비밀번호, 드라이버를 다람쥐로 테스트해보니 성공적으로 연결되었습니다.그래서 저는 제가 리퀴브 베이스 문제에 직면해 있다고 꽤 확신합니다.저는 광범위한 구글 검색을 했지만 SO나 다른 곳에서 저에게 도움이 될 만한 것을 찾지 못했습니다.

명령 프롬프트에 다음을 입력했습니다.

C:\>java -jar liquibase-core-2.0.5.jar --driver=oracle.jdbc.OracleDriver
--classpath=ojdbc6-11.2.0.3.0.jar --changeLogFile=changelog.xml 
--url="jdbc:oracle:thin:@myDatabase"
--username=myUsername --password=myPassword --logLevel=debug update

반환된 항목:

DEBUG 9/30/13 3:09 PM:liquibase: Unable to load/access Apache Derby driver class
to check version
DEBUG 9/30/13 3:09 PM:liquibase: Connected to myUsername@jdbc:oracle:thin:@myDatabase
DEBUG 9/30/13 3:10 PM:liquibase: Executing QUERY database command: SELECT LOCKED
FROM DATABASECHANGELOGLOCK WHERE ID=1 FOR UPDATE
Liquibase Update Failed: Empty result set, expected one row
SEVERE 9/30/13 3:10 PM:liquibase: Empty result set, expected one row
liquibase.exception.LockException: liquibase.exception.DatabaseException: Empty
result set, expected one row
    at liquibase.lockservice.LockService.acquireLock(LockService.java:121)
    at liquibase.lockservice.LockService.waitForLock(LockService.java:61)
    at liquibase.Liquibase.update(Liquibase.java:102)
    at liquibase.integration.commandline.Main.doMigration(Main.java:825)
    at liquibase.integration.commandline.Main.main(Main.java:134)
Caused by: liquibase.exception.DatabaseException: Empty result set, expected one
row
    at liquibase.util.JdbcUtils.requiredSingleResult(JdbcUtils.java:124)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:
159)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:
167)
    at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:
163)
    at liquibase.lockservice.LockService.acquireLock(LockService.java:96)
    ... 4 more

여기서 답을 찾았습니다: https://forum.liquibase.org/t/message-regarding-an-empty-result-set-for-databasechangeloglock/1487/2

데이터베이스 변경 로그락 테이블을 삭제하여 해결했습니다.

DATABASE CHANGE LOGLOCK이 비어 있으면 항상 오류가 나타납니다.(이 표의 레코드를 실수로 제거한 후 이 문제가 발생했습니다.)

제가 찾은 해결책은 간단했습니다.

ID=1, LOCKED=0, LOCKGRANTED=dll, LOCKBY=dll의 더미 행만 삽입합니다.

바로 그거야!

postgresql 10.4를 사용하여 liquibase를 사용하려고 할 때 동일한 코어 예외 문제가 발생했습니다.

Caused by: liquibase.exception.DatabaseException: Expected single row from 
liquibase.statement.core.GetViewDefinitionStatement@1de5f25 but got 0`

우리는 jdbc 드라이버에 문제가 있는 것 같습니다.

솔루션은 jdbc 드라이버를 9.3-1102-jdbc41에서 9.4-1202-jdbc41로 업그레이드하는 것이었습니다.

나의 경우 문제는 내가 사용한 것이었습니다.

<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.1-901-1.jdbc4</version>
</dependency>

대신에

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.5</version>
</dependency>

Postgre용SQL 10.6.그것으로 문제가 해결되었습니다.

언급URL : https://stackoverflow.com/questions/19119115/liquibase-update-error

반응형