Fonction RestoreClusterDatabase (clusapi.h)
[Cette fonction est disponible pour une utilisation dans les systèmes d’exploitation spécifiés dans la section Configuration requise. La prise en charge de cette fonction a été supprimée dans Windows Server 2008 et cette fonction ne fait rien et retourne ERROR_CALL_NOT_IMPLEMENTED.]
Restaure la base de données du cluster et redémarre le service de cluster sur le nœud à partir duquel la fonction est appelée. Ce nœud est appelé nœud de restauration.
Syntaxe
DWORD RestoreClusterDatabase(
[in] LPCWSTR lpszPathName,
[in] BOOL bForce,
[in, optional] LPCWSTR lpszQuorumDriveLetter
);
Paramètres
[in] lpszPathName
Chaîne Unicode terminée par null spécifiant le chemin d’accès au fichier de sauvegarde. Les informations de configuration du cluster sont contenues dans cet emplacement ; il s’agit de données sensibles qui doivent être protégées. Par exemple, ces données peuvent être protégées à l’aide d’une liste de contrôle d’accès pour restreindre l’accès à l’emplacement où les données sont stockées.
[in] bForce
Si la valeur est FALSE, l’opération de restauration n’est pas terminée si l’une des circonstances suivantes s’applique :
- D’autres nœuds sont actuellement actifs.
- La disposition de partition de la ressource de quorum actuelle n’est pas identique à la disposition de partition de la ressource de quorum qui était en place lors de la sauvegarde. (Le terme « disposition de partition » fait référence au nombre de partitions sur le disque et aux décalages de chaque partition. Les attributions de signature de disque et de lettre de lecteur ne doivent pas être identiques.)
[in, optional] lpszQuorumDriveLetter
facultatif. Identifie la lettre de lecteur de la ressource quorum sur laquelle la base de données de cluster sera restaurée. Utilisez ce paramètre uniquement si la ressource quorum a été remplacée depuis que la sauvegarde a été effectuée. La chaîne doit être mise en forme comme suit :
- Le premier caractère doit être alphabétique, c’est-à-dire dans la plage 'a'-'z' ou 'A'-'Z'.
- Le deuxième caractère doit être un signe deux-points (« : »).
- Le troisième caractère doit être une valeur null de fin (« \0 »).
Valeur retournée
Si l’opération réussit, la fonction retourne ERROR_SUCCESS.
Si l’opération échoue, la fonction retourne un code d’erreur système. Voici les codes d’erreur possibles.
Code de retour | Description |
---|---|
|
L’opération a échoué, car d’autres nœuds de cluster sont actuellement actifs. Si vous appelez à nouveau RestoreClusterDatabase avec bForce défini sur TRUE, le cluster tente d’arrêter le service cluster sur les autres nœuds actifs. |
|
L’opération a échoué, car le disque de quorum décrit dans la sauvegarde ne correspond pas au disque de quorum actuel. Si vous appelez à nouveau RestoreClusterDatabase avec bForce défini sur TRUE, le cluster tente de modifier la signature et la lettre de lecteur du disque de quorum actuel en valeurs stockées dans la sauvegarde. |
Remarques
Si l’opération de restauration réussit, le nœud de restauration forme un cluster en fonction des données de configuration dans la base de données du cluster restaurée. Lorsque d’autres nœuds rejoignent le cluster, ils mettent à jour leurs bases de données de cluster à partir de la base de données sur le nœud de restauration.
Notez que les disques de cluster autres que la ressource de quorum qui ont été ajoutés ou modifiés depuis la sauvegarde ne sont pas reconnus par la base de données de cluster restaurée et restent hors connexion même si l’opération de restauration réussit. De nouvelles ressources doivent être créées pour ces disques (consultez Création d’une ressource de disque physique).
La procédure générale suivante est recommandée pour toute routine de restauration de cluster :
- Appelez RestoreClusterDatabase avec bForce défini sur FALSE et aucune lettre de lecteur spécifiée. Il s’agit de la meilleure approche, car, si elle réussit, l’opération n’a pas besoin de forcer les modifications de configuration.
-
Si le premier appel échoue, laissez l’utilisateur décider s’il faut forcer la procédure à continuer ou résoudre manuellement le problème. Veillez à communiquer les implications de chaque décision.
Valeur retournée Action en cas de force Correctif manuel ERROR_CLUSTER_NODE_UP L’opération de restauration arrête le service de cluster sur tous les autres nœuds. L’utilisateur arrête manuellement le service cluster sur tous les autres nœuds de cluster. La commande Net Stop ClusSvc est suffisante ; une mise hors tension complète n’est pas nécessaire. ERROR_QUORUM_DISK_NOT_FOUND L’utilisateur doit fournir la lettre de lecteur de la ressource quorum. L’opération de restauration modifie la signature et la lettre de lecteur du disque en valeurs stockées dans la sauvegarde. L’utilisateur repartit le disque de quorum afin que la disposition soit identique à la disposition stockée dans la sauvegarde. Si l’utilisateur accepte de forcer la continuation, appelez RestoreClusterDatabase avec bForce défini sur TRUE et la lettre de lecteur spécifiée (le cas échéant). Le forçage ne garantit pas la réussite. Si l’opération de restauration échoue à nouveau, testez la valeur de retour et répondez correctement.
Exemples
L’exemple suivant illustre la procédure décrite ci-dessus. Pour obtenir un exemple plus complet qui inclut BackupClusterDatabase, consultez La sauvegarde et la restauration de la configuration du cluster. Cet exemple utilise le fichier d’en-tête ClusDocEx.h défini dans la documentation du cluster de basculement.
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;
}
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Aucun pris en charge |
Serveur minimal pris en charge | Windows Server 2003 Entreprise, Windows Server 2003 Datacenter |
Plateforme cible | Windows |
En-tête | clusapi.h |
Bibliothèque | ClusAPI.lib |
DLL | ClusAPI.dll |