Win32 API 日本語リファレンス
ホーム › Networking.Clustering › PCLUSAPI_RESTORE_CLUSTER_DATABASE

PCLUSAPI_RESTORE_CLUSTER_DATABASE

コールバック

シグネチャ

DWORD PCLUSAPI_RESTORE_CLUSTER_DATABASE(
    LPWSTR lpszPathName,
    BOOL bForce,
    LPWSTR lpszQuorumDriveLetter
);

パラメーター

フィールド型説明
lpszPathNameLPWSTRバックアップ ファイルへのパスを指定する、NULL 終端の Unicode 文字列です。この場所にはクラスターの構成情報が 格納されます。これは機密データであるため保護する必要があります。たとえば、アクセス制御リストを使用して、 データが格納されている場所へのアクセスを制限することで保護できます。
bForceBOOL

FALSE の場合、次のいずれかに該当すると復元操作は完了しません。

  • 他のノードが現在アクティブである。
  • 現在のクォーラム リソースのパーティション レイアウトが、バックアップ作成時のクォーラム リソースの パーティション レイアウトと一致しない。(「パーティション レイアウト」とは、ディスク上のパーティション数と 各パーティションへのオフセットを指します。ディスク シグネチャとドライブ文字の割り当ては一致している必要はありません。)
bForce に TRUE を設定すると、これらの状況にかかわらず操作は続行されます。 ただし、他の理由で操作が失敗する場合もあります。
lpszQuorumDriveLetterLPWSTR

省略可能です。 クラスター データベース の復元先となるクォーラム リソースのドライブ文字を指定します。このパラメーターは、バックアップ作成後にクォーラム リソースが 置き換えられた場合にのみ使用します。文字列は次の形式にする必要があります。

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

公式ドキュメント

[この関数は、「要件」セクションに記載されたオペレーティング システムで使用できます。この関数のサポートは Windows Server 2008 で削除されており、この関数は何も行わずに ERROR_CALL_NOT_IMPLEMENTED を返します。]

関数を呼び出した ノード 上で、 クラスター データベース を復元し、 Cluster サービス を再起動します。このノードは復元ノードと呼ばれます。

戻り値

操作が成功すると、関数は ERROR_SUCCESS を返します。

操作が失敗すると、関数は システム エラー コード を返します。返される可能性のある エラー コードは次のとおりです。

戻り値 説明
ERROR_CLUSTER_NODE_UP
他のクラスター ノードが現在アクティブであるため、操作が失敗しました。bForce に TRUE を設定して RestoreClusterDatabase を 再度呼び出すと、クラスターは他のアクティブなノード上の Cluster サービスを停止しようとします。
ERROR_QUORUM_DISK_NOT_FOUND
バックアップに記録されているクォーラム ディスクが現在のクォーラム ディスクと一致しないため、操作が失敗しました。 bForce に TRUE を設定して RestoreClusterDatabase を 再度呼び出すと、クラスターは現在のクォーラム ディスクのシグネチャとドライブ文字を、バックアップに保存されている値に 変更しようとします。

解説(Remarks)

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

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

クラスターの復元ルーチンでは、一般に次の手順が推奨されます。

  1. bForce に FALSE を設定し、ドライブ文字を指定せずに RestoreClusterDatabase を呼び出します。 成功した場合は構成の変更を強制する必要がないため、これが最善の方法です。
  2. 最初の呼び出しが失敗した場合は、処理の続行を強制するか、問題を手動で修正するかをユーザーに判断させます。 それぞれの選択がもたらす影響を必ず伝えてください。
    戻り値 強制した場合の動作 手動での修正
    ERROR_CLUSTER_NODE_UP 復元操作は、他のすべてのノードで Cluster サービスを停止します。 ユーザーが他のすべてのクラスター ノードで Cluster サービスを手動で停止します。コマンド Net Stop ClusSvc で十分であり、完全な電源切断は不要です。
    ERROR_QUORUM_DISK_NOT_FOUND ユーザーがクォーラム リソースのドライブ文字を指定する必要があります。復元操作は、そのディスクの シグネチャとドライブ文字を、バックアップに保存されている値に変更します。 ユーザーがクォーラム ディスクを再パーティションし、レイアウトをバックアップに保存されているレイアウトと同一にします。

    ユーザーが強制的な続行に同意した場合は、bForce に TRUE を設定し、(該当する場合は)ドライブ文字を指定して 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;
    }

}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)