SQL 테이블의 변경 사항을 어떻게 버전 / 추적합니까?


16

모두가 로컬 테이블 및 개발 테이블을 변경하는 개발자 팀에서 작업 할 때 모든 변경 사항을 어떻게 동기화합니까? 모두가 SQL 변경 사항을 유지하는 중앙 로그 파일? 로컬 테이블을 최신 버전으로 가져 오기 위해 개발자가 실행할 수있는 개별 테이블 .sql 파일 인 alter table 문을 추적하는 Wiki 페이지? 나는 이러한 솔루션 중 일부를 사용했으며, 함께 작동하는 우수한 솔루션을 함께 제공하려고 노력하고 있으므로 귀하의 아이디어에 감사드립니다.

답변:


4

내가 사용하는 코드 기반의 데이터베이스 마이그레이션 도구 및 소스 제어에서 마이그레이션 코드를 유지한다.

타임 스탬프를 버전 번호로 사용하면 원하는 수의 개발자가 대부분 자유롭게 마이그레이션을 추가 할 수 있으며 모든 데이터베이스 복사본에 대해 자신있게 마이그레이션 도구를 실행할 수 있습니다.

이전 버전에서는 SQL 스크립트를 사용했지만 코드 기반 접근 방식은 하나의 논리적 "스팟"에 있고 단일 명령으로 필요한 모든 스크립트를 실행할 수 있기 때문에 훨씬 쉽게 작업 할 수 있습니다.


4

나는 그것을하지 않지만 일부 개발자는 소스 제어하에 SQL 스크립트 모음을 유지 관리합니다.이 스크립트는 실행될 때 테스트 목적으로 데이터베이스 테이블을 다시 만들고 프로덕션 목적으로 빈 데이터베이스를 만들 수 있습니다.

필드 나 테이블을 추가 또는 제거하거나 데이터 변환을 수행해야하는 경우 동일한 기술을 사용하여 고객 사이트에서 데이터베이스 버전을 지정할 수 있습니다.


3

버전 관리 및 지속적인 통합에서 스크립트를 빌드하여 확인

나를 위해 일한 한 가지 접근법은 각 개발자가 자신이 좋아하는 것을 할 수있는 자체 스키마로 작업하는 것입니다. 이 스키마는 파괴 가능했으며 모든 개발자가 기여한 버전 제어 스크립트 세트에서 가져온 테스트 데이터로 채워졌습니다.

야간 연속 통합 빌드는 최신 버전의 모든 스크립트를 가져 와서 응집성있는 테스트 데이터베이스를 구축하려고했습니다. 그런 다음 응용 프로그램에 대해 일련의 통합 및 기능 테스트를 실행하여 현재 스키마가 현재 릴리스 후보와 일치하는지 확인합니다.

이 길을 시작하기 전에는 상당히 견고한 데이터베이스 디자인이 있었고 DBA는 개발자가 비정규 화 및 기타 공포에 열중하지 않도록 항상주의를 기울였습니다.

스크립트 변경이 즉시 명백해 졌기 때문에 버전 관리가 크게 도움이되었습니다. 또한 데이터베이스 VERSION의 전체 상태를 식별하기 위해 데이터베이스 테이블을 사용했습니다. 이것은 간단한 정수 시퀀스였으며 특정 응용 프로그램에 연결되지 않았습니다.

전반적으로 잘 작동했으며 개발자는 다른 계층에 영향을 미치지 않고 항상 자신의 스키마를 롤백 할 수 있기 때문에 지속성 계층을 변경하는 것을 두려워하는 것을 중단했습니다.


2

MS 상점에있는 경우 Visual Studio 2010에는 멋진 데이터베이스 버전 제어 도구가 있으며 두 데이터베이스 간의 차이점을 기반으로 변경 / 배포 스크립트를 생성 할 수도 있습니다.


2

schemata 및 기타 SQL 스크립트를 버전 제어 상태로 유지하는 것 외에 다른 유용한 방법은 실제 DB에 '스키마 버전'테이블유지하는 것 입니다.

create table schema_migrations (
    `appliedAt` timestamp not null default CURRENT_TIMESTAMP,
    `migrationCode` varchar(256) not null,
    `extraNotes` varchar(256),
    primary key (`migrationCode`)
)


1

내가 사용하는 접근법은 매개 변수에 대한 하나의 테이블을 제공하는 것입니다. 이 테이블에는 데이터베이스가있는 버전에 대한 하나의 이름 / 값 쌍이 있습니다. 이렇게하면 두 가지 이점이 있습니다. 데이터베이스 수정 프로그램이 응용 프로그램을 통해 적용되었는지 확인하는 방법이 있으며 해당 값을 SQL 스크립트에 사용할 수 있습니다.

SQL 스크립트는 새 테이블을 작성하고 열을 변경하며 이전 버전에서 스크립트를 승격시키기 위해 데이터베이스에 필요한 모든 작업을 수행합니다. 이상적으로는 롤백 스크립트가 있지만 대부분은 그렇지 않습니다.

BTW,이 전체 접근 방식은 Ruby on Rails의 일부로 자동화되었으며 롤백 스크립트가 포함되어 있습니다. 나는 그 아이디어를 좋아하지만 모든 프레임 워크가 그런 것은 아닙니다. Ruby on Rails를 사용하지 않을 때는 위에서 설명한 방법을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.