2014-08-28 5 views
2

우리의 경우 liquibase는 기존 설치를 위해 databses를 업데이트하는 데 사용됩니다. 새로운 설치가 이미 최신 상태입니다.changeSet을 실행하기 전에 테이블이 이미 최신 버전인지 liquibase가 인식합니까?

새로운 설치가 있다고 가정합니다. 응용 프로그램을 시작하면 liquibase 변경 집합 (예 : 열의 유형 변경)이 강제 실행되지만 이전에 언급 한 것처럼 열이 이미 올바른 유형으로 작성되었으므로 업데이트 할 것이 없습니다.

liquibase는 테이블 열이 이미 최신 상태인지 또는 데이터베이스 변경 로그 테이블에 항목이 없으므로 변경 집합을 실행하려고합니까?

답변

3

Liquibase는 대상 데이터베이스의 데이터 사전을 분석 할 필요가없는 대체 접근법을 사용합니다. 따라서 DB 작업이 더 간단 해지고 플랫폼 간 상호 운용성이 향상됩니다.

특수 테이블 "DATABASECHANGELOG"는 대상 데이터베이스 인스턴스에 적용된 변경 집합의 레코드를 유지합니다. 또한이 테이블에는 런타임시 계산 된 체크섬이 포함되어있어 변경 내용이 liquibase 실행 사이에 변경되는지 여부를 결정합니다.

그래서 테이블 열의 유형을 변경하면 liquibase가이를 감지하여 기존 데이터베이스에 대해 실행할 때 오류가 발생할 수 있습니다. (분명히, 새로운 DB에서, 테이블은 예상대로 생성 될 것입니다).

마지막으로 changeset documentation에는 lqiuibase에 변경 집합을 데이터베이스에 두 번 이상 다시 적용하도록 알리는 두 개의 선택적 속성 ("runAlways"및 "runOnChange")이 설명되어 있습니다. 기존 데이터베이스에서 체크섬을 재설정하는 데 사용할 수있는 "clearCheckSums" command도 있습니다. 분명히 그런 옵션을 사용할 때 무엇을하는지 알 필요가 있습니다 :-)

+0

답장을 보내 주셔서 감사합니다. 나는 Liquibase가 DATABASECHANGELOG 테이블 내에서 그 상태를 유지하고 있음을 안다. 내 질문은 또 다른 : 우리는 새로운 설치가 있기 때문에 데이터베이스는 최신이지만 소프트웨어를 업데이트하기 위해 정의 된 변경 집합은 실행되지 않으며 이미있는 내용 만 업데이트하려고하므로 실행하면 안됩니다. 그러나 DATABASECHANGELOG 내의 실행에 대한 항목이 없습니다. Liquibase는 변경 집합이 이미 변경된 내용 만 변경하고 해당 명령문을 실행하지 않거나 구문을 실행하지 않을 것인지 여부를 감지합니까? 감사합니다 –

+2

@ ms.oe "changelogSync"liquibase 명령을 확인하십시오 : http://www.liquibase.org/documentation/command_line.html –

+0

Yap, 그게 내가 찾고있는거야! 감사합니다 –

관련 문제