2017-10-18 6 views
0

스키마 변경만으로 태그를 사용하여 롤백 할 수 있었지만 저장 프로 시저에서 혼합 할 때 작동하지 않는 시나리오가 발생했습니다.
Oracle 데이터베이스에 대해 SQL 변경 로그를 사용하고 있습니다.태그가 runOnChange 변경 집합에 적용된 경우 태그에 롤백이 작동하지 않습니다.

릴리스 1.0.0
나는 테이블을 생성 포함하는 스크립트 R-1.0.0.sql 있고, 저장 프로 시저를 생성하는 스크립트 proc.sql : 여기에 시나리오입니다. proc 변경 집합은 runOnChange = true로 태그가 지정됩니다.
내가 변화와 행복, 그리고 DATABASECHANGELOG의 표는 내가 결국 태그 1.0.0
으로 데이터베이스 태그 :
1 - R-1.0.0.sql-EXECUTED
2 - proc.sql- EXECUTED- (태그) 1.0.0

릴리스 2.0.0
나는 열 이름을 변경 스크립트 R-2.0.0을 가지고 있고, 또한, 새로운 열 이름으로 proc.sql을 업데이트했습니다. 이를 실행 한 후, DATABASECHANGELOG은 :
1 - R-1.0.0.sql-EXECUTED
4 - proc.sql-RERAN- (태그) 1.0.0
3 - - R-2.0.0.sql EXECUTED

당신은 다시 만났 시저 스크립트는 새 번호를 가지고 있음을 알 수 있지만, 나는 1.0.0에 태그를 롤백하려면 지금 경우 여전히 1.0.0 태그

를 유지, 롤백 명령은 아무것도하지 않는 태그 때문에 1.0.0은 로그의 최신 변경 사항에 해당합니다.

이것은 의도적으로 설계된 것 같습니다. 이 작업을 수행하기 위해 변경 사항을 구성하는 다른 방법이 있습니까?

+0

이 스레드에 따르면 저장 프로 시저에 대해 다른 변경 로그 테이블을 지정할 수 있어야합니다. http://forum.liquibase.org/topic/configurable-databasechangelog-table-name. 나는 아직도 커맨드 라인을 알아 내려고 노력 중이다. –

답변

0

나는 위에 링크 된 기사를 기반으로 한 해결책을 찾았습니다. 내 환경의 제약으로 인해 Java 환경 변수를 쉽게 전달할 수있는 방법이 없었습니다.

그것은 Liquibase 배치 파일을 사용하는 변수에 매개 변수를 설정
@echo off 

IF NOT DEFINED JAVA_OPTS set JAVA_OPTS= 
set JAVA_OPTS=-Dliquibase.databaseChangeLogTableName=STOREDPROCCHANGELOG %JAVA_OPTS% 

liquibase %* 

는 다음 배치 파일 통과를 호출합니다 나는 사용자 지정 배치 파일을 설치 결국 다음과 같은 내용으로 (나는 그것을 Liquibase - sp.bat 이름) 전체 명령 행
배포하는 동안 "liquibase"를 호출하여 스키마 변경 사항을 적용한 다음 "liquibase-sp"를 호출하여 저장된 proc 변경 사항을 적용합니다. 스키마 변경 사항은 기본 DATABASECHANGELOG 테이블에 기록되고, 변경 사항은 별도의 STOREDPROCCHANGELOG 테이블에 기록됩니다. 모든 태깅은 "liquibase"를 호출하여 기본 테이블을 사용하고 스키마 변경 사항에만 버전으로 태그가 추가됩니다.

롤백은 내가 언급 한 시나리오에서 작동합니다.

릴리스 2.0.0을 변경하지 않으면 추가 문제가 발생할 것으로 예상됩니다. 2.0.0으로 데이터베이스에 태그를 지정하면 마지막 변경 집합의 태그가 1.0.0에서 2.0.0으로 수정됩니다. 이는 1.0.0 태그로의 모든 롤백이 실패 함을 의미합니다. 나는 걱정하지 않는다. 거기에 절차 적 해결 방법이있다.