데이터베이스 구조 변경에 대한 버전 관리 시스템이 있습니까?
나는 종종 다음과 같은 문제에 부딪힌다.
데이터베이스의 새 테이블이나 열이 필요한 프로젝트의 몇 가지 변경 작업을 수행합니다.데이터베이스를 수정하고 작업을 계속합니다.통상, 라이브 시스템에 복제할 수 있도록 변경 내용을 적어 둡니다.하지만, 나는 내가 무엇이 바뀌었는지 항상 기억나지 않고 그것을 적는 것을 항상 기억하지는 않는다.
, 가 나고, 에러는 하는 을 알 수 있습니다.NewColumnX
아, 아, 아, 그래
이 경우 베스트 프랙티스가 아닐 수도 있지만 데이터베이스 버전 관리 시스템은 있습니까?특정 데이터베이스 기술에 대해서는 관심이 없습니다.나는 단지 그것이 존재하는지 알고 싶을 뿐이다.MS SQL Server에서 작동한다면 좋습니다.
Ruby on Rails에는 이행이라는 개념이 있습니다.데이터베이스 변경을 위한 빠른 스크립트입니다.
마이그레이션 파일을 생성합니다. 이 파일에는 DB 버전을 늘리는 규칙(예: 열 추가)과 버전을 다운그레이드하는 규칙(예: 열 제거)이 있습니다.각 마이그레이션에는 번호가 매겨지며 테이블은 현재 DB 버전을 추적합니다.
위로 마이그레이션하려면 "db:migrate"라는 명령을 실행하여 버전을 확인하고 필요한 스크립트를 적용합니다.유사한 방법으로 아래로 마이그레이션할 수 있습니다.
마이그레이션 스크립트 자체는 버전 관리 시스템에 보관됩니다. 데이터베이스를 변경할 때마다 새 스크립트를 체크인합니다. 개발자는 이를 적용하여 로컬 데이터베이스를 최신 버전으로 만들 수 있습니다.
데이터베이스 작성에 소스 파일을 사용하는 것은 조금 구식입니다.실제로는 프로젝트 데이터베이스라는 두 개의 파일이 있습니다.sql and project-module.sql - 첫 번째 스키마 및 영구 데이터용과 두 번째 수정용입니다.물론 둘 다 소스 관리 하에 있습니다.
데이터베이스가 변경되면 먼저 프로젝트 데이터베이스의 메인 스키마를 업데이트합니다.그런 다음 관련 정보를 project-updates.sql에 복사합니다(예: ALTER TABLE 문).그런 다음 업데이트를 개발 데이터베이스에 적용하고, 테스트하고, 완료될 때까지 반복할 수 있습니다.그런 다음 파일을 체크인하고 다시 테스트한 후 생산에 적용합니다.
또한 보통 db - Config -에 다음과 같은 표가 있습니다.
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
되고 "Database"가 "Database"로 되었을 때만 됩니다.db_revision
DB가 기준에서 얼마나 벗어났는지 알 수 있습니다.
업데이트를 다른 파일에 저장할 수도 있지만, 모든 업데이트를 함께 매쉬하고 컷앤페이스트를 사용하여 관련 섹션을 추출했습니다.$Revision 1.1달러에서 ':'를 삭제하여 동결하는 등 하우스키핑이 조금 더 필요합니다.
MyBatis(이전의 iBatis)에는 명령줄에서 사용할 수 있는 스키마 마이그레이션 도구가 있습니다.어떤 프로젝트에서도 사용할 수 있지만 Java로 작성되어 있습니다.
적절한 데이터베이스 변경 관리 관행을 달성하기 위해서는 몇 가지 주요 목표를 특정해야 합니다.따라서 MyBatis 스키마 마이그레이션 시스템(또는 줄여서 MyBatis 마이그레이션)은 다음을 추구합니다.
- 신규 또는 기존 데이터베이스 사용 가능
- 소스 제어 시스템 활용(예: Subversion
- 동시 개발자 또는 팀이 독립적으로 작업할 수 있도록 지원
- 경합이 매우 잘 보이고 쉽게 관리할 수 있도록 합니다.
- 전진 및 후진 이행 허용(각각 진화, 발전)
- 데이터베이스의 현재 상태에 쉽게 접근하여 이해할 수 있도록 한다.
- 접근권이나 관료주의에도 불구하고 이행 가능
- 모든 방법으로 작업 가능
- 우수하고 일관성 있는 실천을 장려합니다.
Redgate에는 SQL Source Control이라는 제품이 있습니다.TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce 및 Git과 통합됩니다.
SQL Delta를 적극 추천합니다.기능 코딩이 끝나면 diff 스크립트를 생성하여 소스 제어 도구(Mercurial :)에 체크 인합니다.
SQL Server와 Oracle 버전을 모두 갖추고 있습니다.
JDBC를 지원하는 거의 모든 데이터베이스에서 동작해야 하는 Java 기반의 오픈 소스 툴 액화베이스에 대해 아무도 언급하지 않은 것이 궁금합니다.레일에 비해 스키마 변경을 위해 루비 대신 xml을 사용합니다.저는 도메인 고유의 언어에 대해 xml을 싫어하지만, xml의 가장 멋진 장점은 likibase가 다음과 같은 특정 작업을 롤백하는 방법을 알고 있다는 것입니다.
<createTable tableName="USER">
<column name="firstname" type="varchar(255)"/>
</createTable>
그러니 이 일은 네가 알아서 처리할 필요는 없어
순수 sql 문 또는 데이터 Import도 지원됩니다.
대부분의 데이터베이스 엔진에서는 데이터베이스 파일을 덤프할 수 있습니다.어쨌든 MySQL은 알고 있습니다.이것은 텍스트 파일일 뿐이므로 Subversion에 제출하거나 사용하는 모든 파일에 제출할 수 있습니다.파일에 대한 차이도 쉽게 실행할 수 있을 겁니다.
SQL Server를 사용하는 경우 Data Dude(Visual Studio의 Database Edition이라고도 함)를 능가하는 것은 어렵습니다.소스 제어 데이터베이스 버전과 실제 가동 중인 버전 간에 스키마를 비교하는 것은 간단한 작업입니다.클릭 한 번으로 다른 DDL을 생성할 수 있습니다.
MSDN에 아주 도움이 되는 교육용 비디오가 있어요.
DBMS_METADATA 및 Toad에 대해 알고 있지만, Oracle용 Data Dude를 생각해 낼 수 있는 사람이 있다면 인생은 정말 즐거울 것입니다.
버전 컨트롤러에서 테이블 문을 처음 작성한 후 alter table 문을 추가하도록 합니다.단, 파일 편집은 하지 마십시오.순차적으로 명명된 보다 많은 alter 파일을 편집하거나 "변경 세트"로 지정하면 특정 전개의 모든 변경 사항을 찾을 수 있습니다.
가장 어려운 것은 의존관계를 추적하는 것입니다.예를 들어 특정 전개 테이블B를 테이블A보다 먼저 갱신할 필요가 있는 경우가 있습니다.
Oracle의 경우 스키마를 여러 개의 개별 파일(예: 테이블당 파일 하나)로 덤프할 수 있는 Toad를 사용합니다.Perforce에서 이 컬렉션을 관리하는 스크립트가 몇 개 있습니다만, 어떤 리비전 제어 시스템에서도 쉽게 실행할 수 있다고 생각합니다.
Oracle 패키지 DBMS_METADATA를 살펴봅니다.
특히, 다음의 방법이 도움이 됩니다.
DBMS_METADATA.GET_DDL
DBMS_METADATA.SET_TRANSFORM_PARAM
DBMS_METADATA.GET_GRANTED_DDL
이러한 메서드의 동작에 익숙해지면(자체적인 설명), 간단한 스크립트를 작성하여 이러한 메서드의 결과를 텍스트파일에 덤프 할 수 있습니다.이 파일은 소스 제어 하에 둘 수 있습니다.행운을 빕니다.
MSSQL에 이렇게 간단한 것이 있는지 잘 모르겠습니다.
코딩과 병행하여 db 릴리스 스크립트를 작성하고 릴리스 스크립트를 SS의 프로젝트별 섹션에 보관합니다.DB 변경이 필요한 코드를 변경하면 동시에 릴리스 스크립트를 업데이트합니다.출시 전에 릴리스 스크립트를 클린 개발 DB(실가동 시 복사된 구조)에서 실행하고 최종 테스트를 수행합니다.
스키마 버전 관리(또는 관리)를 수년간 반복해 왔습니다.최선의 접근법은 보유하고 있는 툴에 따라 달라집니다.Quest Software 도구 "Schema Manager"를 얻을 수 있다면 당신은 건강해질 것입니다.Oracle에는 "Schema Manager"라고도 불리는 하위 툴이 있습니다(많이 혼란스러움).
자동화된 툴(여기서 Data Dude에 대한 다른 코멘트 참조)이 없으면 스크립트와 DDL 파일을 직접 사용할 수 있습니다.접근 방식을 선택하고, 문서화하고, 엄격하게 따릅니다.언제든지 데이터베이스를 다시 작성할 수 있기 때문에 전체 데이터베이스(DBA인 경우) 또는 개발자 스키마(제품 개발 모드인 경우)의 완전한 DDL 내보내기를 선호합니다.
All Around Automations의 도구인 PLSQL Developer에는 Visual Source Safe에서 정상적으로 작동하는(좋지는 않지만) 리포지토리용 플러그인이 있습니다.
웹에서:
버전 제어 플러그인은 PL/SQL Developer IDE >>와 Microsoft SCC 인터페이스 사양을 지원하는 버전 제어 시스템 간의 긴밀한 통합을 제공합니다.여기에는 Microsoft Visual Source Safe, MKS Source Integrity 등의 가장 일반적인 버전 관리 시스템이 포함됩니다.
http://www.allroundautomations.com/plsvcs.html
ER Studio를 사용하면 데이터베이스 스키마를 툴로 되돌린 후 라이브 데이터베이스와 비교할 수 있습니다.
예: 개발 스키마를 ER Studio로 되돌립니다.실운영과 비교하면 모든 차이점이 표시됩니다.변경 내용을 스크립팅하거나 자동으로 푸시할 수 있습니다.
ER Studio에 스키마가 있으면 작성 스크립트를 저장하거나 전용 바이너리로 저장하여 버전 제어에 저장할 수 있습니다.이전 버전의 스킴으로 되돌아가고 싶은 경우 체크 아웃하고 db 플랫폼에 푸시하기만 하면 됩니다.
Rucking이라고 하는 PHP5의 "데이터베이스 이행 프레임워크"가 있습니다.사용한 적은 없습니다만, 예를 들면, 필요에 따라서 언어를 사용해 데이터베이스를 작성하는 경우는, 소스 파일만을 추적할 필요가 있습니다.
우리는 MS Team System Database Edition을 잘 사용하고 있습니다.TFS 버전 관리 및 Visual Studio와 거의 심리스하게 통합되어 저장된 프로세서, 뷰 등을 쉽게 관리할 수 있습니다.경합 해결은 번거로운 일이지만 버전 이력은 완료하면 완료됩니다.그 후 QA로의 이행과 실가동으로의 이행은 매우 간단합니다.
다만, 버전 1.0의 제품이며, 몇 가지 문제가 없는 것은 아닙니다.
비주얼 스튜디오에서 Microsoft SQL Server Data Tools를 사용하여 SQL Server 프로젝트의 일부로 데이터베이스 개체에 대한 스크립트를 생성할 수 있습니다.그런 다음 Visual Studio에 내장된 소스 제어 통합을 사용하여 스크립트를 소스 제어에 추가할 수 있습니다.또한 SQL Server 프로젝트를 사용하면 컴파일러를 사용하여 데이터베이스 개체를 확인하고 배포 스크립트를 생성하여 기존 데이터베이스를 업데이트하거나 새 데이터베이스를 생성할 수 있습니다.
테이블 변경에 대한 VCS가 없는 경우 Wiki에 기록했습니다.적어도 언제, 왜 바뀌었는지 알 수 있다.모든 사람이 하는 것은 아니기 때문에 완벽하다고는 할 수 없고, 여러 버전의 제품을 사용하고 있습니다만, 없는 것보다는 낫습니다.
두 가지 방법 중 하나를 추천합니다.먼저 Sybase의 PowerDesigner에 투자합니다.엔터프라이즈 에디션물리적 데이터 모델 등을 설계할 수 있습니다.그러나 모델을 체크인할 수 있는 저장소가 포함되어 있습니다.각 새 체크인은 새 버전이 될 수 있으며, 모든 버전을 다른 버전과 비교할 수 있으며, 해당 시점에 데이터베이스에 있는 버전과 비교할 수도 있습니다.그런 다음 모든 차이점을 나열하고 이행해야 할 항목을 묻습니다.그리고 이행하기 위한 스크립트를 작성합니다.싸지는 않지만 두 배로 저렴하고 ROI는 약 6개월입니다.
또 다른 방법은 DDL 감사 기능을 설정하는 것입니다(Oracle에서 작동).그러면 모든 변경 사항에 대한 테이블이 생성됩니다.마지막으로 데이터베이스 변경을 Prod로 이동한 타임스탬프에서 지금 바로 변경을 쿼리하면 수행한 모든 작업의 순서가 정렬된 목록이 나타납니다.제로섬 변경을 제거하는 몇 개의 구가 테이블 foo를 만들고, 그 다음에 드롭 테이블 foo를 만들고, mod 스크립트를 쉽게 작성할 수 있습니다.왜 위키에 변경을 남기는 거죠? 그건 두 배의 작업이에요.데이터베이스로 추적해 주세요.
Schema Compare for Oracle은 Oracle 데이터베이스에서 다른 데이터베이스로 변경 사항을 마이그레이션하도록 특별히 설계된 도구입니다.다운로드 링크는 아래 URL을 참조하십시오.이 링크에서는 소프트웨어를 사용하여 완전한 기능을 시험해 볼 수 있습니다.
http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm
두 권의 추천서: Ambler와 Sadalage의 "데이터베이스 리팩터링"과 Ambler의 "Agile Database Technics"입니다.
어떤 분이 레일 이행에 대해 언급하셨습니다.Rails 어플리케이션 이외에서도 잘 동작한다고 생각합니다.Rails로 이동하는 과정에서 SQL Server를 사용한 ASP 어플리케이션에서 사용하였습니다.VCS에 마이그레이션 스크립트 자체를 체크인합니다.여기 그 주제에 대한 실용주의자 데이브 토마스의 게시물이 있습니다.
언급URL : https://stackoverflow.com/questions/308/is-there-a-version-control-system-for-database-structure-changes
'programing' 카테고리의 다른 글
페이지 번호 장식을 사용하지 않고 ngTable을 렌더링하려면 어떻게 해야 합니까? (0) | 2023.03.11 |
---|---|
Active Model을 사용하여 동일한 모델에 여러 개의 다른 시리얼라이저를 구현하는 방법:시리얼라이저? (0) | 2023.03.06 |
CSS 포인터 이벤트 및 커서 스타일 (0) | 2023.03.06 |
퍼포먼스를 중시하는 $broadcast 또는 $watch란 무엇입니까? (0) | 2023.03.06 |
리액트 훅 형태로 리액트 날짜 피커를 사용할 수 있습니까? (0) | 2023.03.06 |