sql-server - 확인 - 하나 이상의 데이터베이스에 액세스할 수 없으므로 목록에 표시되지 않습니다




버전 관리 SQL Server 데이터베이스 (20)

데이터베이스를 버전 관리하에두고 싶습니다. 누구든지 저를 시작하기 위해 조언이나 권장 기사가 있습니까?

나는 항상 최소한 몇 가지 데이터를 원할 것입니다 ( alumb 언급 : 사용자 유형 및 관리자). 또한 성능 측정을 위해 생성 된 대규모 테스트 데이터 모음을 원할 수도 있습니다.


DBGhost DBGhost 확인 DBGhost . 나는 2 년 동안 자동화 된 방식으로 사용 해 왔으며 훌륭하게 작동합니다. 데이터베이스를 제외하고 DB 빌드는 Java 또는 C 빌드와 매우 유사합니다. 무슨 말인지 알 잖아


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


Red Gate에서는 SQL 비교 기술을 사용하여 데이터베이스를 TFS 또는 SVN 저장소와 연결하는 red-gate.com/products/SQL_Source_Control/index.htm 도구를 제공합니다. 이 도구는 SSMS에 통합되어 있으며 이제 개체를 커밋 할 수 있다는 점을 제외하고 정상적으로 작업 할 수 있습니다.

마이그레이션 기반 접근 방식 (자동 배포에 더 적합)을 위해 Visual Studio 프로젝트로 증분 스크립트 집합을 만들고 관리하는 SQL Change Automation (이전의 ReadyRoll)을 제공합니다.

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

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


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

\ 기능
\보안
\ 보안 \ 역할
\ 보안 \ 스키마
\ 보안 \ 사용자
\ 저장 절차
\ 테이블

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


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

  1. 데이터베이스 스크립트
  2. 스크립트를 변경하거나 DB 서버에서 직접 변경
  3. 데이터> 스키마 비교를 사용하여 동기화

완벽한 DB 버전 관리 솔루션을 만들고 DB 동기화가 쉬워집니다.


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을 많이 변경하지 않았기 때문에 밤새 한 번 프로세스를 실행하는 것으로 충분하다고 판단했습니다. 이를 통해 관심있는 모든 객체의 변경 사항을 추적 할 수 있으며 심각한 문제가 발생할 경우 전체 스키마를 재구성 할 수 있습니다.


나는 ESV 답변에 동의하며 정확한 이유로 데이터베이스 업데이트를 아주 간단한 파일로 유지 관리하기 위해 잠시 프로젝트를 시작한 다음 긴 소스 코드를 유지할 수있었습니다. UAT 및 프로덕션뿐만 아니라 개발자에게도 쉽게 업데이트 할 수 있습니다. 이 도구는 Sql Server 및 MySql에서만 작동합니다.

일부 프로젝트 기능 :

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

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

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


나는이 응용 프로그램을 얼마 전에 작성했는데 http://sqlschemasourcectrl.codeplex.com/ 은 원하는만큼 MSFT SQL DB를 스캔하고 자동으로 객체 (테이블, 뷰, 프로세서, 함수, SQL 설정)를 SVN에 덤프합니다. 매력처럼 작동합니다. 나는 Unfuddle과 함께 사용합니다 (체크 인에 대한 경고를받을 수 있습니다)


대상 환경이나 제약 조건에 대한 구체적인 언급은 없으므로 이것이 완전히 적용 가능한 것은 아닙니다 ...하지만 진화하는 DB 스키마를 효과적으로 추적하는 방법을 찾고 있으며 사용의 아이디어에 불리하지 않은 경우 루비, ActiveRecord의 마이그레이션은 골목길에 있습니다.

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

마이그레이션은 ActiveRecord 의 일부이기 때문에 일반적으로 풀 스택 Rails 앱에서 사용됩니다. 그러나 최소한의 노력으로 Rails와 독립적으로 ActiveRecord를 사용할 수 있습니다. Rails 외부에서 AR 마이그레이션을 사용하는 방법에 대한 자세한 내용은 here 를 참조 here .


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

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

자동화 도구에는 데이터베이스 메타 데이터를 처리 할 수있는 수단이 있어야합니다. 데이터베이스 메타 데이터는 어떤 데이터베이스가 어떤 개발 상태에 있으며 어떤 테이블에 버전 제어 가능 데이터 등이 있는지 알려줍니다.


또한 데이터베이스 확장 속성 계열의 절차를 통해 저장된 데이터베이스의 버전을 사용하고 있습니다. 내 응용 프로그램에는 각 버전 단계 (예 : 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/ . http://rusanu.com/2009/05/15/version-control-and-your-database/


마이그레이션 솔루션을 볼 수도 있습니다. 이를 통해 C # 코드로 데이터베이스 스키마를 지정하고 MSBuild를 사용하여 데이터베이스 버전을 위아래로 롤업 할 수 있습니다.

현재 DbUp 사용하고 있으며 잘 작동하고 있습니다.


먼저, 올바른 버전 관리 시스템을 선택해야합니다.

  • 중앙 집중식 버전 관리 시스템-사용자가 파일 작업 전후에 체크 아웃 / 체크인하고 파일이 단일 중앙 서버에 유지되는 표준 시스템

  • 분산 버전 제어 시스템-리포지토리가 복제되고 각 복제본이 실제로 리포지토리의 전체 백업이므로 시스템에 충돌이 발생하면 복제 된 리포지토리를 사용하여 복원 할 수 있습니다. 모든 버전 제어 시스템의 핵심 인 저장소를 설정해야합니다.이 모든 내용은 다음 기사에서 설명합니다. http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

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

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

  • Visual Studio 및 SQL Server 데이터 도구

  • 타사 도구 ApexSQL 소스 제어

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


소스 코드 제어 시스템으로의 덤프를 조금 더 빠르게하기 위해 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


얼마 전 DMO와 VSS 객체를 사용하여 전체 DB를 스크립트하고 VSS로 가져 오는 VB 기본 모듈을 찾았습니다. 나는 그것을 VB Script로 바꾸고 here 게시했다. VSS 호출을 쉽게 꺼내고 DMO를 사용하여 모든 스크립트를 생성 한 다음 VBScript를 호출하는 동일한 배치 파일에서 SVN을 호출하여 체크인 할 수 있습니까?

데이브 J


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

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

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


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

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

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

모든 데이터를 유지해야하는 경우 데이터베이스 백업을 유지하고 비교를 수행하기 위해 Redgate ( http://www.red-gate.com/ ) 제품을 사용하는 것이 좋습니다. 그들은 싸게 오지 않지만 모든 페니의 가치가 있습니다.


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

대부분 스키마를 버전 화하고 소량의 참조 데이터를 원한다면 SubSonic Migration 을 사용하여 처리 할 수 ​​있습니다. 특정 버전으로 쉽게 마이그레이션 할 수 있다는 이점이 있습니다.


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





version-control