Función RestoreClusterDatabase (clusapi.h)
[Esta función está disponible para su uso en los sistemas operativos especificados en la sección Requisitos. La compatibilidad con esta función se quitó en Windows Server 2008 y esta función no hace nada y devuelve ERROR_CALL_NOT_IMPLEMENTED.]
Restaura la base de datos del clúster y reinicia el servicio de clúster en el nodo desde el que se llama a la función. Este nodo se denomina nodo de restauración.
Sintaxis
DWORD RestoreClusterDatabase(
[in] LPCWSTR lpszPathName,
[in] BOOL bForce,
[in, optional] LPCWSTR lpszQuorumDriveLetter
);
Parámetros
[in] lpszPathName
Cadena Unicode terminada en NULL que especifica la ruta de acceso al archivo de copia de seguridad. La información de configuración del clúster se encuentra en esta ubicación; se trata de datos confidenciales que se deben proteger. Por ejemplo, estos datos se pueden proteger mediante una lista de control de acceso para restringir el acceso a la ubicación donde se almacenan los datos.
[in] bForce
Si es FALSE, la operación de restauración no se completará si se aplica alguna de las siguientes circunstancias:
- Otros nodos están activos actualmente.
- El diseño de partición del recurso de cuórum actual no es idéntico al diseño de partición del recurso de cuórum que se encontraba en su lugar cuando se realizó la copia de seguridad. (El término "diseño de partición" hace referencia al número de particiones en el disco y los desplazamientos a cada partición. Las asignaciones de letras de unidad y firma de disco no tienen que ser idénticas).
[in, optional] lpszQuorumDriveLetter
Opcional. Identifica la letra de unidad del recurso de cuórum en la que se restaurará la base de datos del clúster . Use este parámetro solo si el recurso de cuórum se ha reemplazado desde que se realizó la copia de seguridad. La cadena debe tener el siguiente formato:
- El primer carácter debe ser alfabético, es decir, en el intervalo 'a'-'z' o 'A'-'Z'.
- El segundo carácter debe ser dos puntos (':').
- El tercer carácter debe ser un valor NULO de terminación ('\0').
Valor devuelto
Si la operación se realiza correctamente, la función devuelve ERROR_SUCCESS.
Si se produce un error en la operación, la función devuelve un código de error del sistema. A continuación se muestran códigos de error posibles.
Código devuelto | Descripción |
---|---|
|
Error en la operación porque otros nodos del clúster están activos actualmente. Si vuelve a llamar a RestoreClusterDatabase con bForce establecido en TRUE, el clúster intentará apagar el servicio de clúster en los demás nodos activos. |
|
Error en la operación porque el disco de cuórum descrito en la copia de seguridad no coincide con el disco de cuórum actual. Si vuelve a llamar a RestoreClusterDatabase con bForce establecido en TRUE, el clúster intentará cambiar la firma y la letra de unidad del disco de cuórum actual a los valores almacenados en la copia de seguridad. |
Comentarios
Si la operación de restauración se realiza correctamente, el nodo de restauración forma un clúster según los datos de configuración de la base de datos de clúster restaurada. A medida que otros nodos se unen al clúster, actualizan sus bases de datos de clúster desde la base de datos en el nodo de restauración.
Tenga en cuenta que los discos de clúster distintos del recurso de cuórum que se han agregado o cambiado, ya que la base de datos del clúster restaurada no reconocerá la copia de seguridad y permanecerá sin conexión aunque la operación de restauración se realice correctamente. Se deben crear nuevos recursos para estos discos (consulte Creación de un recurso de disco físico).
Se recomienda el siguiente procedimiento general para cualquier rutina de restauración del clúster:
- Llame a RestoreClusterDatabase con bForce establecido en FALSE y ninguna letra de unidad especificada. Este es el mejor enfoque porque, si se ejecuta correctamente, la operación no tiene que forzar los cambios de configuración.
-
Si se produce un error en la primera llamada, permita al usuario decidir si forzará que el procedimiento continúe o corrija manualmente el problema. Asegúrese de comunicar las implicaciones de cada decisión.
Valor devuelto Acción si se fuerza Corrección manual ERROR_CLUSTER_NODE_UP La operación de restauración detendrá el servicio de clúster en todos los demás nodos. El usuario cierra manualmente el servicio de clúster en todos los demás nodos del clúster. El comando Net Stop ClusSvc es suficiente; No es necesario apagar completamente. ERROR_QUORUM_DISK_NOT_FOUND El usuario debe proporcionar la letra de unidad del recurso de cuórum. La operación de restauración cambiará la firma y la letra de unidad del disco a los valores almacenados en la copia de seguridad. El usuario vuelve a partivisionar el disco de cuórum para que el diseño sea idéntico al diseño almacenado en la copia de seguridad. Si el usuario acepta forzar la continuación, llame a RestoreClusterDatabase con bForce establecido en TRUE y la letra de unidad especificada (si procede). Forzar no garantiza el éxito. Si se produce un error en la operación de restauración, pruebe el valor devuelto y responda correctamente.
Ejemplos
En el ejemplo siguiente se muestra el procedimiento descrito anteriormente. Para obtener un ejemplo más completo que incluye BackupClusterDatabase, consulte copia de seguridad y restauración de la configuración del clúster. En este ejemplo se usa el archivo de encabezado ClusDocEx.h definido en la documentación del clúster de conmutación por error.
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;
}
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | No se admite ninguno |
Servidor mínimo compatible | Windows Server 2003 Enterprise, Windows Server 2003 Datacenter |
Plataforma de destino | Windows |
Encabezado | clusapi.h |
Library | ClusAPI.lib |
Archivo DLL | ClusAPI.dll |