次の方法で共有


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 で終わる Unicode 文字列。 クラスター構成情報は、この場所に含まれています。これは、保護する必要がある機密データです。 たとえば、このデータを保護するには、アクセス制御リストを使用して、データが格納されている場所へのアクセスを制限します。

[in] bForce

FALSE の場合、次のいずれかの状況が適用される場合、復元操作は完了しません。

  • 他のノードは現在アクティブです。
  • 現在のクォーラム リソースのパーティション レイアウトは、バックアップの作成時に配置されたクォーラム リソースのパーティション レイアウトと同じではありません。 ("パーティション レイアウト" という用語は、ディスク上のパーティションの数と各パーティションのオフセットを指します。ディスク署名とドライブ文字の割り当ては同一である必要はありません)。
bForceTRUE に設定すると、上記の状況に関係なく操作が続行されます。ただし、他の理由で操作が失敗する可能性があります。

[in, optional] lpszQuorumDriveLetter

省略可能。 クラスター データベースを復元するクォーラム リソースのドライブ文字を識別します。 このパラメーターは、バックアップが作成されてからクォーラム リソースが置き換えられた場合にのみ使用します。 文字列は、次のように書式設定する必要があります。

  • 最初の文字は英字である必要があります。つまり、範囲 'a'-'z' または 'A'-'Z' です。
  • 2 番目の文字はコロン (':') である必要があります。
  • 3 番目の文字は、終端の null ('\0') である必要があります。

戻り値

操作が成功した場合、関数は ERROR_SUCCESSを返します。

操作が失敗した場合、関数は システム エラー コードを返します。 考えられるエラー コードを次に示します。

リターン コード 説明
ERROR_CLUSTER_NODE_UP
他のクラスター ノードが現在アクティブであるため、操作に失敗しました。 bForceTRUE に設定して RestoreClusterDatabase をもう一度呼び出すと、クラスターは他のアクティブなノードでクラスター サービスのシャットダウンを試みます。
ERROR_QUORUM_DISK_NOT_FOUND
バックアップで説明されているクォーラム ディスクが現在のクォーラム ディスクと一致しないため、操作に失敗しました。 bForceTRUE に設定して RestoreClusterDatabase を再度呼び出すと、クラスターは現在のクォーラム ディスクの署名とドライブ文字をバックアップに格納されている値に変更しようとします。

注釈

復元操作が成功した場合、復元ノードは、復元された クラスター データベース内の構成データに従ってクラスターを形成します。 他のノードがクラスターに参加すると、復元中のノード上のデータベースからクラスター データベースが更新されます。

バックアップの作成後に追加または変更されたクォーラム リソース以外の クラスター ディスク は、復元されたクラスター データベースでは認識されず、復元操作が成功した場合でも オフライン のままであることに注意してください。 これらのディスクに対して新しい リソース を作成する必要があります ( 「物理ディスク リソースの作成」を参照してください)。

クラスター復元ルーチンには、次の一般的な手順をお勧めします。

  1. bForceを FALSE に設定し、ドライブ文字を指定しない RestoreClusterDatabase を呼び出します。 成功した場合、操作で構成を強制的に変更する必要がないため、これが最適な方法です。
  2. 最初の呼び出しが失敗した場合は、プロシージャを強制的に続行するか、手動で問題を修正するかをユーザーに決定させます。 各決定の影響を必ず伝える必要があります。
    戻り値 強制された場合のアクション 手動修正
    ERROR_CLUSTER_NODE_UP 復元操作により、他のすべてのノードでクラスター サービスが停止されます。 ユーザーは、他のすべてのクラスター ノードでクラスター サービスを手動でシャットダウンします。 コマンド Net Stop ClusSvc で十分です。完全なパワーダウンは不要です。
    ERROR_QUORUM_DISK_NOT_FOUND ユーザーはクォーラム リソースのドライブ文字を指定する必要があります。 復元操作により、ディスクの署名とドライブ文字がバックアップに格納されている値に変更されます。 ユーザーはクォーラム ディスクを再パーティション分割して、レイアウトがバックアップに格納されているレイアウトと同じになるようにします。
     

    ユーザーが継続を強制することに同意した場合は、bForceTRUE に設定し、ドライブ文字を指定して RestoreClusterDatabase を呼び出します (該当する場合)。 強制しても成功は保証されません。 復元操作が再度失敗した場合は、戻り値をテストし、適切に応答します。

次の例は、上記の手順を示しています。 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 Enterprise、Windows Server 2003 Datacenter
対象プラットフォーム Windows
ヘッダー clusapi.h
Library ClusAPI.lib
[DLL] ClusAPI.dll

こちらもご覧ください

BackupClusterDatabase