2008-08-02 14 views
23

두 SQL Server, 특히 SQL Server 2005간에 데이터베이스 배포를 어떻게 관리하는지 궁금합니다. 이제 개발과 라이브가 있습니다. 이것은 buildscript (표준 Windows 배치, 이러한 스크립트의 현재 복잡성으로 인해 PowerShell로 전환 할 수도 있음)의 일부이므로 Enterprise Manager/Management Studio Express는 중요하지 않습니다.테스트에서 라이브 SQL Server 데이터베이스 배포

.mdf 파일을 복사하여 첨부 하시겠습니까? 이진 데이터로 작업 할 때는 항상 조심 스럽습니다. 개발 및 라이브가 동일한 버전의 서버를 항상 실행해야하더라도 호환성 문제 인 것 같습니다.

또는 T-SQL의 "EXPLAIN CREATE TABLE"이 부족하다는 점을 감안할 때 기존 서버를 대상 서버에서 실행할 수있는 SQL 스크립트로 내보내는 작업을 수행합니까? 그렇다면 지정된 데이터베이스를 SQL 쿼리에 자동으로 덤프하고 명령 줄에서 실행되는 도구가 있습니까? (다시, Enterprise Manager/Management Studio Express는 계산하지 않습니다).

마지막으로 라이브 데이터베이스에 이미 데이터가 포함되어 있으므로 배포시 모든 테이블을 만드는 것이 아니라 구조의 차이를 확인하고 대신 라이브 테이블을 변경하고 데이터 확인/변환이 필요할 수도 있습니다. 기존 필드가 변경됩니다.

이제는 Red Gate 제품에 대해 많은 것을 알지만 취미 프로젝트의 경우 가격이 약간 비쌉니다.

따라서 SQL Server 데이터베이스를 테스트에서 라이브로 자동 배포하는 데 사용하는 것은 무엇입니까?

답변

19

내 DDL (만들기/변경/삭제) 문을 손으로 코딩하여 텍스트 파일로 내 .sln에 추가하고 일반 버전 관리 (Subversion을 사용하지만 수정 컨트롤이 작동해야 함) . 이 방법을 사용하면 버전 관리의 이점을 얻을 수있을뿐 아니라 dev/stage에서 실시간으로 업데이트하는 것은 코드 및 데이터베이스와 동일한 프로세스입니다. 태그, 분기 등은 모두 동일하게 작동합니다.

그렇지 않으면 회사가 당신을 위해 그것을 구입하지 않으면 레드 게이트가 비싸다고 동의합니다. 당신이 당신을 위해 그것을 사는 회사를 얻을 수 있다면, 정말로 가치가 있습니다!

+1

+1 SSMS (또는 SQL2000의 Enterprise Manager)에서 디자인 GUI를 사용하여 변경하지만 "변경 스크립트 생성"아이콘을 사용하여 다음 릴리스에 대한 변경 스크립트를 저장하는 스크립트를 생성합니다. 하루를 잊어 버릴 경우를 대비하여 "스크립트를 자동으로 변경"체크 상자가 있습니다! – Kristen

14

내 프로젝트의 경우 SQL에서 REd Gate와 Microsoft의 데이터베이스 게시 마법사를 번갈아 가며 무료로 다운로드 할 수 있습니다. here.

마법사가 SQL Compare 또는 SQL Data Compare만큼 매끄럽지는 않지만 트릭을 수행합니다. 한 가지 문제는 생성하는 스크립트가 한 번에 여러 가지 재 배열 및/또는 편집이 필요할 수 있다는 것입니다.

위쪽면에서 무료 도구로 나쁘지 않은 스키마와 데이터를 이동할 수 있습니다.

3

Quest Software의 Toad에는 이러한 종류의 관리 기능이 내장되어 있습니다. 기본적으로 두 번의 클릭으로 두 개의 스키마를 비교하고 서로 동기화 스크립트를 생성합니다.

물론 Sql Server를 비롯하여 널리 사용되는 대부분의 데이터베이스에 대한 버전이 있습니다.

4

