테넌트별 데이터베이스 SaaS 애플리케이션에서 단일 테넌트 복원

적용 대상:Azure SQL Database

테넌트별 데이터베이스 모델을 사용하면 다른 테넌트에 영향을 주지 않고도 단일 테넌트를 이전 시점으로 쉽게 복원할 수 있습니다.

이 자습서에서는 두 가지 데이터 복구 패턴에 대해 알아봅니다.

  • 병렬 데이터베이스로 데이터베이스를 복원합니다(나란히).
  • 해당 위치에서 데이터베이스를 복원하여 기존 데이터베이스 대체
패턴 설명
병렬 데이터베이스로 복원 이 패턴은 검토, 감사 및 규정 준수와 같은 작업에 사용하여 테넌트가 이전 지점에서 데이터를 검사할 수 있도록 할 수 있습니다. 테넌트의 현재 데이터베이스는 온라인과 변경되지 않음을 유지합니다.
현재 위치 복원 이 패턴은 테넌트가 실수로 삭제되었거나 데이터가 손상된 경우에 테넌트를 이전 시점으로 복구할 때 사용합니다. 원래 데이터베이스는 오프라인 상태가 되고 복원된 데이터베이스로 대체됩니다.

이 자습서를 수행하려면 다음 필수 조건이 완료되었는지 확인합니다.

SaaS 테넌트 복원 패턴 소개

개별 테넌트의 데이터를 복원하기 위한 두 가지 간단한 패턴이 있습니다. 테넌트 데이터베이스가 서로 격리되어 있기 때문에 하나의 테넌트를 복원해도 다른 테넌트의 데이터에는 영향을 주지 않습니다. Azure SQL Database PITR(지정 시간 복원) 기능은 두 패턴 모두에서 사용됩니다. PITR은 항상 새 데이터베이스를 만듭니다.

  • 병렬로 복원: 첫 번째 패턴에서는 테넌트의 현재 데이터베이스와 함께 새 병렬 데이터베이스가 만들어집니다. 그러면 테넌트에 복원된 데이터베이스에 대한 읽기 전용 액세스 권한이 부여됩니다. 복원된 데이터를 검토하고 잠재적으로 현재 데이터 값을 덮어쓰는 데 사용할 수 있습니다. 테넌트가 복원된 데이터베이스에 액세스하는 방법과 제공되는 복구 옵션을 결정하는 것은 앱 디자이너의 요지입니다. 테넌트가 이전 시점에서 데이터를 검토하도록 허용하는 것만으로도 일부 시나리오에서 필요할 수 있습니다.

  • 원래 위치에 복원: 두 번째 패턴은 데이터가 유실되었거나 손상되어 테넌트를 이전 시점으로 되돌리려는 경우에 유용합니다. 데이터베이스가 복원되는 동안 테넌트가 줄에서 해제됩니다. 원래 데이터베이스가 삭제되고 복원된 데이터베이스의 이름이 바뀝니다. 원래 데이터베이스의 백업 체인은 삭제 후에도 액세스할 수 있으며 필요한 경우 데이터베이스를 이전 시점으로 복원할 수 있습니다.

데이터베이스에서 지역에서 복제 활성화 및 병렬로 복원을 사용하는 경우 필요한 데이터를 복원된 복사본에서 원본 데이터베이스로 복사하는 것이 좋습니다. 원본 데이터베이스를 복원된 데이터베이스로 바꾸는 경우 활성 지역 복제를 다시 구성하고 다시 동기화해야 합니다.

테넌트 애플리케이션별 Wingtip Tickets SaaS 데이터베이스 스크립트 받기

Wingtip Tickets SaaS 다중 테넌트 데이터베이스 스크립트 및 애플리케이션 소스 코드는 WingtipTicketsSaaS-DbPerTenant GitHub 리포지토리에서 사용할 수 있습니다. Wingtip Tickets SaaS 스크립트를 다운로드하고 차단을 해제하는 단계는 일반 지침을 참조하세요.

