2011-12-23 5 views
0

우리는 tfs2010에 asp.Net vb.net 2008 프로젝트를 가지고 있습니다. 프로젝트는 하나의 메인 브랜치 (branch)를 가지고 있으며, 어떤 릴리즈를 위해 우리는 마침내 전개되는 새로운 feature 브랜치를 생성합니다. 포스트 프로덕션 배포에서는 브랜치를 다시 메인 브랜치에 병합합니다.릴리스 기반 db 프로젝트를위한 분기 전략

이제는 SQL을 관리하기위한 db 프로젝트도 추가하고 있습니다. 문제는 차동 스크립트를 버전 제어하는 ​​방법입니다. db 프로젝트에는 처음부터 thep 프로젝트를 전개해야하지만 프로젝트는 이미 실행 중이면 모든 작성 스크립트가 포함되어 있습니다. 그래서 이제 새로운 릴리스 나 핫픽스에는 일반적으로 alter 스크립트 나 change 스크립트가 포함됩니다.

작성 스크립트와 릴리스 별 변경 스크립트를 잘 관리하는 방법에 대한 아이디어가 있습니까?

+1

데이터베이스 프로젝트에 대해 자세히 알아야합니다. 그것들은 스크립트를 작성하는 것이 아니며 변경 스크립트가 빠져 있지도 않습니다. –

답변

0

지난 몇 년간 우리가 해왔 던 방식은 데이터베이스를 특정 버전에서 다른 버전으로 업데이트 할 수있는 데이터베이스 업데이트 스크립트를 사용하는 것입니다.

우리가 적용하는 업데이트 스크립트에는 테이블 변경과 데이터 변경이라는 두 가지 유형이 있습니다.

테이블 변경 사항은 직접 작성하여 기록되며 오류없이 동일한 데이터베이스에 대해 스크립트를 여러 번 안전하게 실행할 수 있도록 설계되었습니다. 예를 들어, 표에 표가없는 경우에만 표를 추가합니다. 이 방법을 사용하면 특정 버전에서 다음 버전으로 업그레이드하는 것뿐만 아니라이 버전 별 스크립트를 핫픽스 적용에 사용할 수 있습니다. 핫픽스는 단순히 파일 끝에 추가 항목으로 적용됩니다.

이 접근 방식에는 개발자 규율이 필요하지만 정확하게 구현되면 4 가지 주요 개정판과 4 년이 지난 데이터베이스를 최신 버전으로 업데이트 할 수있었습니다.

데이터가 변경된 경우 Red Gate의 도구, 특히 SQL Data Compare의 도구를 사용합니다.

데이터베이스 프로그래밍 기능 (저장 프로 시저, 트리거 등)에 관한 한 우리는 실행될 때 현재 항목을 모두 삭제 한 다음 현재 버전을 다시 추가하는 스크립트 하나를 유지합니다. 이 프로세스는 모든 프로그래밍 가능성 요소에 대해 엄격한 명명 규칙을 사용하여 활성화됩니다 (저장 프로 시저의 이름은 s_prefix_로 시작하고 fn_prefix_로 시작하는 함수 등).

올바른 스크립트 버전이 적용되도록 데이터베이스의 현재 버전을 기록하기 위해 데이터베이스에 저장되는 작은 버전 테이블 (일반적으로 1 행)을 추가했습니다. 이 테이블은 적용될 때 테이블 갱신 스크립트에 의해 갱신됩니다. 또한 처음부터 데이터베이스를 생성하기 위해 적용된 스크립트에서이 테이블을 업데이트합니다.

마지막으로 스크립트를 적용하기 위해 현재 데이터베이스 버전과 데이터베이스의 현재 버전을 기반으로 적용 할 스크립트를 지정하는 매니페스트를 읽는 작은 도구를 만들었습니다.

우리가 문제를 두 가지 버전, 3, 4,이 업데이트 스크립트, update_v3.sql 및 update_v4.sql가이 있다고 가정 : 예를 들어

. 우리는 하나의 초기 구조 스크립트 인 tables.sql과 하나의 프로그래밍 가능 스크립트 인 stored_procs.sql을 가지고 있습니다. 그 가정을 감안할 때, 매니페스트 같이 보일 것입니다 :

tables.sql> 때 버전 = 0 update_v3.sql>시에서 major_version < = 3 update_v4.sql>시에서 major_version < = 4 stored_procs.sql> always

이 도구는 현재 버전을 평가하고 매니페스트에 지정된 순서대로 스크립트를 적용하여 알려진 방식으로 데이터베이스가 항상 업데이트되도록합니다.

이 정보가 도움이되기를 바랍니다.

관련 문제