문제

내 데이터베이스에 버전 관리를 적용하고 싶습니다.시작하는 데 도움이 되는 조언이나 추천 기사가 있는 사람이 있나요?

나는 항상 적어도 갖고 싶어 일부 거기에 데이터가 있습니다 ( 졸업생 언급:사용자 유형 및 관리자).또한 성능 측정을 위해 생성된 테스트 데이터의 대규모 컬렉션이 필요한 경우도 많습니다.

도움이 되었습니까?

해결책

마틴 파울러(Martin Fowler)는 이 주제에 관해 제가 가장 좋아하는 기사를 썼습니다. http://martinfowler.com/articles/evodb.html.나는 버전 제어에 스키마 덤프를 넣지 않기로 선택했습니다. 졸업생 그리고 다른 사람들은 프로덕션 데이터베이스를 업그레이드하는 쉬운 방법을 원하기 때문에 제안합니다.

단일 프로덕션 데이터베이스 인스턴스가 있는 웹 애플리케이션의 경우 다음 두 가지 기술을 사용합니다.

데이터베이스 업그레이드 스크립트

버전 N에서 N+1로 스키마를 이동하는 데 필요한 DDL이 포함된 시퀀스 데이터베이스 업그레이드 스크립트입니다.(이것들은 버전 관리 시스템에 들어갑니다.) _version_history_ 테이블, 다음과 같습니다.

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

새 버전에 해당하는 업그레이드 스크립트가 실행될 때마다 새 항목을 가져옵니다.

이렇게 하면 어떤 버전의 데이터베이스 스키마가 존재하는지 쉽게 확인할 수 있으며 데이터베이스 업그레이드 스크립트가 한 번만 실행됩니다.다시 말하지만 이들은 ~ 아니다 데이터베이스 덤프.오히려 각 스크립트는 변화 한 버전에서 다음 버전으로 이동하는 데 필요합니다.이는 프로덕션 데이터베이스를 "업그레이드"하기 위해 적용하는 스크립트입니다.

개발자 샌드박스 동기화

  1. 프로덕션 데이터베이스를 백업, 정리 및 축소하는 스크립트입니다.프로덕션 DB로 업그레이드할 때마다 이를 실행합니다.
  2. 개발자의 워크스테이션에서 백업을 복원(필요한 경우 조정)하는 스크립트입니다.각 개발자는 프로덕션 DB로 업그레이드할 때마다 이 스크립트를 실행합니다.

주의사항:내 자동화된 테스트는 스키마는 정확하지만 비어 있는 데이터베이스에 대해 실행되므로 이 조언은 귀하의 요구 사항에 완벽하게 적합하지 않습니다.

다른 팁

Red Gate의 SQL 비교 제품을 사용하면 개체 수준 비교를 수행하고 그로부터 변경 스크립트를 생성할 수 있을 뿐만 아니라 한 번의 [objectname].sql 생성을 통해 데이터베이스 개체를 개체 유형별로 구성된 폴더 계층 구조로 내보낼 수도 있습니다. 이 디렉터리의 개체당 스크립트입니다.객체 유형 계층 구조는 다음과 같습니다.

\기능
\보안
\보안\역할
\보안\스키마
\보안\사용자
\저장 프로시저
\테이블

변경한 후 동일한 루트 디렉터리에 스크립트를 덤프하면 이를 사용하여 SVN 저장소를 업데이트하고 각 개체의 실행 기록을 개별적으로 유지할 수 있습니다.

이것은 개발을 둘러싼 "어려운 문제" 중 하나입니다.내가 아는 한 완벽한 해결책은 없습니다.

