単一ファーム内でミラー化されたデータベースのフェールオーバーと回復を行う

ここでは、記事「SQL Server のデータベース ミラーリングを使用して単一のファーム内で可用性を構成する」の手順に従って、高可用性データベース ミラーリングを使用するように構成された Microsoft Office SharePoint Server 2007 ファームのフェールオーバーおよび復元の方法について説明します。

この記事に含まれるセクションは次のとおりです。

  • ミラー化されたデータベースの自動フェールオーバー処理

  • ミラー化されたデータベースの手動フェールオーバー処理

  • ミラーリング フェールオーバーの監視と通知

  • ジョブ : その他すべてのデータベースをフェールオーバーさせる

  • ジョブ : 接続エイリアスを更新する

  • フェールバックする

  • 概要

ミラー化されたデータベースを実行している Office SharePoint Server 2007 環境のフェールオーバー時には、以下の処理が実行されます。

  • プリンシパル サーバー上の 1 つ以上のデータベースが、自動または手動のどちらかによりミラー データベースにフェールオーバーされます。

  • プリンシパル サーバー上のその他すべてのデータベースが強制的にフェールオーバーされます。

    ミラーリングを監視し、すべてのデータベースを強制的にフェールオーバーさせるには、Microsoft SQL Server 2005 の警告およびジョブを使用することをお勧めします。

  • データベースを参照するすべてフロントエンド Web サーバーおよびコンピュータ上の接続エイリアスがミラー サーバーを指すようにリセットされます。

ミラー化されたデータベースの自動フェールオーバー処理

自動フェールオーバーが発生するのは、プリンシパル サーバーが他のデータベース ミラーリング構成との通信を失い、ミラー サーバーおよびミラーリング監視サーバーが通信を維持している場合です。

注意

すべてのサーバー インスタンスが通信を失った場合、後でミラーリング監視サーバーおよびミラー サーバーが通信を回復しても、自動フェールオーバーは発生しません。

自動フェールオーバーが発生すると、以下の処理が実行されます。

  1. プリンシパル サーバーが実行中の場合、プリンシパル サーバーはプリンシパル データベースの状態を "切断" にし、すべてのクライアントをプリンシパル データベースから切断します。

  2. ミラーリング監視サーバーおよびミラー サーバーは、プリンシパル サーバーが使用できないことを登録します。

  3. やり直しキューでログが待機中の場合、ミラー サーバーはミラー データベースのロールフォワードを終了します。ログの適用に必要な時間は、システムの速度、最新の作業負荷、およびやり直しキューのログのサイズによって異なります。

  4. 前のプリンシパル サーバーは、セッションに再度参加したときに、フェールオーバー パートナがプリンシパル ロールを所有していることを認識します。前のプリンシパル サーバーはミラー サーバーのロールを引き継ぎ、前のプリンシパル データベースはミラー データベースになります。新しいミラー サーバーは、可能な限り迅速に新しいミラー データベースをプリンシパル データベースと同期します。新しいミラー サーバーがデータベースを再同期するとすぐに、フェールオーバーが再び可能になります。ただし、その方向は反転します。

