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
'programing' 카테고리의 다른 글
Docker의 env-file에 해당하는 Kubernetes (0) | 2023.07.29 |
---|---|
테스트 컨테이너, mariadb, 샤딩 구 및 플라이웨이 (0) | 2023.07.29 |
매크로의 타일(~)은 무엇을 의미합니까? (0) | 2023.07.29 |
주입된 모의 객체의 메서드에 전달된 인수를 Mockito가 캡처하는 방법은 무엇입니까? (0) | 2023.07.29 |
열려 있는 파일에서 read()를 두 번 호출할 수 없는 이유는 무엇입니까? (0) | 2023.07.29 |