2010-05-25 5 views
4

내 회사는 대규모 .NET 서비스 지향 솔루션을 제공합니다. 서비스 계층은 수백 개의 테이블과 저장 프로 시저로 구성된 T-SQL 백엔드와 상호 작용합니다. C# 코드는 버전 관리 (SVN)에 있지만 저장 프로 시저와 스키마는 없습니다.소스 제어에서 저장 프로 시저 - 빌드/배포 프로세스 자동화

이 편리한 상단 관리의 많은 로비 후에, 나는 다음과 같은 목표를 달성하기 위해 (존재하지 않는) 빌드/배포 프로세스를 검토 하였다 :

  1. 장소 스키마 및 소스 제어에서 저장 프로 시저를.
  2. 빌드/배포 프로세스를 자동화합니다.

내가 this post에서 허용 대답의 전략에 따라 진행 좋아하지만 추가 질문이있을 것입니다 :

  1. 내 빌드 서버로 허드슨을 사용하고 싶습니다. 이것은 C#/SQL 솔루션을위한 합리적인 선택입니까? 더 나은 대안을 탐색해야합니까?

  2. 소스 제어에서 모든 트리거, 저장 프로 시저, 스키마 등을 가정하고 이들이 개별 파일로 스크립팅되어 있다고 가정 할 때 빌드 간 스크립트를 어떻게 생성합니까? 이게 뭐야? (SQL Server는이 작업을 자동으로 수행하지만 하나의 거대한 스크립트를 생성합니다.)

  3. 클라이언트에서 업데이트를 수행하는 워크 플로는 어떻게 생겼습니까? 즉 기존 테이블 데이터를 유지해야합니다. 스키마 변경 사항을 롤백하려면 어떻게합니까?

  4. 나는 유일한 프로그래머입니다. 다른 몇 명의 의사 기술 직원이 SQL Management Studio에서 직접 변경을 원합니다. 다른 사람들이이 솔루션을 준수 할 것으로 기대하는 것이 현실적입니까 - 어떻게이를 시행 할 수 있습니까?

도움을 주셔서 감사합니다.

편집 :

불행하게도 우리가 TFS를 사용할 수 없습니다. 하지만 Visual Studio 2008/2010을 데이터베이스 프로젝트 구성 요소와 함께 사용할 수 있습니다. 따라서 스크립트 기반 솔루션을 해킹해야 할 것 같습니다. 모든 제안/업데이트는 높이 평가됩니다.

답변

4

T-SQL 배포를위한 Microsoft 스택의 표준 예제는 Visual Studio 데이터베이스 프로젝트 배포 프로세스입니다. 이 과정에서 데이터베이스 스키마, 프로 시저, 올바른 할당 및 거의 모든 것이 VSDB 프로젝트의 조각으로 저장됩니다. 즉, SQL 정의 파일로 저장되고 소스 제어에서 확인됩니다 (SVN은 유효합니다). '빌드'프로세스는 .dbschema 파일을 전달합니다.이 파일은 전체 VSDB 프로젝트의 합성을 포함하는 파일입니다 (영광스러운 XML 파일 임). 그런 다음 .dbschema 파일은 배포 서버 (개발 서버, QA 유효성 검사 서버, 생산 서버) 및 '배포 된'서버로 전달됩니다. 배포는 vsdbcmd 도구를 통해 수행됩니다.이 도구는 배포 서버와 .dbschema 파일간에 정교한 차이를 실행하고 .dbschema 파일의 내용에 서버를 '정렬'하며, CREATE/ALTER/DROP 문을 적절하게 사용하여 대상 데이터베이스/서버에 존재합니다.

연속적으로 통합 된 프로세스는 야간 빌드를 시작하고 .dbschema를 테스트 SQL 서버에있는 다른 산출물과 함께 삭제하고 배포합니다.dbschema를 실행 한 다음 빌드 유효성 검사 테스트를 실행합니다. 마지막에 좋은 점이 있으면 빌드 및 QA 유효성 확인 결과물 인 일일 'drop'이 삭제됩니다. 프로덕션 환경에 완벽하게 통합 할 수는 있지만 일반적으로 중앙 서버, 프로덕션 서버에서 예기치 않은 다운 타임의 위험이 있으므로 피할 수 있습니다. 그러나 '프로덕션'은 수백/수천 대의 배포 된 서버를 의미하는 다중 서버 환경에서는 일반적으로 프로덕션 환경에 완벽하게 통합되고 배포됩니다.

이제는 위의 단계에서 설명하는 모든 것을 Ant 빌드 단계로 다시 작성해야하며 다음 10 년 동안 VS DB를 다시 작성해야한다는 점을 제외하면 Hudson을 사용하여 배포하려고합니다. 프로젝트 개념 (예 : .dbschema 파일 및 vsdbcmd와 같은 도구) VSDB와 TFS 기반의 서버 라이센스를 구입하는 데 투자 할 수있는 사람이 아니지만 OSS에서 사용할 수있는 엔드 투 엔드 솔루션에 대해 알지 못합니다. VS 2010에서는 데이터베이스 프로젝트가 Standard Edition에 있다고 생각합니다. VS 2008을 사용하면 하이 엔드 라이선스가 필요합니다.

SSMS에서 샷건을 타는 사용자는 DDL triggers을 사용하지 못하게 할 수 있습니다. Event Notifications을 사용하여 추적하거나 C2 compliant audit을 사용하여 완전히 감사 할 수 있습니다.

+1

"SSMS에서 총을 타면서 변경을 수행하는 사용자는 DDL 트리거를 사용하지 못하게 할 수 있습니다. 이벤트 알림을 사용하여 추적하거나 C2 준수 감사를 사용하여 완전히 감사 할 수 있습니다." 또한 소스 컨트롤에있는 내용으로 변경 내용을 덮어 쓸 수 있습니다. 그들이 멈출 때까지 오랫동안 걸리지 않을 것입니다. 또한 그들의 뚜렷한 권리를 가져라. 그래서 prod에 대한 모든 변경은 depolyment 스크립트를 통해 전개되어야한다. – HLGEM

+0

/dbs 사이에 diff를 실행하는 문제는 여러 클라이언트가 자체 저장 프로 시저를 적극적으로 추가하는 것입니다 (때로는 자체 수정도 가능함). 내 자동화 프로세스에서 원샷 업데이트를 수행하고 싶습니다. 그 후에는 아무 것도 보증하지 않습니다. 그래서 나는 MS 툴셋 안에 있어야만하는 것처럼 보입니다. 제가 언급 한 포스트는 이걸 벗어나려고했던 것 같아요. 도와 줘서 고마워. – Alex

+0

개인적으로 저는 http://rusanu.com/2009/05/15/version-control-and-your-database에 설명 된 것처럼 버전이있는 스키마와 업그레이드 스크립트를 사용합니다. 내 제품에서는 SQL 스크립트를 리소스로 응용 프로그램에 추가하고 업그레이드 맵 (즉,이 스크립트를 실행하여 버전 v1.3에서 v1.4로 업그레이드 한 다음 * 해당 스크립트를 업그레이드하도록 실행) v1.4에서 v1.5로, 그 다음에 * 현재까지 스크립트에 이르기까지). vsdbcmd 및 다른 diff 기반 도구가 특히 큰 테이블에 대한 새 버전의 배포를 처리하는 방법을 좋아하지 않기 때문에이 방법을 VS DB 프로젝트보다 선호합니다. –