2010-02-05 2 views
1

이것은 내가 묻는 earlier question의 설명입니다. 그것은 그 질문과는 완전히 달랐다. 나는 그것이 그 자체로 설 수 있다고 생각했다.데이터베이스의 데이터를 읽기 전용으로 설정하고 스키마를 변경할 수 있음

프로덕션 데이터베이스의 스냅 샷을 반기마다 만듭니다. 사용자는 프런트 엔드 GUI에서 백 엔드 데이터베이스를 전환하여 기록 데이터를 볼 수 있습니다. 히스토리 데이터이므로 읽기 전용으로 남아 있어야합니다.

그러나 현재 필드의 새 필드가 현재 데이터베이스에 추가되는 경우가 있습니다. 프런트 엔드에서 이러한 필드가 필요하면 문제가 발생할 수 있습니다. 우리의 해결책은 필드를 즉석에서 추가하고 필드가 필요한 경우 해당 필드를 적절한 기본값으로 설정하는 것입니다. 이것이 의미하는 바는 데이터베이스가 테이블 구조의 변경을 방지하기 때문에 읽기 전용으로 만들 수 없다는 것입니다. 이 문제를 해결하기 위해 모든 사용자에게 db_datareader, db_denydatawriterdb_ddladmin 역할을 부여합니다.

이 모든 것이 실제로 잘 작동하며 문제가 없습니다. 그러나 데이터는 여전히 dbo (나)에 의해 변경 될 수 있습니다. 언젠가는 실수로이 역사적인 데이터를 변경하고 (아마도이를 깨닫지 못한 채로) 우연히 무결성을 손상시킬 것이라고 내 관심사가 있습니다.

시도 솔루션 :

  • 나는 DBO에 db_denydatawriter의 역할을 할당하려하지만합니다 (aforementioned question 참조) 실패했습니다.

  • 또 다른 제안은 스키마를 변경할 때 스냅 샷의 읽기 전용 상태를 끄고 켜는 것입니다. 이는 스냅 샷 스키마 변경 당 약 2 분의 지연을 유발한다는 점을 제외하면 작동합니다. 우리는 일반적으로 많은 스키마 변경을하지는 않지만 가능한 경우 상황을 피하고 싶습니다.

다른 아이디어는 크게 감사하겠습니다.

답변

1

프로덕션 데이터베이스에 새 필드가 추가되고 응용 프로그램이 변경되면 (유지 관리 기간 중에 발생할 가능성이 큽니다) 스냅 숏을 업데이트하는 스크립트를 실행하지 않는 것이 좋습니다.

그런 다음 스크립트가 읽기 전용 상태로 변경되어 업데이트되도록하고 모든 활동을 기록 할 수 있습니다. 이렇게하면 개발 SQL 서버를 사용하여 개발 중에 스크립트를 테스트 할 수 있습니다.

내가 놓친 게 아니라면.

0

나는 Michael에 동의합니다. 프로덕션 데이터베이스에서 실행하는 릴리스 스크립트가있을 수 있습니다. 스냅 샷에 대해 스크립트의 DDL 부분을 실행하고 다시 읽기 전용 모드로 변경하십시오.

관련 문제