그룹은 어떻게 데이터베이스 스키마 변경을 추적 할 수 있습니까?


67

직원 팀이 데이터베이스 스키마 변경을 추적하는 데 도움이되는 버전 관리 방법은 무엇입니까?


여기서 무엇을 이루려고 노력하고 있습니까? 사람들에게 변경 사항을 알리거나 누가 언제 무엇을 변경했는지에 대한 감사 내역을 작성하려고합니까? 완전히 다른 것?
ScottCher

@Scott-본질적으로 다른 개발자에 대한 감사 추적과 거의 비슷하게 만들 수 있으므로 최신 개발 스키마가 있으며 테스트 및 라이브 사이트를 쉽게 확인하여 실행중인 스키마를 확인할 수 있습니다.
Toby

1
이것은 방금 게시 한 질문과 비슷하지만 dba.stackexchange.com/questions/64/…
Beth Whitezel

1
@ BitOff-동의하며 귀하가 언급 한 질문에 대한 나의 대답도 여기에 있다고 생각합니다. PowerDesigner 또는 ERWin과 같은 도구를 사용하면 데이터베이스 디자인을 버전 관리하는 데 도움이 될 수 있습니다. 데이터베이스가 외부에서 모델링되고 모든 변경 사항이 모델을 통해 계획된 경우 검토를 위해 해당 변경 사항을보다 잘 제어하고 배포 할 수 있습니다.
ScottCher

1
Liquibase 또는 Flyway를 확인하십시오
a_horse_with_no_name

답변:


44

몇 분 전에 나는 이것을 확인했다 : 데이터베이스가있는 모든 프로젝트에 존재 해야하는 테이블 은 실제로 넣을만큼 단순 해 보인다.

이를 schema_version (또는 마이그레이션 또는 적합한 항목)이라고하며 데이터베이스의 구조적 또는 데이터 변경 사항을 추적하는 것이 목적입니다. 가능한 구조 (MySQL의 예)는 다음과 같습니다.

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

schema_version ( key, extra) 값에 삽입하십시오 ( '001', 'schema version');

프로젝트 시작에서이 테이블을 추가하든 또는 첫 번째 버전을 스테이징 또는 프로덕션 서버에 배치 한 직후에 사용자에게 달려 있습니다.

데이터베이스 구조를 변경하거나 데이터 마이그레이션을 수행하기 위해 SQL 스크립트를 실행해야 할 때마다 해당 테이블에 행을 추가해야합니다. 그리고 해당 스크립트의 시작 또는 끝에있는 insert 문을 통해이를 수행하십시오 (프로젝트의 코드 저장소에 커밋 됨).


1
@David-이것은 거의 자체 질문이지만, 테이블이 VCS에 피드백을주는 방법을 매우 빨리 설명 할 수 있습니까? 수동 덤프 만 있다면?
Toby

@Toby-배포시 스크립트가 SVN에 배치되었으며 개발자는 SVN rev 또는 JIRA 버그 #를 제공했습니다. 우리 (dbas)는 빠른 메모와 rev #를이 테이블에 삽입했습니다. 그러나이를 하나로 묶기 위해 JIRA에 대한 하이퍼 링크가있는이 테이블을 가리키는 웹 페이지를 작성했습니다.
David Hall

예. 기본적으로 OP에는 거꾸로 있습니다. 버전이 지정된 배포 스크립트를 사용하면 데이터베이스 델타에서 작동하지 않습니다. 그것들은 어쨌든 퇴화 된 (단순화 된) 경우에만 작동합니다-도구를 뒤로 생성 할 수없는 스키마를 업데이트하기 위해 다단계 변환을 수행해야 할 수도 있습니다. 그러나 배포 스크립트가이를 처리 할 수 ​​있습니다.
TomTom

23

가장 좋은 방법은 데이터베이스를 빌드 프로세스의 일부로 생성하는 것 입니다. 나머지 코드를 사용하여 모든 스크립트를 소스 제어 상태로 유지하면 모든 사람이 자신의 환경을 책임집니다.