나는 소스 제어에서 유지하는 텍스트 파일에 테이블을 만들고 변경하기 위해 모든 SQL 스크립트를 유지함으로써 Karl과 동일한 방식으로 작동합니다.실제로 스크립트가 실행해야 할 ALTER를 결정하기 위해 실제 데이터베이스를 검사해야하는 문제를 피하기 위해 나는 보통 다음과 같이 작동합니다.

  • 첫 번째 버전에서는 모든 SQL 스크립트 , 모든 테이블을 CREATE로 처리합니다. 이것은 테스트 중에 테이블을 많이 떨어 뜨리고 읽는 것을 의미하지만, 프로젝트 초기에는별로 중요하지 않습니다. (어쨌든 제가 그 시점에서 사용하고있는 데이터를 해킹하고 있기 때문에).
  • 모든 후속 버전에서 두 가지를 수행합니다. 그 버전의 ALTER 만 포함하는 업그레이드 SQL 스크립트를 보관할 새 텍스트 파일을 만듭니다. 원본으로 변경하고 신선한 데이터베이스 스크립트도 만듭니다. 이 방법은 업그레이드 스크립트 만 실행하지만 DB를 다시 작성해야한다면 100 개의 스크립트를 실행할 필요가 없습니다.
  • DB 변경 사항을 배포하는 방법에 따라 일반적으로 DB 버전을 보유하고있는 DB에 버전 표를 넣을 것입니다. 그런 다음 어떤 스크립트를 실행할지에 대한 인간의 결정을 내리기보다는 작성/업그레이드 스크립트를 실행하는 코드가 무엇을 실행할지 결정하기 위해 버전을 사용합니다.

테스트에서 프로덕션으로 이동하는 부분이 데이터 인 경우 도움이되지 않지만 구조를 관리하고 값 비싼 DB 관리 패키지 비용을 지불하지 않으려면, 정말 그리 어렵지 않습니다. 나는 또한 DB의 정신적 추적을 유지하는 좋은 방법이라는 것을 발견했습니다.

2

나는 모든 것을 스크립팅하는 것이 최선의 방법이며, 내가 직장에서 옹호하는 것에 동의합니다. DB 및 객체 생성에서 조회 테이블 채우기에 이르기까지 모든 것을 스크립트해야합니다.

UI에서만 수행하는 작업은 번역되지 않으며 (특히 첫 번째 배포에서는 변경 사항이 많지 않음) 결국 Redgate에서 제공하는 것과 같은 도구가 필요합니다.

3

SMO/DMO를 사용하면 스키마 스크립트를 생성하기가 너무 어렵지 않습니다. 데이터는 좀 더 재미 있지만 여전히 실행 가능합니다.

는 일반적으로, 나는 "스크립트 그것은"접근 방식을,하지만 당신은이 라인을 따라 뭔가를 고려하는 것이 좋습니다 :

  • 는 데이터의 부분 집합을 개발 할 수 있도록, 개발 및 준비를 구별 .. 이 도구를 사용하여 일부 프로덕션 데이터를 손쉽게 풀거나 보안이 관련된 가짜 데이터를 생성 할 수 있습니다.
  • 팀 개발을 위해 데이터베이스에 대한 각 변경 사항을 팀 구성원간에 조정해야합니다. 스키마와 데이터 변경은 혼합 될 수 있지만, 단일 스크립트는 주어진 기능을 가능하게해야합니다. 일단 모든 기능이 준비되면,이를 단일 SQL 파일로 묶어서 운영 환경 복원에 대해 실행합니다.
  • 스테이징이 승인을 취소하면 프로덕션 시스템에서 단일 SQL 파일을 다시 실행합니다.

나는 레드 게이트 도구를 사용하고 그들이 도구입니다,하지만 당신은 도구를 구축하고 이런 식으로 작업, 그것을 감당할 수없는 경우 너무 멀리 이상적에서입니다.

6

Rob Allen처럼 Redgate의 SQL Compare/Data Compare를 사용합니다. 또한 Microsoft에서 데이터베이스 게시 마법사를 사용합니다. 또한 SQL 스크립트를 사용하여 서버에서 실행하는 C#에서 작성한 콘솔 앱이 있습니다. 이렇게하면 명령 줄이나 배치 스크립트에서 'GO'명령을 사용하여 큰 스크립트를 실행할 수 있습니다.

Microsoft.SqlServer.BatchParser.dll 및 Microsoft.SqlServer.ConnectionInfo를 사용합니다.콘솔 응용 프로그램의 dll 라이브러리

2

소스 제어에 모든 것을 유지하고 모든 변경 사항을 수동으로 스크립팅하는 데 동의합니다. 단일 릴리스에 대한 스키마 변경 사항은 해당 릴리스에 대해 특별히 작성된 스크립트 파일로 이동합니다. 저장된 procs, views 등은 개별 파일에 저장하고 소스 제어가 끝나는 한 .cs 또는 .aspx와 같이 처리해야합니다. 필자는 powershell 스크립트를 사용하여 프로그래밍 기능을 업데이트하기위한 하나의 큰 .sql 파일을 생성합니다.

새 테이블, 새 열과 같은 스키마 변경의 응용 프로그램을 자동화하는 것을 좋아하지 않습니다. 프로덕션 릴리스를 수행 할 때 나는 명령에 의한 스크립트 변경 명령을 통해 각각이 예상대로 작동하는지 확인하고자합니다 . 개발시 큰 변화가없는 작은 세부 사항을 잊었 기 때문에 제작시 큰 변경 스크립트를 실행하고 오류가 발생하는 것보다 더 나쁜 것은 없습니다.

