문제

데이터베이스 스키마를 업그레이드해야 새 소프트웨어 릴리스 설치가 훨씬 더 까다로워집니다.이를위한 모범 사례는 무엇입니까?

다음과 같은 작업 항목의 체크리스트 또는 타임 라인을 찾고 있습니다.

  • 8:30 앱 종료
  • 8:45 스키마 수정
  • 9:15 새 앱 설치
  • 9:30 db 재시작

    등, 위험과 다운 타임을 최소화하는 방법을 보여줍니다.다음과 같은 문제

    • 문제가 발생한 경우 업그레이드 취소
    • 기존 앱에 미치는 영향 최소화
    • 데이터베이스가 실행되는 동안 "핫"업데이트
    • 개발에서 테스트, 프로덕션 서버로 승격

      특히 관심이 있습니다.

도움이 되었습니까?

해결책

나는 이것에 대해 많은 경험이 있습니다. 내 응용 프로그램은 매우 반복적이며 스키마 변경이 자주 발생합니다. 약 2 ~ 3 주마다 프로덕션 릴리스를 수행하며 각 FogBugz 목록에서 50-100 개의 항목이 삭제됩니다. 지난 몇 년 동안 우리가 수행 한 모든 릴리스에는 새로운 기능을 지원하기 위해 스키마 변경이 필요했습니다.

이의 핵심은 실제 서버에서 변경하기 전에 테스트 환경에서 여러 번 변경을 연습하는 것입니다.

저는 템플릿에서 복사 한 배포 체크리스트 파일을 보관하고 있으며 각 릴리스에 대해 비정상적인 내용으로 많이 편집합니다.

데이터베이스에서 실행하는 스크립트가 두 개 있는데, 하나는 스키마 변경 용이고 다른 하나는 프로그래밍 기능 (프로 시저, 뷰 등)입니다. 변경 스크립트는 수작업으로 코딩되고 procs가있는 스크립트는 Powershell을 통해 스크립팅됩니다. 변경 스크립트는 모든 것이 꺼져있을 때 실행되고 (최소한의 사용자를 귀찮게하는 시간을 선택해야 함) 이상이 발생할 경우를 대비하여 수동으로 명령별로 실행됩니다. 내가 겪은 가장 일반적인 문제는 중복 행으로 인해 실패하는 고유 한 제약 조건을 추가하는 것입니다.

통합 테스트주기를 준비 할 때 마치 해당 서버가 프로덕션 인 것처럼 테스트 서버의 체크리스트를 살펴 봅니다. 그런 다음 그 외에도 프로덕션 데이터베이스의 실제 복사본을 가져오고 (오프 사이트 백업을 교체하기에 좋은시기입니다) 복원 된 로컬 버전에서 스크립트를 실행합니다 (이는 내 최신 백업은 소리입니다). 여기 돌 하나로 많은 새를 죽이고 있습니다.

총 4 개의 데이터베이스입니다.

  1. 개발자 : 모든 변경은 변경 스크립트에서 이루어져야하며 Studio에서는 적용되지 않습니다.
  2. 테스트 : 여기에서 통합 테스트가 이루어집니다.
  3. 제작 사본 : 마지막 순간 배포 사례
  4. 제작

    정말로 프로덕션에서 할 때 제대로해야합니다. 스키마 변경을 취소하는 것은 어렵습니다.

    핫픽스에 관해서는 매우 고립 된 변경이 아니고 비즈니스에 중요한 경우가 아니라면 스키마를 수정하지 않고 프로 시저 만 핫픽스를 적용 할 것입니다.

다른 팁

Scott Ambler의 책을 읽어 보셨나요? http://www.agiledata.org/essays/databaseRefactoring.html

이것은 제가 직장에서 방금 이야기 한 주제입니다. 주로 문제는 데이터베이스 마이그레이션이 프레임 워크 (예 : 레일 및 마이그레이션 스크립트)에 의해 잘 처리되지 않는 한 사용자에게 달려 있다는 것입니다.

현재 우리가 수행하는 방식에는 명백한 결함이 있으며 다른 제안에도 열려 있습니다.

  1. 최신 상태로 유지하고 버전을 관리하는 데 필요한 정적 데이터가 포함 된 스키마 덤프가 있습니다.
  2. 스키마 변경 작업, ALTER, CREATE 등을 수행 할 때마다 파일에 덤프하고 버전 제어에 던집니다.
  3. 원본 SQL DB 덤프를 업데이트했는지 확인합니다.
  4. 실시간 푸시를 수행 할 때 사용자 또는 스크립트가 SQL 파일을 db에 적용하는지 확인합니다.
  5. 오래된 버전 관리에있는 오래된 SQL 파일을 정리합니다.

    이것은 결코 최적이 아니며 실제로 "백업"db로 의도 된 것이 아닙니다. 단순히 푸시를 쉽게 만들고 개발자를 동일한 페이지에 유지하기위한 것입니다. db에 대한 SQL 파일의 응용 프로그램을 자동화하는 한 capistrano로 설정할 수있는 멋진 것이있을 것입니다.

    DB 특정 버전 관리는 꽤 멋질 것입니다. 아마도 그렇게하는 무언가가있을 것이고 만약 없다면 아마 있어야합니다.

그리고 Scott Ambler 논문이 당신의 식욕을 자극한다면 Pramod J Sadolage와 함께 'Refactoring Databases'라는 그의 책을 추천 할 수 있습니다- http://www.ambysoft.com/books/refactoringDatabases.html

또한 Yahoo의 Agile Database 그룹 ()에 유용한 조언과 정보가 많이 있습니다.http://tech.groups.yahoo.com/group/agileDatabases/

2 가지 간단한 메모 :

  1. 말도 안 돼 ... 그래서 두 번 말 할게요.
    유효한 백업이 있는지 확인하십시오.
    유효한 백업이 있는지 확인하십시오.

  2. @mk.데이터베이스 버전 관리에 대한 Jeff의 블로그 게시물 을 확인하세요 (아직 확인하지 않은 경우)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top