실패하면 RedGate는 소스 제어를 SSMS에 통합하는 도구를 가지고 있으며 SQL Compare 는 MS SQL Server 스키마를 비교 / 동기화하는 데 유용합니다. Visual Studio Database Edition에는 기본 제공 스키마 비교 도구도 있습니다.

또 다른 SO 질문마이그레이터 도트 네트로 연결 되어 있으며, 나는 자유 시간 동안 조사를 시작할 것입니다. 그것은 좋은 방법처럼 보이지만, 당신이 기꺼이 만드는 것보다 더 많은 시간 / 오버 헤드 투자 일 수 있습니다.


Visual Studio의 "데이터베이스 에디션"은 별도의 제품 이었지만 이제는 Team Server를 포함한 에디션에 포함되었습니다. 개인적으로 RedGate 도구 (SQL Compare)를 선호합니다.
Tangurena 2019 년

12

eiefai은 이미 데이터베이스가있는 모든 프로젝트에 존재해야하는 테이블을 언급했습니다 . 이것은 훌륭한 블로그 게시물이지만 IMO는 데이터베이스 개정 관리를위한 효과적인 솔루션으로의 일부일뿐입니다. 실제로이 질문에 "답변"하려는 시도는 VCS 및 데이터베이스에 대한 다른 정보를 고려해야합니다.


8

이 질문에 접근하기 위해서는 몇 가지 다른 각도가 있다고 생각합니다. "도구 우선"각도는 플랫폼과 개인 취향에 따라 달라질 것입니다. 적절한 예 : MS Visual Studio에서 데이터베이스 프로젝트를 사용하고 있지만 이것이 MySQL에 훌륭한 솔루션인지 확실하지 않습니다. 또한 Redgate, Erwin, Embarcadero 등 자신이 좋아하는 도구로 꽤 팔리는 사람들도 알고 있습니다.

이 질문에 대한 "프로세스 우선"각도가 있으며,이 질문은 이후 질문에서이 사이트에서 다시 검토 될 것입니다. 이 프로세스의 핵심은 스키마를 소스 제어하에 가져오고 변경 사항을 관리하여 필요에 따라 버전 "x"에서 버전 "y"로 스키마 변경 사항을 적용 할 수 있습니다.

이 주제에 대한 확실한 대답은 책처럼 보이는 끝날 것입니다, 그래서 하나를 참조하여 밖으로 시작 아마 가치 : 레드 게이트는 최근 "라는 무료 전자 책 출판 SQL Server 팀 기반의 개발에 레드 게이트 가이드 가있는 동안", 및 토론 할 곳이 많기 때문에 토론을 시작하기에 좋은 곳입니다 (IMO). 이름과는 달리,이 책의 많은 자료는 모든 SQL Server뿐만 아니라 도구 세트 (Redgate뿐만 아니라)에도 적용 할 수있을 정도로 일반적입니다. 이걸 아직 보지 못했다면 적어도 탈지 가치가 있습니다.

마지막으로 stackoverflow의 "레거시 답변"에 연결하는 것이 좋습니다.


5

SchemaCrawler 는 모든 데이터베이스 스키마 객체로 텍스트 파일을 생성하는 도구입니다. 이 텍스트 출력은 사람이 읽을 수 있고 다른 서버의 유사한 출력과 비교할 수 없도록 설계되었습니다.

실제로, 내가 찾은 것은 데이터베이스 스키마의 텍스트 파일을 출력하는 것이 빌드의 일부로 수행 될 때 유용하다는 것입니다. 이런 방식으로 텍스트 파일을 소스 코드 제어 시스템으로 체크인하고 시간이 지남에 따라 스키마가 어떻게 발전했는지에 대한 버전 기록을 가질 수 있습니다. SchemaCrawler는 명령 줄에서이를 자동화하도록 설계되었습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.