Поделиться через


Функция 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, операция восстановления не будет завершена, если применяется одно из следующих обстоятельств:

  • Другие узлы в настоящее время активны.
  • Макет секционирования текущего ресурса кворума не идентичен макету секционирования ресурса кворума, который был создан на момент создания резервной копии. (Термин "макет секции" относится к количеству секций на диске и смещениям каждой секции. Сигнатуры диска и буквы диска не обязательно должны быть идентичными.)
Если для параметра bForce задано значение TRUE , операция будет продолжена независимо от указанных выше обстоятельств. однако операция по-прежнему может завершиться ошибкой по другим причинам.

[in, optional] lpszQuorumDriveLetter

Необязательный элемент. Определяет букву диска ресурса кворума, на котором будет восстановлена база данных кластера . Используйте этот параметр, только если ресурс кворума был заменен с момента создания резервной копии. Строка должна быть отформатирована следующим образом:

  • Первый символ должен быть алфавитным, то есть в диапазоне "a"-'z" или "A"-"Z".
  • Второй символ должен быть двоеточием (':').
  • Третий символ должен быть завершающим значением NULL ('\0').

Возвращаемое значение

Если операция выполнена успешно, функция возвращает ERROR_SUCCESS.

Если операция завершается сбоем, функция возвращает код системной ошибки. Ниже приведены возможные коды ошибок.

Код возврата Описание
ERROR_CLUSTER_NODE_UP
Операция завершилась сбоем, так как в настоящее время активны другие узлы кластера. При повторном вызове RestoreClusterDatabase с параметром bForce имеет значение TRUE, кластер попытается завершить работу службы кластера на других активных узлах.
ERROR_QUORUM_DISK_NOT_FOUND
Операция завершилась сбоем, так как диск кворума, описанный в резервной копии, не соответствует текущему диску кворума. При повторном вызове RestoreClusterDatabase с параметром bForce , имеющим значение TRUE, кластер попытается изменить сигнатуру и букву диска текущего диска кворума на значения, хранящиеся в резервной копии.

Комментарии

Если операция восстановления выполнена успешно, узел восстановления формирует кластер в соответствии с данными конфигурации в восстановленной базе данных кластера. Когда другие узлы присоединяются к кластеру, они обновляют свои кластерные базы данных из базы данных на восстанавливаемом узле.

Обратите внимание, что диски кластера, отличные от ресурса кворума, которые были добавлены или изменены с момента создания резервной копии, не будут распознаны восстановленной базой данных кластера и останутся в автономном режиме , даже если операция восстановления будет успешно выполнена. Для этих дисков необходимо создать новые ресурсы (см. раздел Создание ресурса физического диска).

Для любой процедуры восстановления кластера рекомендуется использовать следующую общую процедуру:

  1. Вызовите RestoreClusterDatabase , если для параметра bForceзадано значение FALSE , а буква диска не указана. Это лучший подход, так как в случае успешного выполнения операции не требуется принудительное изменение конфигурации.
  2. Если первый вызов завершается сбоем, позвольте пользователю решить, следует ли принудительно продолжить процедуру или устранить проблему вручную. Не забудьте сообщить о последствиях каждого решения.
    Возвращаемое значение Действие при принудительном Исправление вручную
    ERROR_CLUSTER_NODE_UP Операция восстановления остановит службу кластеров на всех остальных узлах. Пользователь вручную завершает работу службы кластеров на всех остальных узлах кластера. Достаточно команды Net Stop ClusSvc ; полное выключение питания не требуется.
    ERROR_QUORUM_DISK_NOT_FOUND Пользователь должен указать букву диска ресурса кворума. Операция восстановления изменит сигнатуру диска и букву диска на значения, хранящиеся в резервной копии. Пользователь повторно секционирует диск кворума, чтобы макет был идентичен макету, хранящейся в резервной копии.
     

    Если пользователь соглашается на принудительное продолжение, вызовите RestoreClusterDatabase с параметром bForcetrue и указанной буквой диска (если применимо). Принудительное применение не гарантирует успешность. Если операция восстановления снова завершится сбоем, проверьте возвращаемое значение и ответьте соответствующим образом.

Примеры

В следующем примере показана описанная выше процедура. Более полный пример, включающий BackupClusterDatabase, см. в разделе Резервное копирование и восстановление конфигурации кластера. В этом примере используется файл заголовка 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 Корпоративная, Windows Server 2003 Datacenter
Целевая платформа Windows
Header clusapi.h
Библиотека ClusAPI.lib
DLL ClusAPI.dll

См. также раздел

BackupClusterDatabase