시작하기 전에

데이터베이스를 만들 때 첫 번째 전체 백업을 복원하는 데 10~15분 정도 걸릴 수 있습니다. 애플리케이션을 방금 설치한 경우 이 시나리오를 시도하기 전에 몇 분 동안 기다려야 할 수 있습니다.

실수로 데이터를 삭제하는 테넌트 시뮬레이션

이러한 복구 시나리오를 실제로 보여 주려면 먼저 테넌트 데이터베이스 중 하나에서 이벤트를 “실수로” 삭제해야 합니다.

이벤트 앱을 열어 현재 이벤트를 검토합니다.

  1. 이벤트 허브 (http://events.wtp.<user>.trafficmanager.net)를 열고 Contoso Concert Hall을 선택합니다.

    A screenshot of the events hub page of the sample application. The entry for Contoso Concert Hall is boxed in red.

  2. 이벤트 목록을 스크롤하고 목록의 마지막 이벤트를 적어 둡니다.

    A screenshot from the sample application. The last event appears.

마지막 이벤트를 “실수로” 삭제하기

  1. PowerShell ISE에서 ...\Learning Modules\Business Continuity and Disaster Recovery\RestoreTenant\Demo-RestoreTenant.ps1을(를) 열고 다음 값을 설정합니다.

    • $DemoScenario = 1, 마지막 이벤트를 삭제합니다(티켓 판매 없음).
  2. F5 키를 눌러 스크립트를 실행하고 마지막 이벤트를 삭제합니다. 다음과 같은 확인 메시지가 표시됩니다.

    Deleting last unsold event from Contoso Concert Hall ...
    Deleted event 'Seriously Strauss' from Contoso Concert Hall venue.
    
  3. Contoso 이벤트 페이지가 열립니다. 아래로 스크롤하여 해당 이벤트가 삭제되었는지 확인합니다. 해당 이벤트가 여전히 목록에 있으면 새로 고침을 선택하고 삭제되었는지 확인합니다. A screenshot from the sample application. The last event is removed.

프로덕션 데이터베이스와 병렬로 테넌트 데이터베이스 복원

이 연습에서는 이벤트를 삭제하기 전에 Contoso Concert Hall 데이터베이스를 특정 시점으로 복원합니다. 이 시나리오에서는 병렬 데이터베이스에서 삭제된 데이터를 검토하려는 것으로 가정합니다.

Restore-TenantInParallel.ps1 스크립트가 ContosoConcertHall_old라는 이름의 병렬 테넌트 데이터베이스와 병렬 카탈로그 항목을 생성합니다. 이 복원 패턴은 사소한 데이터 손실로부터 복구하는 데 가장 적합합니다. 준수 또는 감사 목적으로 데이터를 검토해야 하는 경우에도 이 패턴을 사용할 수 있습니다. 또한 지역에서 복제 활성화를 사용할 때 권장되는 방법입니다.

  1. 테넌트가 실수로 데이터를 삭제하는 시뮬레이션 섹션을 완성하세요.
  2. PowerShell ISE에서 ...\Learning Modules\Business Continuity and Disaster Recovery\RestoreTenant\Demo-RestoreTenant.ps1을(를) 엽니다.
  3. $DemoScenario = 2를 설정하고 테넌트를 병렬로 복원하세요.
  4. 스크립트를 실행하려면 F5 키를 누릅니다.

스크립트가 테넌트 데이터베이스를 사용자가 이벤트를 삭제하기 전의 시점으로 복원합니다. 데이터베이스가 ContosoConcertHall_old(이)라는 이름의 새 데이터베이스로 복원됩니다. 복원된 데이터베이스의 카탈로그 메타데이터가 삭제된 다음, 데이터베이스가 ContosoConcertHall_old 이름으로 만든 키를 사용하여 카탈로그에 추가됩니다.

데모 스크립트는 브라우저에서 새 테넌트 데이터베이스용 이벤트 페이지를 엽니다. URL http://events.wingtip-dpt.<user>.trafficmanager.net/contosoconcerthall_old를 보면 이 페이지가 이름에 _old가 추가된 복원된 데이터베이스의 데이터를 보여주고 있다는 사실을 알 수 있습니다.

브라우저에 나열된 이벤트를 스크롤하여 이전 섹션에서 삭제한 이벤트가 복원되었는지 확인합니다.

복원된 테넌트를 자체 이벤트 앱을 갖는 추가 테넌트로 노출하는 것은 일반적으로 테넌트에 복원된 데이터에 대한 액세스 권한을 제공하는 방법은 아닙니다. 복원 패턴을 설명하는 역할을 합니다. 일반적으로 이전 데이터에 대한 읽기 전용 액세스 권한을 부여하고 정의된 기간 동안 복원된 데이터베이스를 유지합니다. 샘플에서는 복원된 테넌트 복원 제거 시나리오를 실행 하여 완료된 후에 복원된 테넌트 항목을 삭제할 수 있습니다.

  1. $DemoScenario = 4, Remove restored tenant를 설정합니다.
  2. 스크립트를 실행하려면 F5 키를 누릅니다.
  3. 이제 카탈로그에서 ContosoConcertHall_old 항목이 삭제됩니다. 브라우저에서 이 테넌트에 대한 이벤트 페이지를 닫습니다.

해당 위치에서 테넌트를 복원하여 기존 테넌트 데이터베이스 대체

이 연습에서는 Contoso Concert Hall 테넌트를 이벤트를 삭제하기 전 시점으로 복원합니다. Restore-TenantInPlace 스크립트는 테넌트 데이터베이스를 새 데이터베이스로 복원하고 원래 데이터베이스를 삭제합니다. 이 복원 패턴은 심각한 데이터 손상을 복구하는 데 적합하며, 테넌트에서 상당한 데이터 손실이 있을 수 있습니다.

  1. PowerShell ISE에서 Demo-RestoreTenant.ps1 파일을 엽니다.
  2. $DemoScenario = 5를 설정하고 테넌트를 장소에서 복원합니다.
  3. 스크립트를 실행하려면 F5 키를 누릅니다.

스크립트는 이벤트를 삭제하기 전의 테넌트 데이터베이스를 복원합니다. 먼저 더 이상의 업데이트를 방지하기 위해 Contoso Concert Hall 테넌트가 오프라인 상태가 됩니다. 그런 다음, 복원 지점에서 복원하여 병렬 데이터베이스를 만듭니다. 복원된 데이터베이스는 이름이 기존 테넌트 데이터베이스 이름과 충돌하지 않도록 이름에 타임스탬프가 추가되어 지정됩니다. 다음으로, 오래된 데이터베이스가 삭제되고 복원된 데이터베이스의 이름이 기존 데이터베이스 이름으로 바뀝니다. 마지막으로 Contoso Concert Hall은 앱이 복원된 데이터베이스에 액세스할 수 있도록 온라인 상태가 되었습니다.

이벤트를 삭제하기 전 특정 시점의 데이터베이스를 성공적으로 복원했습니다. 이벤트 페이지가 열리면 마지막 이벤트가 복원되었는지 확인합니다.

데이터베이스를 복구한 후, 첫 번째 전체 백업을 복원하는 데 다시 10~15분 정도 더 걸릴 수 있습니다.

참고 항목

다중 테넌트 데이터베이스에서 단일 테넌트로 복원할 수 없습니다.

다음 단계

이 자습서에서는 다음 작업 방법을 알아보았습니다.

  • 병렬 데이터베이스로 데이터베이스를 복원합니다(나란히).
  • 원래 위치에 데이터베이스 복원

추가 리소스