소스 제어 하의 저장 프로 시저, 모범 사례


16

현재 Tortoise SVN을 사용하여 .NET 웹 응용 프로그램을 소스 제어합니다. SQL Server 저장 프로 시저를 소스 제어로 가져 오는 가장 좋은 방법은 무엇입니까? 현재 VS 2010을 개발 환경으로 사용하고 있으며 SSDT (SQL Server Data Tools)를 사용하여 오프 프레미스 SQL Server 2008 R2 데이터베이스에 연결하고 있습니다.

내가 과거에했던 일은 procs를 .sql 파일에 저장 하고이 파일을 소스 제어하에 유지하는 것입니다. 이보다 더 효율적인 방법이 있어야한다고 확신합니까? 프로덕션 시스템의 VS2010, SSDT 또는 SQL Server에 설치할 수있는 확장 기능이 있습니까?


2
Visual Studio에서 SSDT 프로젝트 유형을 사용하는 경우 해당 프로젝트를 소스 제어에 추가하십시오. 그게 다야.
Mark Storey-Smith

1
목표를 명확히하십시오. 데이터베이스 객체의 버전을 찾고 있습니까, 아니면 이것을 배포 플랫폼으로 사용하려고하십니까?
Jon Seigel

답변:


14

Redgate의 도구와 같은 도구가 있지만 항상 솔루션의 데이터베이스 프로젝트 (SSDT?)에도 SQL 파일로 저장하는 것이 가장 좋습니다.

이와 함께 다음 지침을 제안합니다.

  • 항상 SVN 버전을 "현재"/ "최신"으로 가정
  • 실행하는 모든 스크립트 if exists then drop의 시작에 적절한 " " 이 있는지 확인하십시오
  • 권한이 있으면 스크립트를 작성하십시오

SSMS에서 직접 스크립팅하여 이러한 SQL 파일을 처음 만들 수 있으며 SSMS가 모든 " drop"및 " create" 및 권한 을 스크립팅하도록 설정할 수 있습니다 .


나는 데이터베이스 프로젝트 유형을 알지 못했고 SSDT를 탐색하기 시작했지만 유망한 것으로 보입니다. 타사 도구에 대한 종속성이 없으므로이 솔루션을 선택했으며 .sql 파일을 현재 소스 컨트롤에 쉽게 삭제할 수 있습니다.
QFDev

또한 제품에 대한 개발자의 권리와 소스 제어를 통해서만 배포 할 수있는 권한을 허용하지 않습니다.
HLGEM

3
다른 뷰 / 프로세스가 참조하는 테이블 / 뷰를 변경하는 경우 "삭제 된 경우 새 정의로 다시 작성"하십시오. 이전 구조를 가정하여 다시 컴파일하지 않고 쿼리 계획을 다시 사용하여 이러한 종속 뷰의 출력이 손상 (열 유형 및 내용이 이동했지만 이름이 아닌)되는 상황에 부딪 쳤습니다. alter가 sysdepends 레코드를 따라 필요에 따라 계획을 무효화하고 drop + create는 그러한 레코드를 삭제하지 않고 create가 스캔하지 않기 때문에 안전한 옵션은 "존재하지 않으면 더미 작성"과 "alter table / view / proc"입니다. 매달려있는 참조.
David Spillett

당신이 버전 제어에 트리거가있는 경우 @DavidSpillett에 의한 의견은 더욱 중요하기 때문에 드롭 + 일어날 안, 심지어 교착 상태에 실패 할 수 있습니다 만들 + ALTER 더미 생성
제임스 Z

4

소스 파일에 SQL 파일을 저장하면 SQL 파일 만 제어 할 수 있습니다. 실제 데이터베이스 객체의 변경 사항을 제어하지 않으며 여러 사용자가 동일한 데이터베이스 객체를 동시에 변경하는 것을 방지하지도 않습니다 (또한 제어하에 원하는 것으로 생각합니다). 우리가 사용하는 것은 타사 도구입니다 ( ApexSQL 버전)), SSMS 및 VS와 통합되며 개체의 데이터베이스 버전 또는 소스 제어 버전 중 어느 것을 사용할지 선택할 수 있습니다. 데이터베이스 버전을 편집하는 경우 자동으로 나에게만 체크 아웃되므로 다른 사람이 편집 할 수 없습니다 (다른 사용자의 변경 사항을 병합하지 않음). 다시 체크인 할 때만 다른 사람이 수정할 수 있습니다. 그리고 SC 버전을 라이브 객체의 버전과 다를 수 있습니다 (낮으로 떠날 때 사용하고 편집을 마치고 다음에 테스트 할 계획입니다).



3

시험 Ankhsvn 을 적극 권장하고 무료로 .

홈페이지에서 :

AnkhSVN은 Microsoft Visual Studio 2005, 2008, 2010의 Subversion 소스 제어 공급자입니다. 및 2012 .

AnkhSVN은 Visual Studio에서 지원하는 모든 프로젝트 유형에 Apache ™ Subversion® 소스 코드 관리 지원을 제공하며 Microsoft Visual Studio IDE 내에서 직접 가장 일반적인 버전 제어 작업을 수행 할 수 있습니다.

보류중인 변경 사항 대시 보드는 개발 프로세스에 대한 고유 한 통찰력을 제공하며 소스 코드 및 문제 관리 기능에 쉽게 액세스 할 수 있습니다. SCC (deep source code control) 통합을 통해 개발에 집중할 수 있으며 AnkhSVN은 모든 변경 사항을 추적하고 특정 요구를 효과적으로 처리 할 수있는 도구를 제공합니다.


3