데이터가 아닌 데이터베이스 구조만 저장해야 하는 경우 데이터베이스를 SQL 쿼리로 내보낼 수 있습니다.(Enterprise Manager에서:데이터베이스를 마우스 오른쪽 버튼으로 클릭 -> SQL 스크립트 생성을 클릭합니다.옵션 탭에서 "개체당 하나의 파일 생성"을 설정하는 것이 좋습니다. 그런 다음 이 텍스트 파일을 svn에 커밋하고 svn의 diff 및 로깅 기능을 사용할 수 있습니다.

나는 이것을 몇 가지 매개변수를 취하고 데이터베이스를 설정하는 배치 스크립트와 함께 묶었습니다.또한 사용자 유형 및 관리자와 같은 기본 데이터를 입력하는 몇 가지 추가 쿼리를 추가했습니다.(이에 대해 더 많은 정보를 원하시면 게시물을 올려주세요. 스크립트를 접근 가능한 곳에 두겠습니다.)

모든 데이터도 보관해야 한다면 데이터베이스를 백업해 두고 Redgate(http://www.red-gate.com/) 제품을 비교합니다.저렴하지는 않지만 모든 페니 가치가 있습니다.

먼저, 귀하에게 적합한 버전 제어 시스템을 선택해야 합니다.

  • 중앙 버전 관리 시스템 - 사용자가 파일 작업 전/후에 체크아웃/체크인하고, 파일이 단일 중앙 서버에 보관되는 표준 시스템입니다.

  • 분산 버전 제어 시스템 - 저장소가 복제되는 시스템이고 각 클론은 실제로 저장소의 전체 백업이므로 서버가 충돌하면 클로닝 된 저장소가 필요에 맞는 올바른 시스템을 선택한 후 복원하는 데 사용될 수 있습니다. , 모든 버전 제어 시스템의 핵심 인 저장소를 설정해야합니다.이 모든 것은 다음 기사에 설명되어 있습니다. http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

저장소를 설정하고 중앙 버전 관리 시스템의 경우 작업 폴더를 설정한 후 다음을 읽을 수 있습니다. 이 기사.다음을 사용하여 개발 환경에서 소스 제어를 설정하는 방법을 보여줍니다.

  • MSSCCI 공급자를 통한 SQL Server Management Studio,

  • Visual Studio 및 SQL Server 데이터 도구

  • 타사 도구 ApexSQL 소스 제어

Red Gate에서는 다음과 같은 도구를 제공합니다. SQL 소스 제어, SQL 비교 기술을 사용하여 데이터베이스를 TFS 또는 SVN 저장소와 연결합니다.이 도구는 SSMS에 통합되어 평소처럼 작업할 수 있게 해줍니다. 단, 이제 개체를 커밋할 수 있습니다.

마이그레이션 기반 접근 방식(자동 배포에 더 적합)의 경우 다음을 제공합니다. SQL 변경 자동화 (이전의 ReadyRoll)은 증분 스크립트 세트를 Visual Studio 프로젝트로 생성하고 관리합니다.

SQL 소스 제어에서는 정적 데이터 테이블을 지정할 수 있습니다.이는 소스 제어에 INSERT 문으로 저장됩니다.

테스트 데이터에 관해 이야기하는 경우 도구를 사용하거나 정의한 배포 후 스크립트를 통해 테스트 데이터를 생성하거나 단순히 프로덕션 백업을 개발 환경에 복원하는 것이 좋습니다.

Liquibase(http://www.liquibase.org/).도구 자체를 사용하지 않더라도 데이터베이스 변경 관리 또는 리팩토링의 개념을 꽤 잘 처리합니다.

추가 권장 사항 및 주의 사항과 함께 RedGate 도구를 추천한 모든 사람에게 +1합니다.

SqlCompare에는 적절하게 문서화된 API도 있습니다.예를 들어 체크인 시 소스 제어 스크립트 폴더를 CI 통합 테스트 데이터베이스와 동기화하는 콘솔 앱을 작성할 수 있으므로 누군가가 스크립트 폴더에서 스키마 변경 사항을 체크인하면 일치하는 애플리케이션과 함께 자동으로 배포됩니다. 코드 변경.이는 로컬 DB의 변경 사항을 공유 개발 DB에 전파하는 것을 잊어버린 개발자와의 격차를 줄이는 데 도움이 됩니다(우리 중 절반 정도라고 생각합니다 :)).

주의할 점은 스크립팅된 솔루션이나 다른 방법을 사용하면 RedGate 도구가 충분히 부드러워서 추상화의 기초가 되는 SQL 현실을 쉽게 잊어버릴 수 있다는 것입니다.테이블의 모든 열 이름을 바꾸면 SqlCompare는 이전 열을 새 열에 매핑할 방법이 없으며 테이블의 모든 데이터를 삭제합니다.경고가 생성되지만 사람들이 그 경고를 클릭하는 것을 본 적이 있습니다.내 생각에는 지금까지는 DB 버전 관리 및 업그레이드만 자동화할 수 있다는 점에서 언급할 가치가 있는 일반적인 요점이 있습니다. 추상화는 매우 누출이 많습니다.

우리는 사용 DB고스트 SQL 데이터베이스를 관리합니다.그런 다음 버전 제어에 새 데이터베이스를 구축하기 위한 스크립트를 넣으면 새 데이터베이스가 구축되거나 기존 데이터베이스가 버전 제어의 스키마로 업그레이드됩니다.이렇게 하면 변경 스크립트 생성에 대해 걱정할 필요가 없습니다(예를 들어 열의 데이터 유형을 변경하고 데이터를 변환해야 하는 경우 여전히 그렇게 할 수 있지만).

VS 2010에서는 데이터베이스 프로젝트를 사용하십시오.

  1. 데이터베이스 스크립트 작성
  2. 스크립트 또는 DB 서버 직접 변경하십시오.
  3. 데이터> 스키마 비교를 사용하여 동기화하십시오

완벽한 DB 버전 관리 솔루션을 만들고 DB 동기화를 쉽게 만듭니다.

가지고 있는 데이터베이스 중 하나를 업그레이드할 수 있도록 변경 스크립트를 사용하여 데이터베이스 스크립트를 버전 제어에 저장하는 것이 좋은 접근 방식입니다.또한 모든 변경 스크립트를 적용하지 않고도 전체 데이터베이스를 생성할 수 있도록 다양한 버전의 스키마를 저장할 수도 있습니다.수동 작업을 수행할 필요가 없도록 스크립트 처리는 자동화되어야 합니다.

모든 개발자를 위한 별도의 데이터베이스를 보유하고 공유 데이터베이스를 사용하지 않는 것이 중요하다고 생각합니다.이렇게 하면 개발자는 다른 개발자와 독립적으로 테스트 사례와 개발 단계를 만들 수 있습니다.

자동화 도구에는 데이터베이스 메타데이터를 처리하기 위한 수단이 있어야 합니다. 이를 통해 어떤 데이터베이스가 어떤 개발 상태에 있는지, 어떤 테이블에 버전 제어 가능한 데이터가 포함되어 있는지 등을 알 수 있습니다.

마이그레이션 솔루션을 살펴볼 수도 있습니다.이를 통해 C# 코드로 데이터베이스 스키마를 지정하고 MSBuild를 사용하여 데이터베이스 버전을 올리고 내릴 수 있습니다.

나는 현재 사용하고 있습니다 DbUp, 잘 작동하고 있습니다.

대상 환경이나 제약 조건에 대한 구체적인 내용을 언급하지 않았으므로 이것이 완전히 적용되지 않을 수 있습니다.그러나 진화하는 DB 스키마를 효과적으로 추적하고 Ruby 사용 아이디어에 반대하지 않는 방법을 찾고 있다면 ActiveRecord의 마이그레이션이 바로 골목길입니다.

마이그레이션은 Ruby DSL을 사용하여 데이터베이스 변환을 프로그래밍 방식으로 정의합니다.각 변환을 적용하거나 (일반적으로) 롤백할 수 있으므로 특정 시점에 다른 버전의 DB 스키마로 이동할 수 있습니다.이러한 변환을 정의하는 파일은 다른 소스 코드와 마찬가지로 버전 제어로 체크인할 수 있습니다.

마이그레이션은 다음의 일부이기 때문입니다. 액티브레코드, 일반적으로 전체 스택 Rails 앱에서 사용됩니다.그러나 최소한의 노력으로 Rails와 독립적으로 ActiveRecord를 사용할 수 있습니다.보다 여기 Rails 외부에서 AR 마이그레이션을 사용하는 방법에 대한 자세한 내용은 여기를 참조하세요.

모든 데이터베이스는 소스 코드 제어를 받아야 합니다.부족한 점은 모든 데이터베이스 개체와 "구성 데이터"를 파일로 자동으로 스크립팅하여 모든 소스 제어 시스템에 추가할 수 있는 도구입니다.SQL Server를 사용하는 경우 내 솔루션은 다음과 같습니다. http://dbsourcetools.codeplex.com/ .재미있게 보내세요.- 네이선.

간단 해.

  1. 기본 프로젝트가 준비되면 전체 데이터베이스 스크립트를 생성해야 합니다.이 스크립트는 SVN에 커밋되었습니다.첫 번째 버전입니다.

  2. 그 후 모든 개발자는 변경 스크립트(ALTER..., 새 테이블, sprocs 등)를 생성합니다.

  3. 최신 버전이 필요한 경우 새로운 변경 스크립트를 모두 실행해야 합니다.

  4. 앱이 프로덕션으로 출시되면 1로 돌아갑니다(하지만 물론 후속 버전이 됩니다).

Nant는 이러한 변경 스크립트를 실행하는 데 도움을 줄 것입니다.:)

그리고 기억하세요.규율이 있으면 모든 것이 잘 작동합니다.데이터베이스 변경이 커밋될 때마다 코드의 해당 기능도 커밋됩니다.

데이터베이스가 작고 전체 버전을 관리하려는 경우, 이 배치 스크립트 도움이 될 수도 있습니다.MSSQL 데이터베이스 MDF 파일을 Subversion으로 분리, 압축 및 체크인합니다.

주로 스키마 버전을 지정하고 소량의 참조 데이터만 갖고 있는 경우 다음을 사용할 수 있습니다. 서브소닉 마이그레이션 그것을 처리하기 위해.이점은 특정 버전으로 쉽게 마이그레이션할 수 있다는 것입니다.

조금 더 빠르게 소스 코드 제어 시스템으로 덤프하려면 sysobjects의 버전 정보를 사용하여 지난번 이후 변경된 개체를 확인할 수 있습니다.

설정: 점진적으로 확인하려는 각 데이터베이스에 테이블을 생성하여 마지막으로 확인했을 때의 버전 정보를 보관합니다(처음 실행 시 비어 있음).전체 데이터 구조를 다시 스캔하려면 이 테이블을 지우십시오.

IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions
CREATE TABLE last_run_sysversions (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

일반 실행 모드: 이 SQL에서 결과를 가져와 관심 있는 항목에 대한 SQL 스크립트를 생성하고 원하는 소스 제어에 넣을 수 있습니다.

IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp
CREATE TABLE #tmp (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

SET NOCOUNT ON

-- Insert the values from the end of the last run into #tmp
INSERT #tmp (name, id, base_schema_ver, schema_ver, type) 
SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions

DELETE last_run_sysversions
INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects

-- This next bit lists all differences to scripts.
SET NOCOUNT OFF

--Renamed.
SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE o.name <> t.name /*COLLATE*/
AND o.type IN ('TR', 'P' ,'U' ,'V')
UNION 

--Changed (using alter)
SELECT 'changed' AS ChangeType, o.name /*COLLATE*/, 
       'altered' AS extra_info, 2 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id 
WHERE (
   o.base_schema_ver <> t.base_schema_ver
OR o.schema_ver      <> t.schema_ver
)
AND  o.type IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT oi.name 
         FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id
         WHERE oi.name <> ti.name /*COLLATE*/
         AND oi.type IN ('TR', 'P' ,'U' ,'V')) 
UNION

--Changed (actually dropped and recreated [but not renamed])
SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority
FROM #tmp t
WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Deleted
SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority
FROM #tmp t
WHERE NOT EXISTS (SELECT * FROM sysobjects o
                  WHERE o.id = t.id)
AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Added
SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority
FROM sysobjects o
WHERE NOT EXISTS (SELECT * FROM #tmp t
                  WHERE o.id = t.id)
AND      o.type  IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
ORDER BY Priority ASC

메모: 데이터베이스에서 비표준 데이터 정렬을 사용하는 경우 /* COLLATE */ 데이터베이스 데이터 정렬과 함께.즉. COLLATE Latin1_General_CI_AI

우리 앱은 여러 RDBMS에서 작동해야 하기 때문에 데이터베이스 중립성을 사용하여 버전 제어에 스키마 정의를 저장합니다. 토크 형식(XML)입니다.또한 다음과 같이 데이터베이스에 대한 참조 데이터를 XML 형식으로 버전 관리합니다(여기서 "관계"는 참조 테이블 중 하나임).

  <Relationship RelationshipID="1" InternalName="Manager"/>
  <Relationship RelationshipID="2" InternalName="Delegate"/>
  etc.

그런 다음 자체 제작 도구를 사용하여 데이터베이스 버전 X에서 버전 X + 1로 이동하는 데 필요한 스키마 업그레이드 및 참조 데이터 업그레이드 스크립트를 생성합니다.

우리는 데이터베이스 스키마를 저장하지 않고 데이터베이스에 대한 변경 사항을 저장합니다.우리가 하는 일은 스키마 변경 사항을 저장하여 모든 버전의 데이터베이스에 대한 변경 스크립트를 작성하고 이를 고객의 데이터베이스에 적용하는 것입니다.저는 해당 스크립트를 읽고 어떤 업데이트를 적용해야 하는지 알 수 있는 기본 애플리케이션과 함께 배포되는 데이터베이스 유틸리티 앱을 작성했습니다.또한 필요에 따라 뷰와 저장 프로시저를 새로 고칠 수 있는 충분한 기능도 갖추고 있습니다.

x64 플랫폼으로 마이그레이션한 후 SQL 데이터베이스 버전을 변경해야 했고 이전 버전이 마이그레이션과 함께 중단되었습니다.우리는 SQLDMO를 사용하여 모든 SQL 개체를 폴더에 매핑하는 C# 애플리케이션을 작성했습니다.

                Root
                    ServerName
                       DatabaseName
                          Schema Objects
                             Database Triggers*
                                .ddltrigger.sql
                             Functions
                                ..function.sql
                             Security
                                Roles
                                   Application Roles
                                      .approle.sql
                                   Database Roles
                                      .role.sql
                                Schemas*
                                   .schema.sql
                                Users
                                   .user.sql
                             Storage
                                Full Text Catalogs*
                                   .fulltext.sql
                             Stored Procedures
                                ..proc.sql
                             Synonyms*
                                .synonym.sql
                             Tables
                                ..table.sql
                                Constraints
                                   ...chkconst.sql
                                   ...defconst.sql
                                Indexes
                                   ...index.sql
                                Keys
                                   ...fkey.sql
                                   ...pkey.sql
                                   ...ukey.sql
                                Triggers
                                   ...trigger.sql
                             Types
                                User-defined Data Types
                                   ..uddt.sql
                                XML Schema Collections*
                                   ..xmlschema.sql
                             Views
                                ..view.sql
                                Indexes
                                   ...index.sql
                                Triggers
                                   ...trigger.sql

그런 다음 애플리케이션은 새로 작성된 버전을 SVN에 저장된 버전과 비교하고 차이점이 있으면 SVN을 업데이트합니다.우리는 SQL을 그렇게 많이 변경하지 않기 때문에 밤에 한 번 프로세스를 실행하는 것으로 충분하다고 판단했습니다.이를 통해 관심 있는 모든 객체의 변경 사항을 추적할 수 있을 뿐만 아니라 심각한 문제가 발생할 경우 전체 스키마를 다시 구축할 수 있습니다.

제가 얼마전에 이 앱을 썼는데, http://sqlschemasourcectrl.codeplex.com/ 이는 원하는 만큼 자주 MSFT SQL DB를 스캔하고 자동으로 개체(테이블, 뷰, 프로세스, 함수, SQL 설정)를 SVN에 덤프합니다.매력처럼 작동합니다.Unfuddle과 함께 사용합니다(체크인 시 알림을 받을 수 있음).

일반적인 해결책은 필요에 따라 데이터베이스를 덤프하고 해당 파일을 백업하는 것입니다.

개발 플랫폼에 따라 사용 가능한 오픈소스 플러그인이 있을 수 있습니다.이를 위해 자신만의 코드를 롤링하는 것은 일반적으로 매우 간단합니다.

메모:버전 관리에 넣는 대신 데이터베이스 덤프를 백업할 수도 있습니다.버전 관리에서 파일의 속도가 엄청나게 빨라지고 전체 소스 제어 시스템이 느려질 수 있습니다(현재 CVS 공포 이야기가 생각나네요).

우리는 Team Foundation Server를 사용하기 시작했습니다.데이터베이스 크기가 중간이라면 Visual Studio에는 비교, 데이터 비교, 데이터베이스 리팩터링 도구, 데이터베이스 테스트 프레임워크 및 데이터 생성 도구가 내장된 멋진 프로젝트 통합 기능이 있습니다.

그러나 해당 모델은 매우 큰 데이터베이스나 타사 데이터베이스(객체를 암호화하는 데이터베이스)에는 적합하지 않습니다.그래서 우리가 한 일은 사용자 정의된 개체만 저장하는 것입니다.Visual Studio/Team Foundation 서버는 이에 매우 적합합니다.

TFS 데이터베이스 수석 아치.블로그

MS TFS 사이트

나는 ESV 답변에 동의하며 정확한 이유로 데이터베이스 업데이트를 매우 간단한 파일로 유지 관리하는 데 도움이 되는 작은 프로젝트를 시작했습니다. 그런 다음 긴 소스 코드를 유지 관리할 수 있습니다.이를 통해 개발자는 물론 UAT 및 프로덕션도 쉽게 업데이트할 수 있습니다.이 도구는 Sql Server 및 MySql에서만 작동합니다.

일부 프로젝트 기능:

  • 스키마 변경을 허용합니다.
  • 가치 트리 모집을 허용합니다.
  • 예를 들어 별도의 테스트 데이터 삽입을 허용합니다.UAT
  • 롤백 옵션 허용(자동화되지 않음)
  • SQL Server 및 Mysql에 대한 지원을 유지합니다.
  • 하나의 간단한 명령으로 기존 데이터베이스를 버전 제어로 가져올 수 있는 기능이 있습니다(SQL Server만 ...아직 mysql 작업 중)

코드는 Google 코드에서 호스팅됩니다.자세한 내용은 Google 코드를 확인하세요.

http://code.google.com/p/databaseversioncontrol/

얼마 전에 나는 DMO와 VSS 개체를 사용하여 전체 DB를 VSS로 스크립팅하는 VB 기본 모듈을 발견했습니다.VB 스크립트로 변환하여 게시했습니다. 여기.VSS 호출을 쉽게 꺼내고 DMO를 사용하여 모든 스크립트를 생성한 다음 VBScript를 호출하는 동일한 배치 파일에서 SVN을 호출하여 체크인할 수 있습니까?

데이브 J

또한 데이터베이스 확장 속성 프로시저 제품군을 통해 저장된 데이터베이스 버전을 사용하고 있습니다.내 애플리케이션에는 각 버전 단계에 대한 스크립트가 있습니다(예:1.1에서 1.2로 이동합니다.)배포되면 현재 버전을 확인한 다음 마지막 앱 버전에 도달할 때까지 스크립트를 하나씩 실행합니다.직접적인 '최종' 버전이 있는 스크립트는 없으며, 깨끗한 DB에 배포하더라도 일련의 업그레이드 단계를 통해 배포가 수행됩니다.

이제 제가 추가하고 싶은 것은 이틀 전에 MS 캠퍼스에서 새로 출시될 VS DB 에디션에 대한 프레젠테이션을 봤다는 것입니다.프레젠테이션은 특히 이 주제에 초점을 맞추었고 저는 깜짝 놀랐습니다.확실히 확인해야 합니다. 새로운 기능은 정의된 스키마와 배포 스키마를 비교하고 델타 ALTER 및 소스 코드 통합과의 통합을 수행하는 런타임 델타 엔진인 T-SQL 스크립트(CREATE)에서 스키마 정의를 유지하는 데 중점을 두고 있습니다. 자동화된 빌드 드롭을 위한 MSBUILD 지속적인 통합을 포함합니다.드롭에는 배포 사이트로 가져올 수 있는 새로운 파일 형식인 .dbschema 파일이 포함되며, 명령줄 도구는 실제 '델타'를 수행하고 배포를 실행할 수 있습니다.VSDE 다운로드 링크가 포함된 이 주제에 대한 블로그 항목이 있습니다. 이를 확인해야 합니다. http://rusanu.com/2009/05/15/version-control-and-your-database/

아주 오래된 질문이지만 지금도 많은 사람들이 이 문제를 해결하려고 노력하고 있습니다.그들이 해야 할 일은 Visual Studio 데이터베이스 프로젝트에 대해 조사하는 것뿐입니다.이것이 없으면 어떤 데이터베이스 개발도 매우 미약해 보입니다.코드 구성부터 배포, 버전 관리까지 모든 것을 단순화합니다.

내 경험에 따르면 해결책은 두 가지입니다.

  1. 개발 중에 여러 개발자가 수행한 개발 데이터베이스에 대한 변경 사항을 처리해야 합니다.

  2. 고객 사이트에서 데이터베이스 업그레이드를 처리해야 합니다.

#1을 처리하려면 강력한 데이터베이스 비교/병합 도구가 필요합니다.최고의 도구는 처리되지 않은 충돌을 수동으로 해결하면서 가능한 한 자동 병합을 수행할 수 있어야 합니다.

완벽한 도구는 BASE 데이터베이스를 기준으로 THEIRS 데이터베이스와 MINE 데이터베이스에서 이루어진 변경 사항을 고려하는 3방향 병합 알고리즘을 사용하여 병합 작업을 처리해야 합니다.

저는 SQLite 데이터베이스에 대한 수동 병합 지원을 제공하는 상용 도구를 작성했으며 현재 SQLite에 대한 3방향 병합 알고리즘에 대한 지원을 추가하고 있습니다.에서 확인해보세요 http://www.sqlitecompare.com

#2를 처리하려면 업그레이드 프레임워크가 필요합니다.

기본 아이디어는 기존 SQL 스키마에서 최신 SQL 스키마로 업그레이드하는 방법을 알고 모든 기존 DB 설치에 대한 업그레이드 경로를 구축할 수 있는 자동 업그레이드 프레임워크를 개발하는 것입니다.

주제에 대한 내 기사를 확인하십시오. http://www.codeproject.com/KB/database/sqlite_upgrade.aspx 내가 말하는 내용에 대한 일반적인 아이디어를 얻으려면.

행운을 빌어요

리론 레비

DBGhost를 확인해보세요 http://www.innovartis.co.uk/.나는 자동화된 방식으로 2년 동안 사용해 왔으며 훌륭하게 작동합니다.이를 통해 데이터베이스를 제외하고는 Java 또는 C 빌드와 매우 유사하게 DB 빌드를 수행할 수 있습니다.무슨 말인지 아시겠죠?

데이터베이스의 버전 제어 시스템을 즉석에서 만들기 위해 비교 도구를 사용하는 것이 좋습니다.좋은 대안은 xSQL 스키마 비교 그리고 xSQL 데이터 비교.

이제, 버전 제어 하에 데이터베이스의 스키마만 두는 것이 목표라면 xSQL 스키마 비교를 사용하여 스키마의 xSQL 스냅샷을 생성하고 이러한 파일을 버전 제어에 추가하면 됩니다.특정 버전으로 되돌리거나 업데이트하려면 데이터베이스의 현재 버전을 대상 버전의 스냅샷과 비교하면 됩니다.

아쉽게도 데이터를 버전 제어 하에 두고 싶다면 xSQL 데이터 비교를 사용하여 데이터베이스에 대한 변경 스크립트를 생성하고 버전 제어에 .sql 파일을 추가할 수 있습니다.그런 다음 이 스크립트를 실행하여 원하는 버전으로 되돌리거나 업데이트할 수 있습니다.'되돌리기' 기능의 경우 실행 시 버전 3을 버전 2와 동일하게 만드는 변경 스크립트를 생성해야 하며 '업데이트' 기능의 경우 그 반대를 수행하는 변경 스크립트를 생성해야 한다는 점을 명심하세요.

마지막으로, 몇 가지 기본 배치 프로그래밍 기술을 사용하면 명령줄 버전의 xSQL Schema Compare 및 xSQL Data Compare를 사용하여 전체 프로세스를 자동화할 수 있습니다.

부인 성명:저는 xSQL에 소속되어 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top