다음을 통해 공유


RestoreClusterDatabase 함수(clusapi.h)

[이 함수는 요구 사항 섹션에 지정된 운영 체제에서 사용할 수 있습니다. 이 함수에 대한 지원은 Windows Server 2008에서 제거되었으며 이 함수는 아무 것도 수행하지 않으며 ERROR_CALL_NOT_IMPLEMENTED 반환합니다.]

클러스터 데이터베이스를 복원하고 함수가 호출되는 노드에서 클러스터 서비스를 다시 시작합니다. 이 노드를 복원 노드라고 합니다.

구문

DWORD RestoreClusterDatabase(
  [in]           LPCWSTR lpszPathName,
  [in]           BOOL    bForce,
  [in, optional] LPCWSTR lpszQuorumDriveLetter
);

매개 변수

[in] lpszPathName

백업 파일의 경로를 지정하는 Null로 종료된 유니코드 문자열입니다. 클러스터 구성 정보는 이 위치에 포함됩니다. 보호해야 하는 중요한 데이터입니다. 예를 들어 이 데이터는 액세스 제어 목록을 사용하여 데이터가 저장된 위치에 대한 액세스를 제한하여 보호할 수 있습니다.

[in] bForce

FALSE이면 다음 상황 중 하나가 적용되는 경우 복원 작업이 완료되지 않습니다.

  • 다른 노드는 현재 활성화되어 있습니다.
  • 현재 쿼럼 리소스의 파티션 레이아웃은 백업을 만들 때 있던 쿼럼 리소스의 파티션 레이아웃과 동일하지 않습니다. ("파티션 레이아웃"이라는 용어는 디스크의 파티션 수와 각 파티션에 대한 오프셋을 나타냅니다. 디스크 서명 및 드라이브 문자 할당은 동일할 필요가 없습니다.)
bForceTRUE로 설정하면 이러한 이전 상황에 관계없이 작업이 진행됩니다. 그러나 다른 이유로 인해 작업이 여전히 실패할 수 있습니다.

[in, optional] lpszQuorumDriveLetter

선택 사항입니다. 클러스터 데이터베이스를 복원할 쿼럼 리소스의 드라이브 문자를 식별합니다. 백업 이후 쿼럼 리소스가 교체된 경우에만 이 매개 변수를 사용합니다. 문자열의 형식은 다음과 같이 지정해야 합니다.

  • 첫 번째 문자는 'a'-'z' 또는 'A'-'Z' 범위에서 사전순이어야 합니다.
  • 두 번째 문자는 콜론(':')이어야 합니다.
  • 세 번째 문자는 종료 null('\0')이어야 합니다.

반환 값

작업이 성공하면 함수는 ERROR_SUCCESS 반환합니다.

작업이 실패하면 함수는 시스템 오류 코드를 반환합니다. 가능한 오류 코드는 다음과 같습니다.

반환 코드 설명
ERROR_CLUSTER_NODE_UP
다른 클러스터 노드가 현재 활성화되어 있으므로 작업이 실패했습니다. bForceTRUE로 설정된 상태에서 RestoreClusterDatabase를 다시 호출하는 경우 클러스터는 다른 활성 노드에서 클러스터 서비스를 종료하려고 시도합니다.
ERROR_QUORUM_DISK_NOT_FOUND
백업에 설명된 쿼럼 디스크가 현재 쿼럼 디스크와 일치하지 않아 작업이 실패했습니다. bForceTRUE로 설정된 상태에서 RestoreClusterDatabase를 다시 호출하는 경우 클러스터는 현재 쿼럼 디스크의 서명 및 드라이브 문자를 백업에 저장된 값으로 변경하려고 시도합니다.

설명

복원 작업이 성공하면 복원된 노드는 복원된 클러스터 데이터베이스의 구성 데이터에 따라 클러스터를 형성합니다. 다른 노드가 클러스터에 조인할 때 복원 노드의 데이터베이스에서 클러스터 데이터베이스를 업데이트합니다.

백업이 수행된 이후 추가되거나 변경된 쿼럼 리소스 이외의 클러스터 디스크 는 복원된 클러스터 데이터베이스에서 인식되지 않으며 복원 작업이 성공한 경우에도 오프라인 상태로 유지됩니다. 이러한 디스크에 대한 새 리소스 를 만들어야 합니다( 실제 디스크 리소스 만들기 참조).

