Функция 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, операция восстановления не будет завершена, если применяется одно из следующих обстоятельств:
- Другие узлы в настоящее время активны.
- Макет секционирования текущего ресурса кворума не идентичен макету секционирования ресурса кворума, который был создан на момент создания резервной копии. (Термин "макет секции" относится к количеству секций на диске и смещениям каждой секции. Сигнатуры диска и буквы диска не обязательно должны быть идентичными.)
[in, optional] lpszQuorumDriveLetter
Необязательный элемент. Определяет букву диска ресурса кворума, на котором будет восстановлена база данных кластера . Используйте этот параметр, только если ресурс кворума был заменен с момента создания резервной копии. Строка должна быть отформатирована следующим образом:
- Первый символ должен быть алфавитным, то есть в диапазоне "a"-'z" или "A"-"Z".
- Второй символ должен быть двоеточием (':').
- Третий символ должен быть завершающим значением NULL ('\0').
Возвращаемое значение
Если операция выполнена успешно, функция возвращает ERROR_SUCCESS.
Если операция завершается сбоем, функция возвращает код системной ошибки. Ниже приведены возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Операция завершилась сбоем, так как в настоящее время активны другие узлы кластера. При повторном вызове RestoreClusterDatabase с параметром bForce имеет значение TRUE, кластер попытается завершить работу службы кластера на других активных узлах. |
|
Операция завершилась сбоем, так как диск кворума, описанный в резервной копии, не соответствует текущему диску кворума. При повторном вызове RestoreClusterDatabase с параметром bForce , имеющим значение TRUE, кластер попытается изменить сигнатуру и букву диска текущего диска кворума на значения, хранящиеся в резервной копии. |
Комментарии
Если операция восстановления выполнена успешно, узел восстановления формирует кластер в соответствии с данными конфигурации в восстановленной базе данных кластера. Когда другие узлы присоединяются к кластеру, они обновляют свои кластерные базы данных из базы данных на восстанавливаемом узле.
Обратите внимание, что диски кластера, отличные от ресурса кворума, которые были добавлены или изменены с момента создания резервной копии, не будут распознаны восстановленной базой данных кластера и останутся в автономном режиме , даже если операция восстановления будет успешно выполнена. Для этих дисков необходимо создать новые ресурсы (см. раздел Создание ресурса физического диска).
Для любой процедуры восстановления кластера рекомендуется использовать следующую общую процедуру:
- Вызовите RestoreClusterDatabase , если для параметра bForceзадано значение FALSE , а буква диска не указана. Это лучший подход, так как в случае успешного выполнения операции не требуется принудительное изменение конфигурации.
-
Если первый вызов завершается сбоем, позвольте пользователю решить, следует ли принудительно продолжить процедуру или устранить проблему вручную. Не забудьте сообщить о последствиях каждого решения.
Возвращаемое значение Действие при принудительном Исправление вручную 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 |