다음을 통해 공유


다른 작성기에서 관리하는 구성 요소 간의 종속성

한 기록기에서 데이터가 다른 작성기에서 관리하는 데이터에 따라 달라지는 상황이 있습니다. 이러한 경우 두 기록기에서 데이터를 백업하거나 복원해야 합니다.

VSS는 명시적 기록기 구성 요소 종속성 및 IVssWMDependency 인터페이스의 개념을 통해 이 문제를 처리합니다.

작성기는 IVssCreateWriterMetadata::AddComponentDependency 메서드를 사용하여 기록기 메타데이터 문서를 만드는 동안 하나 이상의 종속성을 추가합니다. 작성기는 종속 구성 요소의 이름 및 논리 경로(관리하는)와 종속 구성 요소의 이름 및 논리 경로 및 작성기 클래스 ID (클래스를 식별하는 GUID)를 메서드에 전달합니다.

이 종속성이 설정되면 백업 또는 복원 작업 중에 종속 구성 요소와 해당 종속성의 대상이 모두 참여해야 함을 요청자에게 알릴 수 있습니다.

지정된 구성 요소에는 여러 종속성이 있을 수 있으므로 해당 구성 요소와 모든 종속 대상이 함께 백업 및 복원에 참여해야 합니다.

종속 구성 요소 및/또는 해당 종속성의 대상을 백업 또는 복원 작업에 명시적으로 또는 암시적으로 포함할 수 있습니다.

명시적 작성기 구성 요소 종속성 메커니즘을 사용하여 동일한 작성기에서 두 구성 요소 간에 종속성을 만들면 안 됩니다. 선택 규칙은 순환 종속성의 위험 없이 동일한 기능을 보다 효율적으로 제공할 수 있습니다.

예를 들어 IVssCreateWriterMetadata::AddComponentDependency 를 사용하여 작성기 클래스 ID X가 있는 InternetConnector라는 작성기의 작성기 InternetData에 대한 작성기 MyWriter의 구성 요소 기록기데이터(논리적 경로 "")의 종속성을 정의할 수 있습니다.(동일한 클래스 ID를 가진 여러 작성자가 동시에 시스템에 있을 수 있지만, 논리 경로와 구성 요소 이름의 조합이 VSS 아래의 시스템에서 고유하기 때문에 혼동을 피할 수 있습니다.)

작성기는 IVssCreateWriterMetadata::AddComponentDependency를 다른 작성기의 다른 구성 요소와 함께 반복하여 지정된 구성 요소에 여러 종속성을 추가합니다. 지정된 구성 요소가 의존하는 다른 구성 요소의 수는 VSS_COMPONENTINFO 구조체의 cDependencies 멤버를 검사하여 찾을 수 있습니다.

기록기 또는 요청자는 IVssWMComponent::GetDependency를 사용하여 IVssWMDependency 인터페이스의 인스턴스를 검색합니다. IVssWMDependency는 종속성의 대상인 구성 요소를 관리하는 작성기의 구성 요소 이름, 논리 경로 및 클래스 ID를 반환합니다.

종속성 메커니즘은 종속 구성 요소와 종속성 대상 간의 특정 기본 설정 순서를 규정하지 않습니다. 위에서 설명한 것처럼 모든 종속성은 지정된 구성 요소가 백업되거나 복원될 때마다 종속된 구성 요소 또는 구성 요소도 백업하거나 복원해야 함을 나타냅니다. 종속성의 정확한 구현은 백업 애플리케이션의 재량에 따라 결정됩니다.

예를 들어 위의 경우 구성 요소 기록기데이터(논리 경로 "")는 구성 요소 InternetConnector(논리 경로 "연결")에 따라 달라집니다. 요청자는 다음 방법 중 하나로 이를 자유롭게 해석할 수 있습니다.

  • 백업 또는 복원을 위해 종속 구성 요소인 writerData를 (암시적으로 또는 명시적으로) 선택한 경우 요청자는 종속성인 internetData의 대상을 암시적으로 또는 명시적으로 선택해야 합니다.
  • 해당 종속성의 대상인 internetData가 백업을 위해 선택되지 않은 경우 종속 구성 요소인 writerData를 선택해서는 안 됩니다.

그러나 종속성에 대한 지원을 개발할 때 요청자 개발자는 작성기가 해당 구성 요소 중 하나가 종속성의 대상인지 확인할 수 있는 방법이 없다는 것을 알고 있어야 합니다.

원격 종속성 선언

분산 애플리케이션은 한 번에 하나 이상의 컴퓨터를 사용하도록 구성할 수 있는 애플리케이션입니다. 일반적으로 애플리케이션은 하나 이상의 애플리케이션 서버 컴퓨터에서 실행되며 하나 이상의 데이터베이스 서버 컴퓨터와 통신하지만 실제로 실행되거나 실행되지 않을 수 있습니다. 이 구성을 다중 시스템 배포라고도 합니다. 애플리케이션 서버와 데이터베이스 서버를 모두 실행하는 단일 컴퓨터에서 동일한 애플리케이션을 실행하도록 구성할 수도 있습니다. 이러한 구성을 단일 시스템 배포라고 합니다. 두 구성 모두에서 애플리케이션 서버와 데이터베이스 서버에는 각각 고유한 독립 VSS 작성기가 있습니다.

