18개 데이터베이스(SQL Server)에서 일관된 DB 스키마를 유지하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/93804

문제

동일한 스키마를 가져야 하지만 그렇지 않은 데이터베이스가 18개 있습니다.특정 시나리오에서는 테이블이 하나에 추가되었지만 나머지는 추가되지 않았습니다.또는 소수의 데이터베이스에는 특정 저장 프로시저가 필요했지만 다른 데이터베이스에는 필요하지 않았습니다.또는 DBA가 모든 데이터베이스에 뷰를 추가하는 스크립트를 실행하는 것을 잊었습니다.

데이터베이스 스키마를 동기화 상태로 유지하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

레거시 수정/정리에는 다음과 같은 도구가 있습니다. SQL비교, 데이터베이스를 동기화하는 스크립트를 생성할 수 있습니다.

SQL Server를 실행하는 .NET 상점의 경우 Visual Studio 데이터베이스 버전, 소스 제어에 체크인할 수 있는 스키마 변경에 대한 변경 스크립트를 생성하고 CI/빌드 프로세스를 사용하여 자동으로 빌드할 수 있습니다.

다른 팁

SQL 비교 by Red Gate는 이를 위한 훌륭한 도구입니다.

SQL비교 데이터베이스 간의 차이점을 찾아 동기화하는 데 사용한 최고의 도구입니다.

데이터베이스의 동기화를 유지하려면 다음과 같은 몇 가지 사항을 준비해야 합니다.

1) 누가 프로덕션을 변경할 수 있는지에 대한 정책이 필요합니다.일반적으로 이는 DBA(대규모 조직의 경우 DBA 팀)와 1~2개의 백업만 있어야 합니다.백업은 DBA가 부재 중이거나 긴급 상황인 경우에만 변경되어야 합니다.백업은 정기적으로 배포되어서는 안 됩니다.이 정책에 따라 데이터베이스 권한을 설정합니다.

2) 배포 요청을 관리하는 프로세스 및 도구.이상적으로는 개발 환경, 테스트 환경 및 프로덕션 환경이 있습니다.개발자는 개발 환경에서 초기 개발을 수행하고 적절하게 테스트 및 프로덕션에 변경 사항을 적용해야 합니다.변경 사항을 푸시할 시기를 DBA에게 알리는 방법이 필요합니다.나는 다음 큐브를 향해 소리치는 과정을 추천하지 않습니다.대규모 조직에는 변경 제어 위원회가 있을 수 있으며 변경은 한 달에 한 번만 이루어집니다.소규모 회사에서는 개발자가 테스트를 요청하고 테스트 후 프로덕션 배포 요청이 전달될 수 있습니다.제가 일했던 작은 회사 중 하나는 중고였습니다. 문제 추적기 이러한 요청에 대해.

귀하의 상황과 예산에 맞는 것을 사용하고, 프로세스와 해당 프로세스에 적합한 도구를 갖추십시오.

3) 때로는 개체가 소수의 데이터베이스에만 이동하면 된다고 말씀하셨습니다.아마도 하나의 서버에 18개의 데이터베이스만 있는 경우 각 데이터베이스가 개체와 정확하게 일치하도록 만드는 것이 좋습니다.5개의 DB에만 usp_DoSomething이 필요합니까?그래서 뭐?모든 데이터베이스에 넣으십시오.이렇게 하면 관리하기가 훨씬 쉬워집니다.우리는 약 250-300개의 DB를 갖춘 6개의 서버 시스템에서 이 작업을 수행했습니다.예외가 있었지만 그룹화되었습니다.서버 C의 데이터베이스에는 이 추가 개체 집합이 있습니다.서버 L의 데이터베이스에는 이 다른 세트가 있습니다.

4) DBA가 모든 DB에 변경 스크립트를 배포하는 것을 잊어버리는 경우가 있다고 말씀하셨습니다.이는 변경 사항을 배포하기 위한 도구가 필요하다는 것을 말해줍니다.S/He는 아마도 SQL 스크립트를 가져와 Query Analyser나 Manegement Studio(또는 사용하는 모든 것)에서 열고 수동으로 각 데이터베이스로 이동하여 SQL을 실행하고 있을 것입니다.이는 좋은 장기(또는 단기) 솔루션이 아닙니다. 레드 게이트 (위의 SQLCompare 제작자)에는 훌륭한 도구가 많이 있습니다. 멀티스크립트 배포 목적으로 작동할 수 있을 것 같습니다.나는 O-SQl을 사용하여 SQL Server 2000에서 자체 도구를 작성한 DBA와 함께 일했습니다.SQL 파일을 가져와 서버의 각 데이터베이스에서 실행합니다.각 서버에서 실행해야 했지만 각 DB에서 실행하는 것보다 더 좋았습니다.나는 또한 동일한 작업을 수행하는 VB.net 도구를 작성하는 데 도움을 주었습니다. 단, 서버 목록도 통과하므로 한 번만 실행하면 됩니다.

5) 소스 제어.현재 팀에서는 소스 제어를 사용하지 않으며 이로 인해 얼마나 많은 문제가 발생하는지 말씀드릴 시간이 부족합니다.어떤 종류의 소스 제어 시스템이 없다면 하나 구입하십시오.

위 답변에 대해 논평할 만큼 충분한 평판을 얻지는 못했지만 SQL Compare 프로 버전에는 스크립트 가능한 API가 있습니다.이러한 모든 데이터베이스에 항목을 복제해야 한다는 점을 고려하면 이를 사용하여 변경 스크립트를 생성하거나 데이터베이스가 모두 동기화되어 있는지 확인하는 자동화된 작업을 만들 수 있습니다.또한 표준 버전보다 훨씬 비싸지 않습니다.

데이터베이스 비교 도구를 사용하는 것 외에도 18개의 데이터베이스에는 DBA가 있어야 하므로 CREATE 및 ALTER에 대한 액세스를 DBA로만 제한하여 DBA만이 데이터베이스 수준에서 테이블을 변경할 수 있도록 정책을 시행합니다.테스트 데이터베이스와 라이브 데이터베이스 모두에서.물론 개발 데이터베이스에는 이것이 있어서는 안 됩니다!스키마를 임의로 생성하거나 변경하는 개발자가 DBA를 거치도록 하십시오.

각 릴리스에 대해 단일 소스 제어 DDL/SQL 스크립트를 생성하고 오직 이를 사용하여 데이터베이스를 업데이트하십시오.diff 도구는 유용할 수 있지만 주로 실수가 아닌지 확인하고 정책이 실패할 때 문제를 해결하는 데 유용합니다.DDL, SQL 및 저장 프로시저 스크립트를 단일 스크립트로 결합하면 스크립트 중 하나를 실행하는 것을 "잊기"가 쉽지 않습니다.

데이터베이스 스키마를 비교하고 동기화할 수 있는 DB Schema Difftective라는 도구가 있습니다.다른 도구인 DB MultiRun을 사용하면 생성된(동기화) 스크립트를 여러 DB 서버(프로젝트 기반)에 쉽게 배포할 수 있습니다.

이 게시물은 오래되었지만 TurnKey가 정확합니다.팀 환경에서 작업하는 개발자인 경우 대규모 애플리케이션의 데이터베이스 스키마를 유지 관리하는 가장 좋은 방법은 사용하는 모든 소스에서 마스터 스키마를 업데이트하는 것입니다.자신만의 스크립팅 클래스를 작성하기만 하면 데이터베이스가 항상 완벽해질 것입니다.

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