2009-02-02 11 views
7

주로 소프트웨어 업그레이드/버그 수정을 위해 기존 데이터베이스 테이블, 저장 프로 시저, 함수 또는 매개 변수를 테이블에 변경합니다. 그리고 프로덕션이나 프리 프로덕션과 같은 다른 환경에 변경 사항을 적용 할 때 db 변경 사항 중 일부는 잊어 버릴 수 있습니다.데이터베이스 배포 우수 사례

일부 개발자는 데이터베이스 차이 분석 응용 프로그램을 사용하여 테스트 환경과 프로덕션 환경의 차이점을 확인합니다. 일부 개발자는 db와 같은 모든 변경 사항의 t-sql을 저장합니다.

프로덕션 환경에 db 변경 사항을 배포하기 위해 무엇을하고 있는지 궁금합니다. 왜 그 길을 선택하니? 또는 무엇을해야만 하는가?

답장을 보내 주셔서 감사합니다.

답변

8

소스 제어 아래에 db가 있습니다. 모든 변경 사항은 그런 식으로 추적됩니다. 다른 것은 악몽 일 것입니다. http://www.codeplex.com/sqlhost/Wiki/View.aspx?title=Database%20Publishing%20Wizard - - 셋업 및 데이터베이스, 데이터베이스 게시 마법사에 따라 http://blog.codinghorror.com/get-your-database-under-version-control/

- 정말 유용 할 수 있습니다

제프가 너무 거기에 기사를 가지고있다.

+3

어떻게 SC에 DB를 설치합니까? –

+0

내가 언급 한 마법사를 보면 데이터가 포함 된 모든 스크립트가 생성됩니다. 여기에는 SP가 포함되지만 더 관리하기 쉬운 파일을 별도로 마련했습니다. TortoiseSVN을 사용하여 해당 파일을 제어합니다. Jeff의 기사를 보면 더 좋은 방법이 있습니다. –

+0

만약 내가 할 수만 있다면 얼마나 많은 사람들이 다른 코드와 마찬가지로 SQL 변경 사항을 다루지 않는지에 대해 놀랄 것입니다. – HLGEM

1

SQL로 작성한 모든 변경 사항을 스크립팅하고 저장하는 것이 가장 좋은 방법입니다.

2

한 프로젝트에서 모든 DB 변경 사항이 DDL 스크립트에 있습니다. 이 스크립트에는 DB를 특정 버전으로 업그레이드하는 데 필요한 SQL 문이 들어 있습니다. 스크립트의 파일 이름에는 DB가 업그레이드 될 DB의 버전 번호 (_versionnumber.sql)가 포함됩니다.

다음으로 DB를 최신 버전으로 업그레이드하는 작은 응용 프로그램이 있습니다. 올바른 순서 (DB의 현재 버전 번호에서 마지막 스크립트 파일까지)로 해당 스크립트 파일을 실행합니다.

새 프로젝트의 경우 Migrator.NET을 사용합니다. 이 프레임 워크를 사용하면 DB 변경 사항을 C# 클래스로 작성할 수 있습니다. 프레임 워크에는 DB 변경 사항을 실행할 수있는 콘솔 응용 프로그램이 있으며 msbuild와 함께 사용할 수도 있습니다.

2

모든 데이터베이스 개체는 버전 제어 시스템에서 별도의 파일로 저장되어야합니다. 버전 관리 시스템이 예처럼 파일을 포함 할 수있다 : 당신이 어떤 DB 객체를 수정할 때마다

|- tables 
    |- employees.sql 
    |- contracts.sql 
|- packages 
    |- contract_api.sql 
|- functions 
    |- get_employee_name.sql 
...etc... 

는, 당신은 또한 버전 관리 시스템에서 적절한 SQL (DDL) 파일을 수정해야합니다. 예를 들어, contract_api 패키지를 수정하면 contract_api.sql 파일을 업데이트합니다. 이 파일은 수정되었으므로 연속 통합 엔진에 의해 설치 될 수 있습니다.

아시다시피 두 번 실행할 수없는 DDL 스크립트가 있습니다. 예를 들어, 'CREATE TABLE mytable ...'스크립트는 한 번만 실행될 수 있습니다. 그리고 시스템이 이미 프로덕션 환경에 있으면 'CREATE TABLE ...'스크립트 헤더에 'DROP TABLE mytable'문을 사용할 여유가 없습니다. 따라서 프로덕션 시스템의 경우 변경 사항 만 제공하는 델타 스크립트을 작성해야합니다. 이 경우 'ALTER TABLE mytable ADD COLUMN ...'문을 포함하는 employees_upd01.sql이라는 새 파일을 간단하게 작성할 수 있습니다.

|- tables 
    |- employees.sql 
    |- employees_upgr20091001.sql 
    |- employees_upgr20091004.sql 
    |- contracts.sql 
|- packages 
    |- contract_api.sql 
|- functions 
    |- get_employee_name.sql 
...etc... 

을 그리고 있기 때문에 이것은 OK입니다 :

시간 후 저장소는 다음과 같이 할 수는 데이터베이스에 오늘날의 '점진적 변화를 제공 할 필요가있을 때 1) - 오늘 수정 된 파일을 배포 2) 시스템을 새로 설치해야하는 경우 - 모든 스크립트를 순서대로 실행합니다 (예 : 첫째 employees.sql 다음 employees_upgr20091001.sql

각 DB 객체 버전 관리 시스템에서 별도의 파일이기 때문에, 당신은 모든 변경을 통해 좋은 제어 할 수 있습니다.