클러스터 복원 루틴에는 다음 일반 절차를 사용하는 것이 좋습니다.

  1. bForceFALSE로 설정되고 드라이브 문자가 지정되지 않은 RestoreClusterDatabase를 호출합니다. 성공한 경우 작업이 구성 변경을 강제 적용할 필요가 없으므로 이것이 가장 좋은 방법입니다.
  2. 첫 번째 호출이 실패하면 사용자가 프로시저를 강제로 계속할지 아니면 수동으로 문제를 해결할지 결정하도록 합니다. 각 결정의 의미를 전달해야 합니다.
    반환 값 강제 적용된 경우 작업 수동 수정
    ERROR_CLUSTER_NODE_UP 복원 작업은 다른 모든 노드에서 클러스터 서비스를 중지합니다. 사용자는 다른 모든 클러스터 노드에서 클러스터 서비스를 수동으로 종료합니다. Net Stop ClusSvc 명령으로 충분합니다. 완전한 전원이 닫을 필요가 없습니다.
    ERROR_QUORUM_DISK_NOT_FOUND 사용자는 쿼럼 리소스의 드라이브 문자를 제공해야 합니다. 복원 작업은 디스크의 서명 및 드라이브 문자를 백업에 저장된 값으로 변경합니다. 사용자는 레이아웃이 백업에 저장된 레이아웃과 동일하도록 쿼럼 디스크를 다시 분할합니다.
     

    사용자가 강제 연속에 동의하는 경우 bForceTRUE로 설정된 RestoreClusterDatabase 및 지정된 드라이브 문자(해당하는 경우)를 호출합니다. 강제 적용은 성공을 보장하지 않습니다. 복원 작업이 다시 실패하면 반환 값을 테스트하고 적절하게 응답합니다.

예제

다음 예제에서는 위에서 설명한 절차를 보여 줍니다. BackupClusterDatabase를 포함하는 보다 완전한 예제는 클러스터 구성 백업 및 복원을 참조하세요. 이 예제에서는 장애 조치(failover) 클러스터 설명서에 정의된 ClusDocEx.h 헤더 파일을 사용합니다.


int main( void )
{
    WCHAR szPath[] = L"c:\\ClusBack\\19991215";
    WCHAR szInput[3];
    BOOL bForce = FALSE;
    DWORD dwResult = ERROR_SUCCESS;

    // First try: no force
    dwResult = RestoreClusterDatabase( szPath, FALSE, NULL );
    
    // Allow user to force shutdown if necessary.
    if( dwResult == ERROR_CLUSTER_NODE_UP )
    {
        wprintf( L"The operation failed because other cluster nodes are currently active. " );
        wprintf( L"The Cluster service must be shut down on all other nodes in order for this operation to succeed." );
        wprintf( L"Enter 'f' to force automatic shutdown, or any other key to exit for manual shutdown:  " );
        fgetws( szInput, 2, stdin );
        if( towupper( szInput[0] ) == L'F' )
            dwResult = RestoreClusterDatabase( szPath, TRUE, NULL );
    }

    // Allow user to locate quorum resource if necessary.
    if( dwResult == ERROR_QUORUM_DISK_NOT_FOUND )
    {
        wprintf( L"\n\nERROR: QUORUM DISK NOT FOUND\n" );
        wprintf( L"The restore routine cannot find a quorum resource with the same partition layout as the quorum resource described in the backup. " );
        wprintf( L"The existing quorum resource must have a layout (number of partitions and offsets to each partition) identical to the layout stored in the backup.\n" );
        wprintf( L"Enter the drive letter of the quorum resource to force continuation, or any non-letter key to exit:  " );
        fgetws( szInput, 3, stdin );
        if( iswalpha( szInput[0] ) )
        {
            szInput[1] = L':';
            szInput[2] = L'\0';
            dwResult = RestoreClusterDatabase( szPath, TRUE, szInput );
        }
    }

    // Only one force attempt per error, then report success or failure. 
    if( dwResult == ERROR_SUCCESS )
    {
        wprintf( L"\n\nSUCCESS\n" );
        wprintf( L"The restore routine succeeded. Start the Cluster service on the other cluster nodes to complete the restore operation." );
        wprintf( L"As nodes join the cluster, they will update their cluster databases to match the restored configuration." ); 
        return 0;
    }
    else
    {
        wprintf( L"RestoreClusterDatabase failed (%d)\n", dwResult );
        return 1;
    }

}

요구 사항

요구 사항
지원되는 최소 클라이언트 지원되는 버전 없음
지원되는 최소 서버 Windows Server 2003 Enterprise, Windows Server 2003 Datacenter
대상 플랫폼 Windows
헤더 clusapi.h
라이브러리 ClusAPI.lib
DLL ClusAPI.dll

추가 정보

BackupClusterDatabase