SQL Server를 사용한 버전 제어 데이터베이스를 유지

새 프로젝트를 시작하고 SVN (Totoise 포함)을 버전 관리 시스템으로 사용하고 있습니다. 동일한 시스템을 사용하여 SQL Server 데이터베이스를 유지 관리 할 수 ​​있는지 궁금합니다.

내 테이블 / 함수 /보기 / 프로 시저 / 트리거 / 등을 버전 화하고 싶습니다. 어쨌든 테스트 데이터가 될 것이기 때문에 내 데이터는 아닙니다. 이 설정 방법을 잘 모르겠습니다. 나는 몇 가지 옵션을 보았지만 누락 된 것이 있는지, 내가 도망 갈 수 있도록 가이드 또는 무언가가 있는지 알고 싶습니다.

Red Gate를보고 들었지만 무료로 제공되는 제품을 찾고 있습니다. 나는 항상 내가 직접 무언가를 쓸 수 있다는 것을 알고 있지만, 실제로 그것에 시간을 보내려고하지는 않습니다.

내가 만난 것은 ScriptDB4Svn 이라는 오픈 소스 패키지였습니다 . 아무도 전에 이것을 사용 했습니까? 좋은가요? 필요한 작업을 수행 할 수 있습니까? 설정하기가 매우 간단합니까?



답변

기술적으로는 도구가 필요하지 않으며 개체를 직접 스크립팅하여 소스 제어로 확인할 수 있습니다. 도구가 없으면 조금 더 많은 작업이지만 확실히 실행할 수 있습니다.

BTW : 저는 RedGate 도구를 사용했는데 꽤 매끄럽고 그만한 가치가 있습니다.


답변

대부분 Microsoft 설정이있는 것 같습니다. 당신은에보고 할 수 데이터베이스 프로젝트 (이전 DataDude라고도 함). 기본적으로 Visual Studio에서 T-SQL을 최고급 언어로 바꿉니다. 당신은 할 수 있습니다 :

  • 프로젝트 컴파일-최종 스크립트를 만드는 것이 아니라 객체 이름 등이 존재하는지 확인합니다.
  • 정적 코드 분석을 수행합니다. 예를 들어 스키마를 포함하여 항상 객체를 참조해야합니다 (예 : [dbo] 30 %의 성능 향상을 위해 대부분의 경우)를 .
  • 다른 버전의 프로젝트를 비교하여 diff 스크립트를 작성하십시오.
  • 데이터베이스 또는 스크립트 (역 엔지니어)에서 프로젝트를 업데이트하십시오.
  • Intellisense.
  • 다이어그램 도구는 없습니다.

그들은 소스 제어 하에서 코드와 데이터베이스 코드를 잘 통합합니다. 당신이 경우 인간 업 좋다 – 스크립트 데이터베이스 오브젝트 (대신 SSMS에서 다빈치 도구를 사용하는) 당신은 또한 하나 개의 IDE를 사용하여 토지.


답변

Rails를 사용할 수 있습니다. Rails에는 적용하거나 롤백 할 수있는 데이터베이스 마이그레이션 개념이 있습니다. 내 경험상 데이터베이스를 버전 관리하는 가장 좋은 방법입니다. 이 마이그레이션 파일을 SVN으로 체크인합니다.

현재 프로젝트에서는 Ruby로 응용 프로그램을 개발하지 않지만 데이터베이스를 관리하기 위해 여전히 Rails를 사용하고 있습니다. 나는 다른 방법으로하지 않을 것입니다.


답변

이것은 전에 스택 오버 플로우에서 논의되었습니다 : https : //.com/questions/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

또한이 외부 기사는 http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated에 대한 추가 정보를 제공합니다 . Windows 응용 프로그램 형식의 샘플 코드와 함께 .

당신이하고 싶은 것은 내가 MS Access를 위해 내가 한 일이기 때문에, 나는 그것이 당신에게 아이디어를 줄 때를 대비하여 당신에게 한 일을 말해 줄 것입니다 : 나는 Ado의 스키마와 데이터를 변환하는 Ado2Xml이라는 모듈을 작성했습니다. -XML에 액세스 가능한 데이터베이스. 그러나 테이블과 뷰에 대해서만 알고 있습니다. 저장 프로 시저, 트리거, 아무것도 없습니다. 어쨌든,이 모듈은 MS-SQL로 원하는 것을 아마도 찾을 수있는 도구로 대체됩니다. 따라서 응용 프로그램이 시작될 때마다 데이터베이스의 타임 스탬프와 저장된 xml 파일의 타임 스탬프를 비교합니다. xml 파일이 최신 파일이면 데이터베이스를 삭제하고 Ado2Xml을 호출하여 xml 파일에서 다시 만듭니다. 내 응용 프로그램이 종료되면 반대의 경우가 발생합니다. Ado2Xml을 호출하여 데이터베이스를 xml 파일로 내 보냅니다. 사실은, 데이터베이스 스키마를 추출하는 ADO 오브젝트는 어떤 이유로 인해 상당히 느려서 내보내기 프로세스에 시간이 걸립니다. 따라서 응용 프로그램이 종료되고 Visual Studio가 디버깅 레이아웃에서 편집 레이아웃으로 전환 될 때마다 기다릴 필요가 없도록 앱이 종료되기 직전에 내 앱에서 내보내기를 수행하기 위해 외부 앱을 시작하여 종료 할 수 있습니다 바로.


답변

예, 이전 프로젝트에서 비슷한 도구 (자체 개발)를 사용했습니다. 모든 테이블, 뷰, sprocs, 트리거 등을 개별 .sql 파일로 스크립팅합니다. 그런 다음, 매일 밤마다 “개발”데이터베이스의 모든 것이 소스 제어에 반영되었는지 “확인”하는 스크립트가있었습니다.

따라서 일반적인 워크 플로는 코드를 변경하고 필요에 따라 개발 데이터베이스에서 해당 테이블 및 sproc을 변경 한 다음 스크립트 된 모든 .sql 파일을 새로 고치는 도구를 실행하는 것입니다. 그런 다음 모든 것을 한 번에 체크인합니다.

문제는 도구 실행을 잊어 버린 경우 데이터베이스가 “정확”했기 때문에 코드가 “작동”하고 단위 테스트가 통과되지만 새 sprocs / tables는 소스 제어가 아니라는 것입니다.

매일 밤마다 소스 코드를 체크 아웃 한 스크립트를 만든 다음 모든 스크립트를 새로 고치기 위해 도구를 실행합니다. 차이가있는 경우 누군가 변경 사항을 체크인하지 않고 이메일 알림이 생성되었음을 의미합니다. 기본적으로 소스 제어를 최신 상태로 유지하는 것을 잊지 않도록하는 방법 일뿐입니다.

며칠에 걸친 변경 작업을 수행하기가 어려워서 조금 성가신 것이었지만 아무것도없는 것보다 낫습니다 …