다중 시스템 배포에서 애플리케이션의 기록기에서 관리하는 구성 요소가 데이터베이스 서버의 기록기에서 관리하는 원격 구성 요소에 의존하는 경우 이를 원격 종속성이라고 합니다. (반면 단일 시스템 배포에는 로컬 종속성만 있습니다.)

다중 시스템 배포의 예로 SQL Server 데이터베이스 서버를 데이터 저장소로 사용하는 애플리케이션 서버를 고려합니다. 웹 파트, 웹 콘텐츠 파일 및 IIS 메타베이스를 포함하는 애플리케이션별 데이터는 프런트 엔드 웹 서버라고 하는 하나 이상의 컴퓨터에 상주합니다. Config 데이터베이스와 여러 Content 데이터베이스를 포함하는 실제 SQL 데이터 저장소는 백 엔드 데이터베이스 서버라고 하는 하나 이상의 다른 컴퓨터에 있습니다. 각 프런트 엔드 웹 서버에는 동일한 애플리케이션별 콘텐츠 및 구성이 포함됩니다. 각 백 엔드 데이터베이스 서버는 콘텐츠 데이터베이스 또는 구성 데이터베이스를 호스트할 수 있습니다. 애플리케이션 소프트웨어는 데이터베이스 서버가 아닌 프런트 엔드 웹 서버에서만 실행됩니다. 이 구성에서 애플리케이션의 VSS 기록기에는 SQL 기록기에서 관리하는 구성 요소에 대한 원격 종속성이 있습니다.

기록기는 AddComponentDependency 메서드를 호출하여 "\\RemoteComputerName\"을 앞에 추가하여 원격 종속성을 선언할 수 있습니다. 여기서 RemoteComputerName 은 원격 구성 요소가 있는 컴퓨터의 이름이며 wszOnLogicalPath 매개 변수의 논리 경로에 추가됩니다. RemoteComputerName 값은 GETComputerNameEx 함수에서 반환된 IP 주소 또는 컴퓨터 이름일 수 있습니다.

Windows Server 2003: 기록기는 WINDOWS Server 2003 SP1(서비스 팩 1)을 사용하여 원격 종속성을 선언할 수 없습니다.

종속성을 식별하기 위해 요청자는 IVssWMDependency 인터페이스의 GetWriterId, GetLogicalPathGetComponentName 메서드를 호출합니다. 요청자는 getComponentNamepbstrComponentName 매개 변수에서 반환하는 구성 요소 이름을 검사해야 합니다. 구성 요소 이름이 "\\"로 시작하는 경우 요청자는 원격 종속성을 지정하고 "\\" 다음의 첫 번째 구성 요소는 작성기가 AddComponentDependency라고 할 때 지정된 RemoteComputerName이라고 가정해야 합니다. 구성 요소 이름이 "\\"로 시작되지 않으면 요청자는 로컬 종속성을 지정한다고 가정해야 합니다.

원격 종속성이 있는 경우 요청자는 로컬 구성 요소를 백업할 때 원격 구성 요소를 백업해야 합니다. 원격 구성 요소를 백업하려면 요청자에게 원격 컴퓨터에 에이전트가 있어야 하며 원격 컴퓨터에서 백업을 시작해야 합니다.

원격 종속성 구조화

종속성은 그 자체의 구성 요소가 아니라는 것을 이해하는 것이 중요합니다. 종속성을 보유하려면 구성 요소가 필요합니다.

다음 예제에서는 종속성 집합을 구성하는 두 가지 방법을 보여 줍니다.

