복붙노트

[SQL] 데이터베이스 구조 변경에 대한 버전 관리 시스템이 있습니까?

SQL

데이터베이스 구조 변경에 대한 버전 관리 시스템이 있습니까?

나는 종종 다음과 같은 문제로 실행합니다.

나는 데이터베이스에 새 테이블 또는 열을 필요로 프로젝트에 약간의 변화에서 작동합니다. 나는 데이터베이스 수정을하고 나의 일을 계속한다. 일반적으로, 나는 그들이 라이브 시스템에 복제 할 수 있도록 변경 내용을 적어 기억한다. 그러나, 나는 항상 내가 변경 한 나는 항상 적어 기억하지 못하는 기억하지 않습니다.

그래서, 라이브 시스템에 밀어하고 우, 더 NewColumnX가 없다는 것을 큰, 명백한 오류가 발생합니다.

에 관계없이이이 상황에 대한 가장 좋은 방법하지 않을 수 있다는 사실, 데이터베이스에 대한 버전 관리 시스템이있다? 나는 특정 데이터베이스 기술에 대해 걱정하지 않는다. 난 그냥 존재하는 경우 알고 싶어요. MS SQL 서버, 다음 큰 작업을 발생합니다.

해결법

  1. ==============================

    1.루비 온 레일즈, 마이그레이션의 개념있다 - 빠른 스크립트가 데이터베이스를 변경할 수 있습니다.

    루비 온 레일즈, 마이그레이션의 개념있다 - 빠른 스크립트가 데이터베이스를 변경할 수 있습니다.

    당신은 (예 : 열을 추가하는 등)를 DB 버전을 증가시키기 규칙이 있습니다 (예 : 열을 제거로) 버전을 다운 그레이드 규칙 마이그레이션 파일을 생성합니다. 각 마이그레이션 번호가되며, 테이블은 현재 DB 버전을 추적합니다.

    버전 살펴보고 필요한 스크립트를 적용 : "마이그레이션 dB"최대 마이그레이션하려면라는 명령을 실행합니다. 당신은 비슷한 방법으로 아래로 마이그레이션 할 수 있습니다.

    당신은 당신이 새로운 스크립트에서 확인 데이터베이스를 변경할 때마다, 어떤 개발자는 최신 버전으로 로컬 DB를 가지고 적용 할 수 있습니다 - 마이그레이션 스크립트 자체는 버전 관리 시스템에 보관됩니다.

  2. ==============================

    2.나는 데이터베이스를 작성하기위한 소스 파일을 사용한다는 점에서 나는 약간 구식입니다. 프로젝트 database.sql 및 프로젝트 updates.sql - - 스키마와 지속적인 가상 데이터 및 수정에 대한 두 번째의 첫 번째 2 개 파일이 실제로있다. 물론, 모두 소스 제어에서입니다.

    나는 데이터베이스를 작성하기위한 소스 파일을 사용한다는 점에서 나는 약간 구식입니다. 프로젝트 database.sql 및 프로젝트 updates.sql - - 스키마와 지속적인 가상 데이터 및 수정에 대한 두 번째의 첫 번째 2 개 파일이 실제로있다. 물론, 모두 소스 제어에서입니다.

    데이터베이스 변경, 나는 첫 번째 프로젝트 - database.sql의 주요 스키마를 업데이트 할 때, 예를 ALTER 표 문에, 프로젝트 - updates.sql에 관련 정보를 복사합니다. 나는 다음 완료를 잘 때까지, 테스트, 개발 데이터베이스에 반복 처리를 업데이트를 적용 할 수 있습니다. 그런 다음 다시 파일, 테스트 확인 및 생산에 적용됩니다.

    구성 - - 또한, 나는 보통 DB에 테이블이 같은 :

    SQL

    CREATE TABLE Config
    (
        cfg_tag VARCHAR(50),
        cfg_value VARCHAR(100)
    );
    
    INSERT INTO Config(cfg_tag, cfg_value) VALUES
    ( 'db_version', '$Revision: $'),
    ( 'db_revision', '$Revision: $');
    

    그 후, 나는 업데이트 섹션에 다음을 추가합니다

    UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';
    

    db_version은 데이터베이스가 다시 때 변경하고, db_revision 나에게 DB를 기준 떨어져 얼마나 멀리 표시를 제공됩니다.

    나는 자신의 별도의 파일에 업데이트를 유지할 수 있지만, 나는 그들에게 모두 함께 사용 컷 매쉬 및 관련 섹션을 추출하는 붙여 넣기로 결정했습니다. 좀 더 하우스 키핑 즉, 삭제, 순서에 ':'$ 개정 1.1 $에서 그들을 동결.

  3. ==============================

    3.MyBatis로 (이전 iBATIS는) 명령 행에서 사용할 수있는 스키마 마이그레이션 도구가 있습니다. 어떤 프로젝트와 함께 사용할 수 있지만 그것은 자바로 작성되었습니다.

    MyBatis로 (이전 iBATIS는) 명령 행에서 사용할 수있는 스키마 마이그레이션 도구가 있습니다. 어떤 프로젝트와 함께 사용할 수 있지만 그것은 자바로 작성되었습니다.

  4. ==============================

    4.레드 게이트는 SQL 소스 제어라는 제품이 있습니다. 그것은 프로 TFS, SVN, SourceGear 볼트, 볼트, 의욕, 억지로, 그리고 힘내과 통합됩니다.

    레드 게이트는 SQL 소스 제어라는 제품이 있습니다. 그것은 프로 TFS, SVN, SourceGear 볼트, 볼트, 의욕, 억지로, 그리고 힘내과 통합됩니다.

  5. ==============================

    5.내가보기 엔 SQL 델타를 추천합니다. 난 그냥 내가 다있을 때 제 기능을 코딩은 diff 스크립트를 생성하는 데 사용할 내 소스 제어 도구 (의욕 :))에 그 스크립트를 확인

    내가보기 엔 SQL 델타를 추천합니다. 난 그냥 내가 다있을 때 제 기능을 코딩은 diff 스크립트를 생성하는 데 사용할 내 소스 제어 도구 (의욕 :))에 그 스크립트를 확인

    그들은는 SQL 서버와 오라클 버전을 모두 가지고있다.

  6. ==============================

    6.나는 아무도 자바 기반 및 JDBC를 지원하는 거의 모든 데이터베이스에 대한 작업을해야 오픈 소스 도구 liquibase 언급 없는지 궁금합니다. 레일에 비해 그 스키마 변경을 수행하는 대신 루비 XML을 사용한다. 내가 도메인 특정 언어에 대한 XML을 싫어하지만 XML의 아주 멋진 장점은 liquibase 같은 다시 특정 작업을 롤백하는 방법을 알고있다

    나는 아무도 자바 기반 및 JDBC를 지원하는 거의 모든 데이터베이스에 대한 작업을해야 오픈 소스 도구 liquibase 언급 없는지 궁금합니다. 레일에 비해 그 스키마 변경을 수행하는 대신 루비 XML을 사용한다. 내가 도메인 특정 언어에 대한 XML을 싫어하지만 XML의 아주 멋진 장점은 liquibase 같은 다시 특정 작업을 롤백하는 방법을 알고있다

    <createTable tableName="USER"> 
       <column name="firstname" type="varchar(255)"/>
    </createTable>
    

    당신은 당신의 자신의이 문제를 처리 할 필요가 없습니다

    순수 SQL 문이나 데이터 가져 오기도 지원됩니다.

  7. ==============================

    7.대부분의 데이터베이스 엔진은 파일에 데이터베이스를 덤프 지원해야한다. 나는 MySQL은 어쨌든 않습니다 알고있다. 당신은 서브 버전에이 제출 수, 또는 당신이 무엇을 사용할 수 있도록이 그냥 텍스트 파일이어야합니다. 너무 파일에 DIFF를 실행하기 쉬운 것입니다.

    대부분의 데이터베이스 엔진은 파일에 데이터베이스를 덤프 지원해야한다. 나는 MySQL은 어쨌든 않습니다 알고있다. 당신은 서브 버전에이 제출 수, 또는 당신이 무엇을 사용할 수 있도록이 그냥 텍스트 파일이어야합니다. 너무 파일에 DIFF를 실행하기 쉬운 것입니다.

  8. ==============================

    8.당신은 SQL 서버를 사용하는 경우는 (데이터베이스의 Visual Studio 버전 일명) 데이터 야 이길 어려울 것이다. 당신이 당신의 소스 제어 데이터베이스의 버전과 생산의 버전 사이의 비교 스키마를하고, 그것의 묘리를 터득하면 바람이다. 그리고 클릭으로 당신은 diff DDL을 생성 할 수 있습니다.

    당신은 SQL 서버를 사용하는 경우는 (데이터베이스의 Visual Studio 버전 일명) 데이터 야 이길 어려울 것이다. 당신이 당신의 소스 제어 데이터베이스의 버전과 생산의 버전 사이의 비교 스키마를하고, 그것의 묘리를 터득하면 바람이다. 그리고 클릭으로 당신은 diff DDL을 생성 할 수 있습니다.

    매우 도움이 MSDN에 교육용 비디오가있다.

    나는 DBMS_METADATA와 두꺼비에 대해 알고 있지만, 누군가가 오라클의 데이터 야 가지고 올 수 있다면 다음 생활은 정말 달콤한 것입니다.

  9. ==============================

    9.특정 배포에 대한 모든 변경 사항을 찾을 수 있도록 버전 컨트롤러에서 초기 생성 테이블 문을 가지고, 다음, ALTER TABLE 문, 그러나 결코 편집 파일, 이상적으로 순차적으로 명명 된 단지 더 ALTER 파일, 심지어 "변경 세트"로 추가합니다.

    특정 배포에 대한 모든 변경 사항을 찾을 수 있도록 버전 컨트롤러에서 초기 생성 테이블 문을 가지고, 다음, ALTER TABLE 문, 그러나 결코 편집 파일, 이상적으로 순차적으로 명명 된 단지 더 ALTER 파일, 심지어 "변경 세트"로 추가합니다.

    나는 특정 배포 테이블 B에 대해, 예를 들어, 종속성을 추적 볼 수 있다는 강건한 부분은 테이블 A. 전에 업데이트해야 할 수도 있습니다

  10. ==============================

    10.Oracle의 경우, 나는 개별 파일 (테이블 당 예를 들어, 하나 개의 파일)의 번호로 스키마를 덤프 할 수 두꺼비를 사용합니다. 나는 억지로에이 컬렉션을 관리하는 몇 가지 스크립트를 가지고,하지만 난 쉽게 그냥 개정 제어 시스템에 대한에서 행할해야한다고 생각.

    Oracle의 경우, 나는 개별 파일 (테이블 당 예를 들어, 하나 개의 파일)의 번호로 스키마를 덤프 할 수 두꺼비를 사용합니다. 나는 억지로에이 컬렉션을 관리하는 몇 가지 스크립트를 가지고,하지만 난 쉽게 그냥 개정 제어 시스템에 대한에서 행할해야한다고 생각.

  11. ==============================

    11.오라클 패키지 DBMS_METADATA를 살펴 보자.

    오라클 패키지 DBMS_METADATA를 살펴 보자.

    특히, 다음과 같은 방법이 특히 유용합니다 :

    당신은 그들이 작동하는 방법에 익숙해지면 (꽤 자기 설명은) 당신은 소스 제어에서 넣을 수있는 텍스트 파일에 이러한 방법의 결과를 덤프하는 간단한 스크립트를 작성할 수 있습니다. 행운을 빕니다!

    뭔가 MSSQL에 대한 간단한있을 경우 확실하지.

  12. ==============================

    12.나는 코딩과 병행 내 DB 해제 스크립트를 작성하고, SS에서 프로젝트의 특정 섹션에 릴리스 스크립트를 유지한다. 나는 dB 변화를 필요로하는 코드를 변경하면, 나는 동시에 출시 스크립트를 업데이트합니다. 출시에 앞서, 나는 깨끗한 dev에 DB (현명한 생산에서 복사 구조)의 분리 스크립트를 실행하고 내 최종 시험을한다.

    나는 코딩과 병행 내 DB 해제 스크립트를 작성하고, SS에서 프로젝트의 특정 섹션에 릴리스 스크립트를 유지한다. 나는 dB 변화를 필요로하는 코드를 변경하면, 나는 동시에 출시 스크립트를 업데이트합니다. 출시에 앞서, 나는 깨끗한 dev에 DB (현명한 생산에서 복사 구조)의 분리 스크립트를 실행하고 내 최종 시험을한다.

  13. ==============================

    13.나는 몇 년 동안 떨어져과에 이런 짓을 한 - 관리 (또는 관리하려고) 스키마 버전. 가장 좋은 방법은 당신이 가지고있는 도구에 따라 달라집니다. 당신이 퀘스트 소프트웨어 도구 "스키마 관리자"를 얻을 수 있다면 당신은 좋은 모양 수 있습니다. 오라클은 내가하지 않는 것이 좋습니다 또한 "스키마 관리자"라고 자신의 열등 도구 (많은 혼란을?)가 있습니다.

    나는 몇 년 동안 떨어져과에 이런 짓을 한 - 관리 (또는 관리하려고) 스키마 버전. 가장 좋은 방법은 당신이 가지고있는 도구에 따라 달라집니다. 당신이 퀘스트 소프트웨어 도구 "스키마 관리자"를 얻을 수 있다면 당신은 좋은 모양 수 있습니다. 오라클은 내가하지 않는 것이 좋습니다 또한 "스키마 관리자"라고 자신의 열등 도구 (많은 혼란을?)가 있습니다.

    자동화 된 도구없이 다음 직접 스크립트와 DDL 파일을 사용할 것입니다 (여기에 데이터 야에 대한 다른 의견을 참조). , 접근 방식을 선택을 문서화하고, 엄격를 따르십시오. 나는 전체 데이터베이스의 전체 DDL 수출을 선호 그래서 내가 할 수있는 능력있는 같이, 주어진 순간에 데이터베이스를 다시를 만들거나 개발자 스키마 (I 제품에있어 경우, (나는 DBA 해요 경우) -development 모드).

  14. ==============================

    14.PL SQL 개발자, 자동화 주위에서 도구, 비주얼 소스 세이프와 OK (하지만 큰되지 않음)를 작동 저장소위한 플러그인이있다.

    PL SQL 개발자, 자동화 주위에서 도구, 비주얼 소스 세이프와 OK (하지만 큰되지 않음)를 작동 저장소위한 플러그인이있다.

    http://www.allroundautomations.com/plsvcs.html

  15. ==============================

    15.ER Studio는이 도구로 데이터베이스 스키마를 반전하고 다음 라이브 데이터베이스에 비교할 수 있습니다.

    ER Studio는이 도구로 데이터베이스 스키마를 반전하고 다음 라이브 데이터베이스에 비교할 수 있습니다.

    예 : ER 스튜디오로 개발 스키마를 리버스 - 생산에 비교하며 차이점을 모두 나열합니다. 이 스크립트를 변경하거나 자동을 통해 푸시 할 수 있습니다.

    당신이 ER Studio에서 스키마가 있으면, 할 수 있습니다 중 하나 작성 스크립트 저장 또는 버전 제어에서 독점적 인 바이너리로 저장하고 저장. 혹시 계획의 과거 버전으로 다시 가고 싶은 경우에, 다만 그것을 확인하고 귀하의 DB 플랫폼에 밀어 넣습니다.

  16. ==============================

    16.Ruckusing라는 PHP5 "데이터베이스 마이그레이션 프레임 워크는"이있다. 나는 그것을 사용하지 않은, 그러나 당신이 필요로 할 때, 당신은 단지 소스 파일을 추적해야하고 데이터베이스를 생성하기 위해 언어를 사용하는 경우 예를 들면, 아이디어를 보여줍니다.

    Ruckusing라는 PHP5 "데이터베이스 마이그레이션 프레임 워크는"이있다. 나는 그것을 사용하지 않은, 그러나 당신이 필요로 할 때, 당신은 단지 소스 파일을 추적해야하고 데이터베이스를 생성하기 위해 언어를 사용하는 경우 예를 들면, 아이디어를 보여줍니다.

  17. ==============================

    17.당신은 SQL 서버 프로젝트의 일환으로 데이터베이스 개체에 대한 스크립트를 생성하는 비주얼 스튜디오에서 마이크로 소프트 SQL Server 데이터 도구를 사용할 수 있습니다. 그런 다음 비주얼 스튜디오에 내장 된 소스 제어 통합을 사용하여 소스 제어에 스크립트를 추가 할 수 있습니다. 또한, SQL 서버 프로젝트는 컴파일러를 사용하여 데이터베이스 오브젝트를 확인하고 기존 데이터베이스를 업데이트하거나 새로 만들 수있는 배포 스크립트를 생성 할 수 있습니다.

    당신은 SQL 서버 프로젝트의 일환으로 데이터베이스 개체에 대한 스크립트를 생성하는 비주얼 스튜디오에서 마이크로 소프트 SQL Server 데이터 도구를 사용할 수 있습니다. 그런 다음 비주얼 스튜디오에 내장 된 소스 제어 통합을 사용하여 소스 제어에 스크립트를 추가 할 수 있습니다. 또한, SQL 서버 프로젝트는 컴파일러를 사용하여 데이터베이스 오브젝트를 확인하고 기존 데이터베이스를 업데이트하거나 새로 만들 수있는 배포 스크립트를 생성 할 수 있습니다.

  18. ==============================

    18.우리는 꽤 좋은 성공 MS 팀 시스템 데이터베이스 버전을 사용했습니다. 그것은 더 또는 덜 원활하게 TFS 버전 제어 및 Visual Studio와 통합 우리가 쉽게 등을 발동, 뷰, 저장 관리합니다 할 수 있습니다. 충돌 해결은 통증이있을 수 있지만, 당신이 일을 끝낼하면 버전 기록이 완료됩니다. 이후, QA 및 생산에 대한 마이그레이션은 매우 간단합니다.

    우리는 꽤 좋은 성공 MS 팀 시스템 데이터베이스 버전을 사용했습니다. 그것은 더 또는 덜 원활하게 TFS 버전 제어 및 Visual Studio와 통합 우리가 쉽게 등을 발동, 뷰, 저장 관리합니다 할 수 있습니다. 충돌 해결은 통증이있을 수 있지만, 당신이 일을 끝낼하면 버전 기록이 완료됩니다. 이후, QA 및 생산에 대한 마이그레이션은 매우 간단합니다.

    그것은하지만, 버전 1.0 제품의 말을 공정, 그리고 몇 가지 문제가없는 것은 아니다.

  19. ==============================

    19.Oracle 용 비교 스키마는 특히 다른 우리의 오라클 데이터베이스에서 마이그레이션 변화에 설계된 도구입니다. 당신이 완전한 기능 시험을위한 소프트웨어를 사용할 수 있습니다 다운로드 링크, 아래의 URL을 참조하십시오.

    Oracle 용 비교 스키마는 특히 다른 우리의 오라클 데이터베이스에서 마이그레이션 변화에 설계된 도구입니다. 당신이 완전한 기능 시험을위한 소프트웨어를 사용할 수 있습니다 다운로드 링크, 아래의 URL을 참조하십시오.

    http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm

  20. ==============================

    20.테이블에 대한 VCS의 부재에서 나는 위키에서 그들을 로그인 봤는데 변경합니다. 언제, 왜이 변경된 적어도 그때 볼 수 있습니다. 그것은 모든 사람이 그 일을하고 우리가 사용하는 여러 제품 버전을 가지고 완벽과는 거리가 먼, 그러나 아무것도보다 낫다.

    테이블에 대한 VCS의 부재에서 나는 위키에서 그들을 로그인 봤는데 변경합니다. 언제, 왜이 변경된 적어도 그때 볼 수 있습니다. 그것은 모든 사람이 그 일을하고 우리가 사용하는 여러 제품 버전을 가지고 완벽과는 거리가 먼, 그러나 아무것도보다 낫다.

  21. ==============================

    21.나는 두 가지 방법 중 하나를 권 해드립니다. 첫째, 사이베이스에서 파워 디자이너에 투자합니다. 기업용 에디션. 그것은 훨씬 더 물리적 데이터 모델을 설계 할 수 있도록합니다. 그러나 당신이 당신의 모델에서 확인할 수 있습니다 저장소와 함께 제공됩니다. 각각의 새로운 검사는 새 버전을 할 수 있습니다, 그것은 다른 버전으로, 심지어 그 당시 데이터베이스에 무엇을 어떤 버전을 비교할 수 있습니다. 그런 다음 모든 차이의 목록을 제시하고 마이그레이션해야하는 질문 ... 그리고 그것을 할 수있는 스크립트를 빌드합니다. 그것은 싼 아니지만 그것은 두 배 가격에 흥정하고 투자 수익 (ROI) 6 개월에 관한입니다.

    나는 두 가지 방법 중 하나를 권 해드립니다. 첫째, 사이베이스에서 파워 디자이너에 투자합니다. 기업용 에디션. 그것은 훨씬 더 물리적 데이터 모델을 설계 할 수 있도록합니다. 그러나 당신이 당신의 모델에서 확인할 수 있습니다 저장소와 함께 제공됩니다. 각각의 새로운 검사는 새 버전을 할 수 있습니다, 그것은 다른 버전으로, 심지어 그 당시 데이터베이스에 무엇을 어떤 버전을 비교할 수 있습니다. 그런 다음 모든 차이의 목록을 제시하고 마이그레이션해야하는 질문 ... 그리고 그것을 할 수있는 스크립트를 빌드합니다. 그것은 싼 아니지만 그것은 두 배 가격에 흥정하고 투자 수익 (ROI) 6 개월에 관한입니다.

    또 다른 아이디어는 DDL 감사 (오라클에서 작동)에 설정하는 것입니다. 이것은 당신이 만드는 모든 변화에 테이블을 생성합니다. 당신은 당신이 지난 지금에 자극을 데이터베이스 변경을 이동 타임 스탬프에서 변경 사항을 조회 할 경우, 당신은 당신이 한 모든 것을 정렬 된 목록을해야합니다. 절을 제거 할 경우 약간은 제로섬 변경 테이블 foo는 만들 좋아; 드롭 테이블 foo를 하였다; 당신은 쉽게 모드 스크립트를 구축 할 수 있습니다. 왜이 일을 두 배, 위키의 변화를 유지한다. 데이터베이스가 당신을 위해 그들을 추적 할 수 있습니다.

  22. ==============================

    22.두 책을 권장 : "리팩토링 데이터베이스"엠 블러와 Sadalage 및 엠 블러에 의해 "애자일 데이터베이스 기술"에 의해.

    두 책을 권장 : "리팩토링 데이터베이스"엠 블러와 Sadalage 및 엠 블러에 의해 "애자일 데이터베이스 기술"에 의해.

    누군가 레일 마이그레이션을 언급했다. 나는 그들이 레일 응용 프로그램으로도 외부의 큰 일을 생각합니다. 나는 우리가 레일로 이동하는 과정에 있었다 SQL 서버와 ASP 응용 프로그램에 그들을 사용했다. 당신은 VCS로 마이그레이션 스크립트 자체를 확인합니다. 여기에 주제에 실용적인 데이브 토마스에 의해 게시물입니다.

  23. from https://stackoverflow.com/questions/308/is-there-a-version-control-system-for-database-structure-changes by cc-by-sa and MIT license