SQL Server를 사용한 버전 제어


14

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

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

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

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


1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?왜 스스로 시험해 보는 것을 두려워합니까? 그냥 잡고 놀아주십시오.
yannis

@YannisRizos-나는 이것에서 너무 많은 반응을 얻지 못하면 분명히 할 것입니다. 기본적으로 시간을 절약하고 누군가가 전에 함께 일한 적이 있는지 또는 누군가가 박쥐에서 바로 시도하고 테스트 한 것이 있는지 확인하고 싶었습니다. 실험 시간을 절약 할 수 있습니다.

당신이 여기 얼마나 새로운 지 알았습니다. 프로그래머 SE는 시간을 절약하기 위해 질문을하기에 좋은 곳이 아닙니다. 우리 는 여러분이 직접 질문을하기 전에 스스로 연구 를 수행 할 것을 기대합니다 . 또는 채팅으로 문의하십시오 (그러나 확실한 답변은 기대하지 마십시오). 마지막 문장이 핵심 질문이 아니기 때문에 실제로 중요하지 않습니다. 실제로 매우 좋은 질문입니다 (적절하게 태그가 지정되어 있으므로 새로운 사용자에게는 드문 경우입니다).
yannis

@YannisRizos-감사합니다. 채팅으로 이동하여 ScriptDB4Svn에 대한 피드백을 얻을 수 있는지 확인하고 핵심 질문에 대한 업데이트가 있는지 여기에서 다시 확인합니다. 편집 : 20 담당자가 될 때까지 채팅을 할 수없는 것 같습니다. 오, 인내심 같아요.

답변:


2

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

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


기본적으로 Management Studio에서 작업을 수행 한 다음 스크립트를 SVN 디렉토리로 내보내고 기본적으로 작업 할 때마다 수행합니다 (내 보낸 모든 파일을 내보낼 때마다)? 나는 그것이 효과가 있다고 생각한다. 그것은 SVN 기능을 되돌릴 수있는 기능을 유지하지만, 번거로울 것입니다. 어쩌면 나는 RedGate 가격을 확인하고 그 가치가 있는지 알아볼 것입니다.

@Scott-수동 방법은 작동 할 수 있으므로 SQL 개발에 대해 다르게 생각하면됩니다. 스크립트 버전의 객체는 "공식"버전이고 SQL의 버전은 컴파일 된 버전입니다. 소스 코드처럼.
JohnFx

Mike Nakis가 제공 한 링크의 도움말을 사용하여 수동으로 작업을 수행하고 스크립트를 구현하기로 결정했지만 지금은 Management Studio에 내장 된 GUI를 사용하여 DB 작성 스크립트를 내 보냅니다. 작동하고 SVN을 그런 식으로 버전 관리를 유지하십시오. 수동으로 작업하기로 결정했기 때문에

1

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

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

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


0

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

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


이것을 조금 더 설명하고 이와 같은 것을 설정하는 가이드가 있습니까?

실제로 Rails를 .NET 기술과 함께 사용하는 것은 좋은 생각이 아닙니다.
대체

Rails 마이그레이션 장 ( guides.rubyonrails.org/migrations.html ). 시작하기에 충분하고 이것이 왜 좋은 아이디어인지에 대한 모든 배경을 제공해야합니다. @altern-Rails를 사용하여 데이터베이스를 조작하고 버전을 관리하기 때문에 .NET 기술에 영향을 미칩니다. 레일을 사용하지 않는 것과 같은 방식으로 DB에 액세스하여 사용할 수 있습니다. 귀하의 우려 사항에 대한 언급이 마음에 들지 않습니다. IronRuby가 Ruby 및 Rails의 .Net 구현이 아닙니까?
Vinnie

IronRuby가 Ruby 및 Rails의 .Net 구현이 아닙니까? IronRuby는 Ruby 의 .NET 구현입니다 . Rails가 IronRuby에서 제대로 작동하는지 잘 모르겠습니다. db 버전 관리의 목적으로 Rails를 사용하는 것에 대한 나의 일반적인 주장은 Ruby 및 관련 기술 (RoR, migratinos)이 특히 db 버전 관리와 같은 간단한 작업에 대해 매우 가파른 학습 곡선을 가지고 있다는 것입니다. 마이그레이션뿐만 아니라 다른 목적으로도 사용할 수 있습니다. 그렇지 않으면 많은 긍정적 인 효과없이 프로젝트의 복잡성을 증가시킵니다.
대체

0

이것은 전에 스택 오버 플로우에서 논의되었습니다 : 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가 디버깅 레이아웃에서 편집 레이아웃으로 전환 될 때마다 기다릴 필요가 없도록 앱이 종료되기 직전에 내 앱에서 내보내기를 수행하기 위해 외부 앱을 시작하여 종료 할 수 있습니다 바로.


제공 한 두 개의 링크는 내가 직접 설정하는 데 관심이있는 것이므로 기본적으로 지금 수동 단계를 자동으로 수행 할 수 있습니다. 감사합니다!

0

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

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

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

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

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


자세히 설명해 주 Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.시겠습니까? 답변 주셔서 감사합니다.

@ 스콧 : 좀 더 자세하게 답변을 편집했습니다.
Dean Harding 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.