728x90
반응형
Valid Check Sum Error
- Liquibase가 ChangeLog 파일의 체크섬이 이전과 다르다고 인식.
해결방법 - 1 : check sum clear
- Liquibase가 저장한 체크섬을 지우고, 새롭게 ChangeSet를 적용하며 새로운 체크 섬 계산.
- 테스트 환경이나 개발 환경에 적합.
mvn liquibase:clearCheckSums
mvn liquibase:update
해결방법 - 2: changeLog 파일 분석
- Liquibase가 이미 적용한 changeLog 파일이 변경되었을 가능성 존재.
- 의도에 의한거라면 [ 해결방법 - 1], 실수에 의한거라면 복구
해결방법 - 3 : DTABASECHANGELOG 직접 업데이트
- DB에 DTABASECHANGELOG 테이블에 직접 수동으로 체크섬 값을 현재 체크섬 값으로 업데이트
- Liquibase를 이용해 DB 형상관리를 하는데 기록을 직접 조작하는건 좋지 않다고 생각됨.
해결방법 - 4 : DROP SCHEMA
- SCHEMA 를 모두 삭제하고 다시 처음부터 설정.
해결방법 - 5 : check sum rollback
- 문제가 되는 check sum rollback 진행
Liquibase 적용될 SQL 미리 확인하기
mvn liquibase:updateSQL
- ChangeLog 파일과 Check Sum 을 비교해서 실제 DB에 적용될 쿼리를 파일을 미리 확인 할 수 있다.
- 기본값으로는 target/liquibase/migrate.sql 파일로 생성된다.
migrate.sql
SET SEARCH_PATH TO public, "$user","public";
-- Lock Database
UPDATE databasechangeloglock SET LOCKED = TRUE, LOCKEDBY = 'KangMyoungGwanui-MacBookPro.local (10.106.8.69)', LOCKGRANTED = NOW() WHERE ID = 1 AND LOCKED = FALSE;
SET SEARCH_PATH TO public, "$user","public";
SET SEARCH_PATH TO public, "$user","public";
-- *********************************************************************
-- Update Database Script
-- *********************************************************************
-- Change Log: db/changelog/changelog-master.sql
-- Ran at: 6/13/24 9:49 AM
-- Against: gwanii@jdbc:postgresql://localhost:5432/test
-- Liquibase version: 4.28.0
-- *********************************************************************
SET SEARCH_PATH TO public, "$user","public";
UPDATE databasechangelog SET MD5SUM = '9:be2bd676f8bba6c615723de7c7cc020d' WHERE ID = '1' AND AUTHOR = 'mgkang1' AND FILENAME = 'classpath:db/changelog/changelog-master.sql';
UPDATE databasechangelog SET MD5SUM = '9:d5b86851a02f4e2f6810d280f1f3b156' WHERE ID = '2' AND AUTHOR = 'mgakng1' AND FILENAME = 'classpath:db/changelog/changelog-master.sql';
-- Changeset db/changelog/changelog-master.sql::3::mgkang1
SET SEARCH_PATH TO public, "$user","public";
ALTER TABLE test.test_sql_table ADD COLUMN new_column_2 VARCHAR(255);
INSERT INTO databasechangelog (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('3', 'mgkang1', 'db/changelog/changelog-master.sql', NOW(), 5, '9:58ccdc8894eec166820d1e6ac41488a1', 'sql', '', 'EXECUTED', NULL, NULL, '4.28.0', '8239764729');
-- Release Database Lock
SET SEARCH_PATH TO public, "$user","public";
UPDATE databasechangeloglock SET LOCKED = FALSE, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;
SET SEARCH_PATH TO public, "$user","public";
Liquibase History
- Liquibase History 즉, databasechangelog 테이블의 기록을 보여준다.
mvn liquibase:history
+---------------+-----------------+-----------------------------------+------------------+--------------+-----+
| Deployment ID | Update Date | Changelog Path | Changeset Author | Changeset ID | Tag |
+---------------+-----------------+-----------------------------------+------------------+--------------+-----+
| 8251851359 | 6/13/24 1:10 PM | db/changelog/changelog-master.xml | mgkang1 | 1 | |
+---------------+-----------------+-----------------------------------+------------------+--------------+-----+
| 8251851359 | 6/13/24 1:10 PM | db/changelog/changelog-master.xml | mgakng1 | 2 | |
+---------------+-----------------+-----------------------------------+------------------+--------------+-----+
| 8251851359 | 6/13/24 1:10 PM | db/changelog/changelog-master.xml | mgkang1 | 3 | |
+---------------+-----------------+-----------------------------------+------------------+--------------+-----+
- DB를 직접 참조하지 못하지만, 변경사항을 확인 할 경우 유용하게 사용 될 것 같다.
- ex: 배포 시 DB 변경 로그
Maven Liquibase 사용 시 ChangeLog File 참조 못하는 경우
- Maven 명령어를 통해 Liquibase를 사용 시 ChangeLog File을 참조하지 못하고 이전의 ChangeLog File을 참조하는 경우가 있다.
- 이 때는 새롭게 빌드를 진행하게 되면 ChangeLog FIle이 제대로 인식된다.
- target/classess 해당 리소스 경로를 참조해서 Liquibase가 파일을 읽어온다.
mvn -P local clean package liquibase:history liquibase:updateSQL -DskipTests
Liquibase Status
- git status와 비슷함
- staging에 올라와 있는 changeSet을 보여줌.
[INFO] ####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \\ / _` / __|/ _ \\ ##
## | |___| | (_| | |_| | | |_) | (_| \\__ \\ __/ ##
## \\_____/_|\\__, |\\__,_|_|_.__/ \\__,_|___/\\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## ##
####################################################
Starting Liquibase at 13:24:46 (version 4.28.0 #2272 built at 2024-05-16 19:00+0000)
[INFO] Set default schema name to public
[INFO] Parsing Liquibase Properties File liquibase.properties for changeLog parameters
[INFO] Executing on Database: jdbc:postgresql://localhost:5432/test
[INFO] Reading from databasechangelog
1 changeset has not been applied to gwanii@jdbc:postgresql://localhost:5432/test
db/changelog/changelog-master.xml::8::mgkang1
[INFO] Command execution complete
728x90
반응형
'1.프로그래밍 > DB' 카테고리의 다른 글
[DB] DB 형상 관리 - Liquibase Rollback (0) | 2024.09.03 |
---|---|
[DB] DB 형상 관리 - Liquibase Best Practices (5) | 2024.09.01 |
[DB] DB 형상관리 - Liquibase (0) | 2024.08.31 |
[DB] DB 형상 관리 - FlyWay (0) | 2024.08.30 |
[DataSource] DataSource 설정 정리 (0) | 2023.03.23 |