나는 인덱스가 코드 파일처럼 취급되어 소스 컨트롤에 넣어 져야한다는 것을 배웠다.

그리고 반드시 2 개 이상의 데이터베이스 (dev 및 live)가 있어야합니다. 모두가 매일 dev 작업에 사용하는 dev 데이터베이스가 있어야합니다. 그런 다음 프로덕션을 모방하고 통합 테스트를 수행하는 데 사용되는 준비 데이터베이스. 그렇다면 어쩌면 전체 백업에서 복원 된 완전한 최신 사본을 실행하는 것이 가능하기 때문에 설치 테스트의 마지막 라운드는 가능한 한 실제에 가까운 것을 대상으로 진행됩니다.

7

문제에 대한 Microsoft의 해결책 : Visual Studio 2008 Database Edition을 잊지 마십시오. 데이터베이스에 변경 사항을 적용하고 스키마 및/또는 데이터 변경, 단위 테스트, 테스트 데이터 생성을 위해 데이터베이스간에 차이점을 생성하는 도구가 포함되어 있습니다.

꽤 비싸지 만 잠시 동안 평가판을 사용하여 훌륭하다고 생각했습니다. 다른 어떤 코드와 마찬가지로 데이터베이스를 쉽게 사용할 수 있습니다.

1

모든 데이터베이스를 DDL로 작성한 다음 해당 DDL을 스키마 유지 관리 클래스로 랩핑합니다. 처음에는 DDL을 만들기 위해 여러 가지 작업을 수행 할 수 있지만 근본적으로 코드의 모든 스키마 maint를 수행합니다. 이것은 또한 SQL에 잘 맵핑되지 않는 비 DDL 작업을 수행해야하는 경우 프로 시저 논리를 작성하고 DDL/DML 덩어리간에 실행할 수 있음을 의미합니다.

  1. DB를가 존재 하는가 하나는 테스트 비교적 간단 세트를 코딩 할 수 있도록

    내 DBS는 현재 버전을 정의하는 테이블이? 만들지 않으면.

  2. DB가 현재 버전입니까? 그렇지 않으면 스키마를 최신 상태로 만드는 메소드를 순서대로 실행하십시오 (사용자가이 시점에서 백업을 확인하고 이상적으로 수행하도록 할 수 있습니다).

단일 사용자 앱의 경우 버전이 일치하지 않는 사용자를 잠그고 현재 실행할 독립형 스키마 maint 앱이있는 웹 앱의 경우 단일 위치 앱을 실행하기 만하면됩니다. 다중 사용자의 경우 특정 환경에 따라 다릅니다.

장점은 무엇입니까? 이 방법론을 사용하는 앱의 스키마가 해당 애플리케이션의 모든 인스턴스에서 일관성이 있다는 확신이 있습니다. 완벽하지는 않지만 문제가 있습니다 ...

팀 환경에서 개발할 때 몇 가지 문제가 있지만 어쨌든 그럴 수 있습니다.

머피 내가 음속의 마이그레이션 메커니즘을 사용하고

2

그래서 난 그냥 위아래로 두 방법을 가지고 squential 위해 클래스와 DLL을 가지고있다. 지속적인 데이터베이스 통합/빌드 스크립트가있어 데이터베이스 업그레이드를 자동화 할 수 있습니다.

세계에서 가장 좋은 것은 아니지만 DDL 작성에 능합니다.

2

RedGate SqlCompare 내 의견에 갈 수있는 방법입니다. 우리는 정기적으로 DB 배포를 수행하고 그 도구를 사용하기 시작한 이래로 나는 결코 되돌아 보지 못했습니다. 매우 직관적 인 인터페이스로 많은 시간을 절약 할 수 있습니다.

Pro 버전은 소스 컨트롤 통합을위한 스크립팅도 처리합니다.

1

현재 동일한 작업을하고 있습니다. 테스트에서 SQL Server 데이터베이스를 배포 할뿐만 아니라 로컬 -> 통합 -> 테스트 -> 프로덕션의 전체 프로세스를 포함합니다. 그래서 나를 매일 쉽게 만들 수있는 것은 내가 할 NAnt task with Red-Gate SQL Compare입니다. RedGate에서 일하는 것이 아니라 좋은 선택이라고해야합니다.

+0

답변에서 링크가 작동하지 않습니다. – Pang

2

또한 모든 내 개체 및 데이터에 대한 스크립트를 유지 관리합니다. 배포를 위해이 무료 유틸리티 (http://www.sqldart.com)를 작성했습니다. 그것은 당신이 당신의 스크립트 파일들을 재주문하게 할 것이고, 트랜잭션 내에서 전체를 실행할 것입니다.