데이터베이스 마이그레이션: 워크플로우 및 인프라
호환성 창, 잠금 및 리소스 예산, 재개 가능한 백필, 검증, 보호된 컷오버, 롤포워드 복구를 포함한 확장-마이그레이션-계약 데이터베이스 워크플로우를 정의합니다.
패키지 상태: 참조 컨텍스트가 인간 검토를 위해 준비됨. 계약 및 테스트 시나리오는 완성되었으나, 이를 통과한 채택 구현체가 있다고 주장하지는 않습니다.
결정
코드가 의존하기 전에 이전 버전과 호환되는 스키마 확장을 배포하고, 멱등성 체크포인트 작업으로 데이터를 마이그레이션하며, 관찰 가능한 게이트를 통해 읽기/쓰기를 차단하고, 롤백 호환성 기간이 만료된 후에만 오래된 구조를 제거합니다.
범위
- 마이그레이션 소유권, 스키마 변경, 호환성, 잠금, 백필, 이중 동작, 검증, 컷오버, 롤백, 계약 정리 및 증거.
- 롤링 애플리케이션 배포가 있는 관계형 프로덕션 데이터베이스.
- 온라인 및 유지보수 창 프로필.
이 블록 외부
- 모든 DDL 작업을 모든 데이터베이스/버전에서 온라인으로 가장하기.
- 파괴적인 프로덕션 변경에 대한 기본 복구 수단으로 다운 마이그레이션 사용.
계약
- 각 마이그레이션은 데이터베이스/버전 가정, 예상 테이블 크기, 잠금 클래스, 트랜잭션 동작, 리소스 예산, 소유자 및 복구 계획을 선언합니다.
- 확장은 이전 코드가 읽을 수 있고 선택된 호환성 경로에서 쓸 수 있어야 합니다.
- 백필은 멱등성, 경계, 체크포인트, 속도 제한이 있으며, 손대지 않은 데이터와 의도적으로 null인 데이터를 구분합니다.
- 이중 쓰기 또는 변환은 명명된 권한과 조정이 있으며, 두 필드가 무한히 독립적인 진실이 되지 않습니다.
- 컷오버 게이트에는 데이터 동등성, 오류, 지연, 복제본 지연, 애플리케이션 버전 커버리지가 포함됩니다.
- 계약 변경은 롤백 창 이후에만 발생하며, 지원되는 코드가 더 이상 이전 스키마를 사용하지 않는 증거가 있어야 합니다.
구현 지침
- 승인 전에 생성된 SQL과 데이터베이스 문서를 정확한 엔진/버전으로 검사합니다.
- 마이그레이션 잠금을 사용하여 한 번에 한 실행기만 버전을 적용하도록 하고, 애플리케이션 시작은 긴 백필과 독립적으로 유지합니다.
- 엔진이 지원하는 온라인/동시 인덱스 생성 방법을 사용하고 트랜잭션 제한을 고려합니다.
- 파괴적 실패에 대해서는 롤포워드 복구 및 복원 테스트된 백업을 선호합니다.
실패 처리 및 안전장치
- 잠금 획득이 예산을 초과하면 무한 대기 없이 중단합니다.
- 백필 오류, 지연 또는 부하가 임계값을 넘으면 내구성 체크포인트에서 안전하게 일시 중지합니다.
- 컷오버 실패 시 두 표현이 호환되는 동안 권한을 다시 전환하며 데이터를 삭제하지 않습니다.
검증 및 운영
- 잠금 대기/지속 시간, 명령문 지속 시간, 배치당 행 및 오류 수, 복제본 지연, 동등성 불일치, 컷오버 오류, 이전 필드 읽기/쓰기 등을 측정합니다.
- 프로덕션과 유사한 크기로 리허설하고 쿼리 계획을 검사합니다.
- 사고 상관을 위해 마이그레이션, 애플리케이션, 스키마 버전을 기록합니다.
이 패키지의 실행 가능한 예제들은 픽스처 및 수용 계약입니다. 컬렉션 루트에서
python tools/validate.py를 실행하여 패키지 구조와 메타데이터를 확인한 후,
대상 저장소에서 시나리오를 구현하고 실행하세요.
채택 가정
example.yaml의 이름과 숫자 값은 채택 프로필이며, 보편적 기본값이 아닙니다.- 채택 팀은 행위자, 데이터 클래스, 오류 어휘 및 소유권을 자사 시스템에 맞게 매핑해야 합니다.