自動フェールオーバーの詳細については、「自動フェールオーバー」(https://go.microsoft.com/fwlink/?linkid=83690&clcid=0x411) を参照してください。

ミラー化されたデータベースの手動フェールオーバー処理

手動フェールオーバーが発生するのは、通常、プリンシパル サーバーとミラー サーバーの両方が実行中の場合です。管理者は、アクティブ データベースをプリンシパルからミラーに切り替える意識的な決定を行います。

手動フェールオーバー中は、以下の処理が発生します。

  1. 管理者はプリンシパル サーバーに接続し、データベースごとに以下の Transact-SQL コマンドを発行します。

    USE master;
    ALTER DATABASE <database_name> SET PARTNER FAILOVER; -- where database_name is the mirrored database. 
    

    このステートメントにより、ミラー サーバーからプリンシパル ロールへの移行がすぐに開始されます。

  2. 前のプリンシパル サーバーでは、クライアントがデータベースから切断され、コミットされていないトランザクションがロールバックされます。

ミラーリング監視サーバーを含む自動フェールオーバー設定で手動フェールオーバーを実行すると、プリンシパル サーバーおよびミラー サーバーは自動的にロールを変更します。

ミラーリング フェールオーバーの監視と警告

ミラーリングを監視し、強制的にフェールオーバーを行うジョブを実行するには、SQL Server の警告を使用します。このジョブと警告は、SQL Server のプリンシパル インスタンスおよびミラー インスタンスの両方で使用する必要があります。

警告 : 単一のデータベースのプリンシパルからミラーへの切り替えを検出する

この警告では、Transact-SQL コマンドを使用して、任意のデータベースが対応するミラー データベースに切り替わったかどうかを検出します。

SELECT * FROM Database_MIRRORING_STATE_CHANGE 
WHERE State=8 AND (databasename='Central Administration' OR databasename='Configuration' 
ORdatabasename='SSP' 
OR databasename=’SSP Content' 
OR databasename='SSP Search' 
OR databasename='WSS Search' 
OR databasename='Content_<port>' )

ジョブ : その他すべてのデータベースをフェールオーバーさせる

検出警告の発生後、すべてのデータベースを対応するミラー データベースにフェールオーバーするジョブを実行します。

次の例では、すべてのミラー化データベースをフェールオーバーするためにジョブ内で使用できる Transact-SQL スクリプトを示します。

USE master;
DECLARE i CURSOR
READ_ONLY
FOR 
SELECT name FROM sys.databases WHERE database_id IN
(SELECT database_id FROM sys.database_mirroring WHERE mirroring_state=4)

DECLARE @name varchar(255)
DECLARE @cmd varchar(1000)
OPEN i

FETCH NEXT FROM i INTO @name
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
set @cmd = 'ALTER Database [' + @name + '] SET PARTNER FAILOVER;'
exec (@cmd)

DECLARE @message varchar(100)
SELECT @message = 'Failover for : ' + @name
PRINT @message
END
FETCH NEXT FROM i INTO @name
END

CLOSE i
DEALLOCATE i
GO

ジョブ : 接続エイリアスを更新する

フェールオーバー後、Office SharePoint Server 2007 を実行しているすべてのコンピュータ上で、SQL Server 接続エイリアスに関連付けられているデータベース サーバー名をプリンシパル サーバーからミラー サーバーに変更する必要があります。

注意

それぞれの Web アプリケーション内の参照は変更されません。そのため、フェールオーバー後の Office SharePoint Server 2007 での作業は不要です。

フェールオーバー完了後に実行する SQL Server ジョブを作成します。そのジョブで、エイリアス値のレジストリ設定をミラーに変更するコマンドを実行します。

\Registry\Machine\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo
<alias> = REG_SZ DBMSSOCN,DBMirror

注意

SQL Server ジョブおよび警告の実行に使用するアカウントには、Office SharePoint Server 2007 を実行しているコンピュータでレジストリ値を変更するための適切な権限が必要です。詳細については、「レジストリ キーにアクセス許可を割り当てる」(https://go.microsoft.com/fwlink/?linkid=116137&clcid=0x411) を参照してください。

このジョブの作成方法の例については、「データベース ミラーリングを使用した SharePoint の高可用性に関するケース スタディ (ホワイト ペーパー)」を参照してください。

フェールバック

プリンシパル サーバーにフェールバックするには、データベースを手動でフェールバックする必要があります。フェールバックおよび SQL Server クライアント接続エイリアスのリセットの自動化には、同一の SQL Server ジョブを使用できます。ジョブを実行する前に、ジョブ内の値を変更する必要があります。

まとめ

単一のファーム環境でのミラーリングを構成した後、フェールオーバーおよびフェールバックのための処理、警告、ジョブ、およびスクリプトをテストすることをお勧めします。単一のデータベースをフェールオーバーする場合は、プリンシパル サーバーへのフェールバックを最初に試行してから、その他すべてのデータベースをミラー サーバーにフェールオーバーするようにスクリプトを作成することをお勧めします。

このブックのダウンロード

このトピックは、簡単に読んだり印刷したりできるように、次のダウンロード可能なブックに収められています。