RedGate와 Visual Studio의 데이터베이스 프로젝트를 모두 시도했으며 데이터베이스 프로젝트에 데이터베이스 정의를 저장하는 것을 선호합니다. 데이터베이스가 솔루션의 일부가 되 자마자 선호하는 소스 제어 제공자를 사용할 수 있습니다. 대부분 뛰어난 Visual Studio 통합 기능이 있습니다.

SSDT 도구를 사용하면 데이터베이스 정의의 '최신 버전'이 있으므로 스키마를 쉽게 비교하고 스키마 업그레이드 스크립트를 생성 할 수 있습니다.

즉, 스키마는 일반적으로 적도의 일부일뿐입니다. 실제로 데이터베이스에는 이미 많은 양의 데이터가 있습니다. 그리고 내 사용자는 느슨해지면 오히려 실망하는 경향이 있습니다.

따라서 v1.0을 출시하자마자 업그레이드 스크립트를 유지 관리해야합니다. 때로는 스키마 변경 사항이 포함되어 있지만 다른 테이블의 내용을 기반으로 기본값을 만들어야하는 경우가 많으며 데이터 등을 시드 할 때까지 특정 제약 조건을 해제해야합니다. 일반적으로 스키마를 업그레이드하는 것만으로는 충분하지 않습니다. 이 업그레이드 스크립트를 데이터베이스 프로젝트의 별도 폴더에 두는 것이 좋습니다. 이들은 일반적으로 'v1.0에서 v1.1로 업그레이드'처럼 보입니다.

내 데이터베이스에는 항상 현재 버전 번호를 알려주는 참조 테이블이 있으므로 호환되지 않는 업그레이드를 차단할 수 있습니다. 업그레이드 스크립트의 첫 번째 문장은 현재 버전을 확인하고 예상과 다른 경우 구제합니다.

데이터베이스 프로젝트의 또 다른 이점은 동일한 스키마를 기반으로 다른 데이터 세트를 배치 할 수 있다는 것입니다. 개발, QA 팀, 사용자 수락 테스트 및 자동화 된 통합 테스트를위한 다른 데이터 세트가 있습니다. 데이터베이스 프로젝트에는 배포 후 스크립트가 하나만있을 수 있으므로 여기서는 '마스터'프로젝트를 참조하는 새 데이터베이스 프로젝트를 만들고 해당 프로젝트의 사후 배포 프로세스의 사용자 지정 데이터 집합을 만드는 것이 좋습니다.

이것들은 나의 2 센트였습니다. 무엇을 제안 하든지 무엇보다도 그것은 당신과 당신의 팀에 맞고 대부분의 일반적인 작업을 희망적으로 지원해야합니다.


0

나는 도구를 직접 작성했다.

무료로 다운로드 할 수 있습니다-http: //www.gitsql.net

나는 그것이 같은 최종 목표를 달성하고자하는 다른 사람들에게 도움이되기를 바랍니다.

다음은 SQL Server를 소스 제어하는 ​​방법을 설명하는 기사입니다. http://gitsql.net/documentation-04_SQL_Server_and_GIT

가능한 한 쉽게 만들려고 노력했습니다. (3 화면)

  • SQL Server에 연결
  • 객체 선택
  • / import로 내보낼 폴더 선택

또한 실수로 가져 오거나 내보낼 개별 객체를 선택할 수있는 기능을 추가했습니다. 개발하는 동안 훨씬 쉬워집니다.

일반적으로 저장 프로 시저와 테이블을 변경 한 다음이 두 개체를 GIT 디렉터리로 내 보냅니다.

그런 다음 소스 트리를 사용하여 변경 사항을 시각적으로보고 행복하다면 비트 버킷에 커밋합니다.


4
무료 다운로드 – 20 개 개체 만. 이 답변은 귀하의 제품에 대한 광고입니다.
Thronk

-1

우리 회사는 방금 SQL 데이터베이스 용 스크립트 를 쉽게 추출하고 , 비교할 수 있고, 스크립트를 실시간 데이터베이스와 빠르게 비교하기 위해 WinMerge시작할 수 있으며 , 스크립트 업데이트 또는 변경 사항 적용의 차이점동기화 할 수있는 이 새로운 도구 ( 무료 )를 개발했습니다. 더 복잡하고 더 많은 위험을 수반하는 테이블을 제외하고 데이터베이스에.

Servantt는 SQL Server 데이터베이스를 버전 제어 스크립트와 비교하기위한 WinMerge입니다.

소프트웨어 개발에 대한 모범 사례를 지원하고 장려합니다.

  • 데이터베이스 개체를 버전 제어 상태로 유지 (*)
  • 프로덕션 환경에서 개발자의 액세스 권한 제거
  • 성능 병목 현상 및 명명 표준에 대한 절차 /보기 변경 사항에 대한 DBA 검토
  • 정규화 된 식별자와 대괄호 구분 기호를 사용하여 개체 이름 지정 (CREATE PROCEDURE / VIEW / FUNCTION / etc 스크립트 수정)

(*) 스크립트는 Git, Subversion, TFS, Source Safe 또는 기타 VCS의 작업 복사본이 될 수있는 로컬 폴더에 저장됩니다.

무료 다운로드 : http://servantt.com

프로페셔널 버전 (아직 개발 중)은 완전히 다른 짐승이 될 것입니다. IIS 업데이트, Windows 서비스 업데이트 등과 같은 작업 자동화를위한 배포 자동화 (릴리스 관리)를 목표로합니다.


이 도구는 작동하지 않습니다.
Neeraj Kumar 2016 년

@NeerajKumar 페이지에 문제를 설명 할 수있는 "연락처"주소가 있습니다. 기꺼이 도와 드리겠습니다. 천명 이상의 활동적인 사용자가 있습니다. 어떤 의미에서 작동한다고 가정합니다 :-)
drizin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.