Example 1:
    Writer 1
        Component A
            File A
            File B
            Dependency (SQL/MSDE Writer, Component X, "\")
            Dependency (SQL/MSDE Writer, Component Y, "\")

Example 2:
    Writer 2
        Component A
            File A
            File B
        Component B
            Dependency (SQL/MSDE Writer, Component X, "\")
            Dependency (SQL/MSDE Writer, Component Y, "\")

예제 1에서 종속성은 구성 요소 A에 의해 유지됩니다. 개별 파일이 아닌 구성 요소만 선택할 수 있으므로 이러한 방식으로 구성 요소 A의 종속성을 구성하려면 파일과 종속성 모두의 전체 구성 요소를 항상 백업하고 함께 복원해야 합니다. 개별적으로 백업하거나 복원할 수 없습니다.

예제 2에서 별도의 구성 요소(구성 요소 A 및 B)는 각 종속성을 보유합니다. 이 경우 두 구성 요소를 독립적으로 선택할 수 있으므로 독립적으로 백업 및 복원할 수 있습니다. 이러한 방식으로 종속성을 구조화하면 분산 애플리케이션에서 원격 종속성을 관리하는 데 훨씬 더 유연하게 액세스할 수 있습니다.

원격 종속성 지원

요청자는 원격 종속성에 대한 전체 또는 부분 지원을 제공할 수 있습니다.

전체 지원을 제공하려면 요청자는 백업 및 복원 시간에 다음을 수행해야 합니다.

백업 시 요청자는 프런트 엔드(로컬) 컴퓨터에서 백업을 시작하고, 존재하는 종속성을 확인하고, 백 엔드 데이터베이스를 캡처하기 위해 추가 백업 작업을 스풀해야 합니다. 요청자는 IVssBackupComponents::SetBackupSucceeded 및 IVssBackupComponents::BackupComplete 메서드를 호출하기 전에 원격 컴퓨터의 백 엔드 백업 작업이 완료될 때까지 기다려야 합니다. BackupComplete를 호출하기 전에 백 엔드 구성 요소의 백업이 완료될 때까지 요청자가 대기하는 경우 백업 중에 토폴로지 잠금과 같은 추가 향상 기능을 구현하는 작성기에 대해 보다 쉽게 복구할 수 있는 백업이 생성됩니다. 다음 절차에서는 요청자가 수행해야 하는 작업을 간략하게 설명합니다.

  1. 로컬 컴퓨터에서 요청자는 IVssBackupComponents::InitializeForBackup, IVssBackupComponents::GatherWriterMetadata, IVssBackupComponents::P repareForBackupIVssBackupComponents::D oSnapshotSet 메서드를 호출합니다.
  2. 로컬 섀도 복사본이 완료되었지만 백업이 완료되기 전에 요청자는 원격 컴퓨터의 에이전트에 요청을 전송하여 추가 백업 작업을 스풀합니다.
  3. 원격 컴퓨터에서 요청자의 에이전트는 InitializeForBackup, GatherWriterMetadata, PrepareForBackup, DoSnapshotSet, SetBackupSucceededBackupComplete를 호출하여 스풀링된 백업 시퀀스를 수행합니다.
  4. 요청자의 에이전트가 원격 컴퓨터에서 스풀링된 작업을 완료하면 요청자는 SetBackupSucceededBackupComplete를 호출하여 백업 순서를 완료합니다.

복원 시 요청자는 프런트 엔드(로컬) 컴퓨터와 관련된 복원을 시작하고 복원할 구성 요소 및 해당 종속성을 선택한 다음 IVssBackupComponents::P reRestore 메서드를 호출하여 PreRestore 이벤트를 보내야 합니다. 그런 다음, 요청자는 원격 컴퓨터에서 백 엔드 복원 작업을 스풀하고 백 엔드 복원이 완료되면 IVssBackupComponents::P ostRestore 메서드를 호출해야 합니다. 이 요구 사항은 프런트 엔드 작성기에게 복원 환경에 대한 더 많은 제어와 전반적인 관리자 사용자 환경을 제공합니다. 각 시스템의 백업은 동시에 발생하지 않으므로 프런트 엔드 기록기는 백 엔드 데이터의 일부 정리를 수행해야 합니다. 앞의 "원격 종속성 선언"에서 설명한 예제 애플리케이션에서 기록기는 백 엔드 데이터베이스 중 하나의 복원이 완료된 후 사이트 다시 매핑 또는 다시 인덱싱을 시작해야 합니다. 이렇게 하려면 작성기가 프런트 엔드 서버에서 이벤트를 수신해야 합니다. 다음 절차에서는 요청자가 수행해야 하는 작업을 간략하게 설명합니다.

  1. 로컬 컴퓨터에서 요청자는 IVssBackupComponents::InitializeForRestore, GatherWriterMetadata, IVssBackupComponents::SetSelectedForRestore (또는 IVssBackupComponentsEx::SetSelectedForRestoreEx) 및 PreRestore를 호출합니다.
  2. PreRestore 단계가 완료되었지만 PostRestore 단계가 시작되기 전에 요청자는 원격 컴퓨터의 에이전트에 요청을 전송하여 추가 복원 작업을 스풀합니다.
  3. 원격 컴퓨터에서 요청자의 에이전트는 InitializeForRestore, GatherWriterMetadata, SetSelectedForRestore, PreRestore, SetFileRestoreStatus (또는 SetSelectedForRestoreEx) 및 PostRestore를 호출하여 스풀링된 복원 작업을 수행합니다.
  4. 요청자의 에이전트가 원격 컴퓨터에서 스풀링된 작업을 완료하면 요청자는 IVssBackupComponents::SetFileRestoreStatusPostRestore를 호출하여 복원 순서를 완료합니다.

원격 종속성에 대한 부분적인 지원을 제공하려면 요청자가 원격 종속성을 따라 백업의 일부로 포함해야 하지만 이전 두 절차에서 자세히 설명한 대로 프런트 엔드 및 백 엔드 시스템에서 이벤트 순서는 필요하지 않습니다. 부분 지원만 구현하는 요청자의 경우 요청자는 작성기 애플리케이션의 백업/복원 설명서를 참조하여 지원될 수 있는 시나리오를 이해해야 합니다.