ALTER DATABASE データベース ミラーリング (Transact-SQL)

データベースのデータベース ミラーリングを制御します。データベース ミラーリング オプションで指定した値は、データベースのコピーと、データベース ミラーリング セッション全体の両方に適用されます。データベース ミラーリング オプションは、ALTER DATABASE ステートメントごとに 1 つだけ指定できます。

注意

構成はパフォーマンスに影響する場合があるので、データベース ミラーリングの構成はピーク タイム以外の時間に行うことをお勧めします。

データベース ミラーリングの詳細については、「データベース ミラーリングの管理」を参照してください。その他の ALTER DATABASE オプションについては、「ALTER DATABASE (Transact-SQL)」を参照してください。その他の ALTER DATABASE SET オプションについては、「ALTER DATABASE の SET オプション (Transact-SQL)」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

ALTER DATABASE database_name 
SET { <partner_option> | <witness_option> }
    <partner_option> ::=
    PARTNER { = 'partner_server' 
            | FAILOVER 
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME 
            | SAFETY { FULL | OFF }
            | SUSPEND 
            | TIMEOUT integer
            }
    <witness_option> ::=
    WITNESS { = 'witness_server' 
            | OFF 
            }

引数

重要な注意事項重要

SET PARTNER または SET WITNESS コマンドは入力時には正常に完了できますが、後で失敗します。

  • database_name
    変更するデータベースの名前を指定します。

  • PARTNER <partner_option>
    データベース ミラーリング セッションのフェールオーバー パートナー、およびそれらの動作を定義する、データベース プロパティを制御します。SET PARTNER オプションには、パートナーのうちのいずれか一方で設定すればよいものと、プリンシパル サーバーとミラー サーバーのいずれか一方に限定されているものがあります。詳細については、後述の各 PARTNER オプションを参照してください。SET PARTNER 句は、それを指定したパートナーには関係なく、データベースの両方のコピーに影響します。

    SET PARTNER ステートメントを実行するには、両方のパートナーのエンドポイントの STATE が、STARTED に設定されている必要があります。また、それぞれのパートナー サーバー インスタンスのデータベース ミラーリング エンドポイントの ROLE は、PARTNER または ALL のいずれかに設定されている必要があります。エンドポイントの指定方法の詳細については、「Windows 認証でミラーリング エンドポイントを作成する方法 (Transact-SQL)」を参照してください。サーバー インスタンスのデータベース ミラーリング エンドポイントのロールおよび状態を確認するには、そのインスタンス上で、次の Transact-SQL ステートメントを使用します。

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    

    <partner_option> ::=

    注意

    1 つの SET PARTNER 句で指定できる <partner_option> は 1 つだけです。

    • 'partner_server'
      SQL Server のインスタンスのサーバー ネットワーク アドレスが、新しいデータベース ミラーリング セッションでフェールオーバー パートナーとして動作することを指定します。各セッションには 2 つのパートナーが必要です。一方はプリンシパル サーバーとして起動し、他方はミラー サーバーとして起動します。これらのパートナーは、別々のコンピューター上に配置することをお勧めします。

      このオプションは、各パートナーでのセッションごとに 1 回指定します。データベース ミラーリング セッションを開始するには、2 つの ALTER DATABASE database SET PARTNER ='partner_server' ステートメントが必要です。これらのステートメントの順序は非常に重要です。最初に、ミラー サーバーに接続し、プリンシパル サーバー インスタンスを partner_server (SET PARTNER ='principal_server') として指定します。次に、プリンシパル サーバーに接続し、ミラー サーバー インスタンスを partner_server (SET PARTNER ='mirror_server') として指定します。これにより、これら 2 つのパートナー間で、データベース ミラーリング セッションが開始されます。詳細については、「データベース ミラーリングの設定」を参照してください。

      partner_server の値は、サーバー ネットワーク アドレスです。構文は次のとおりです。

      TCP**://<system-address>:**<port>

      パラメーターの説明

      • <system-address> は、システム名、完全修飾ドメイン名、IP アドレスなどの文字列です。対象のコンピューター システムを一意に識別します。

      • <port> は、パートナー サーバー インスタンスのミラーリング エンドポイントに関連付けられているポート番号です。

      詳細については、「サーバー ネットワーク アドレスの指定 (データベース ミラーリング)」を参照してください。

      SET PARTNER ='partner_server' 句の例を次に示します。

      'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'
      
      重要な注意事項重要

      SQL Server Management Studio ではなく ALTER DATABASE ステートメントを使用してセットアップしたセッションでは、トランザクションの安全性が既定の完全な安全性に設定され (SAFETY の値が FULL)、セッションは自動フェールオーバーを伴わない高い安全性モードで実行されます。自動フェールオーバーを使用するにはミラーリング監視サーバーを構成し、高パフォーマンス モードで実行するにはトランザクションの安全性を無効 (SAFETY OFF) にします。

    • FAILOVER
      プリンシパル サーバーをミラー サーバーに手動でフェールオーバーします。FAILOVER は、プリンシパル サーバー上でのみ指定できます。このオプションは、SAFETY が FULL に設定されている (既定) 場合にのみ有効です。

      FAILOVER オプションを指定する場合は、データベース コンテキストとして master が必要です。

      詳細については、「手動フェールオーバー」を参照してください。

    • FORCE_SERVICE_ALLOW_DATA_LOSS
      データベースが非同期状態の場合、または自動フェールオーバーが行われずデータベースが同期状態の場合、プリンシパル サーバーで障害が発生すると、データベース サービスを強制的にミラー データベースにします。

      サービスの強制は、プリンシパル サーバーが停止した場合にのみ行うことを強くお勧めします。それ以外の場合にサービスを強制すると、一部のクライアントが、新しいプリンシパル データベースではなく、元のプリンシパル データベースにアクセスし続ける可能性があります。

      FORCE_SERVICE_ALLOW_DATA_LOSS は、ミラー サーバー上でのみ使用可能で、かつ次の条件をすべて満たしている必要があります。

      • プリンシパル サーバーが停止している。

      • WITNESS が OFF に設定されているか、またはミラーリング監視サーバーがミラー サーバーに接続されている。

      サービスの強制は、データベースにサービスを直ちに復元するために一部のデータが失われてもかまわないという場合にのみ行ってください。サービスの強制に代わる方法の詳細については、「非同期データベース ミラーリング (高パフォーマンス モード)」を参照してください。

      サービスを強制すると、セッションが中断され、すべてのデータが一時的に元のプリンシパル データベースに保持されます。元のプリンシパルが稼働し、新しいプリンシパル サーバーと通信できるようになると、データベース管理者はサービスを再開できます。セッションを再開すると、すべての未送信ログ レコードと、それに対応する更新は失われます。

      サービスを強制する際のリスクの詳細については、「強制的なサービスの起動 (データ損失の可能性あり)」を参照してください。

    • OFF
      データベース ミラーリング セッションを削除し、データベースからミラーリングを削除します。OFF は、どちらのパートナー上でも指定できます。詳細については、「データベース ミラーリングの削除」で、ミラーリングを削除した場合の影響を参照してください。

    • RESUME
      中断状態のデータベース ミラーリング セッションを再開します。RESUME は、プリンシパル サーバー上でのみ指定できます。

    • SAFETY { FULL | OFF }
      トランザクションの安全性のレベルを設定します。SAFETY は、プリンシパル サーバー上でのみ指定できます。

      既定値は FULL です。SAFETY が FULL の場合、データベース ミラーリング セッションは高い安全性モードで同期的に実行されます。OFF の場合は、データベース ミラーリング セッションは高パフォーマンス モードで非同期的に実行されます。

      高い安全性モードの動作は、次のように部分的にミラーリング監視に依存します。

      • SAFETY が FULL に設定され、ミラーリング監視がセッションに対して設定されている場合、セッションは自動フェールオーバーを伴う高い安全性モードで実行されます。データベースが同期され、ミラー サーバー インスタンスとミラーリング監視が引き続き相互接続している場合 (つまりクォーラムを保持している場合)、プリンシパル サーバーが失われると、セッションでは自動的にフェールオーバーが発生します。詳細については、「クォーラム : データベースの可用性にミラーリング監視サーバーが与える影響」を参照してください。

        ミラーリング監視がセッションに対して設定されていても、ミラーリング監視サーバーが切断されていると、ミラー サーバーが利用できなくなるためプリンシパル サーバーがダウンします。

      • SAFETY が FULL に設定され、ミラーリング監視が OFF に設定されている場合、セッションは自動フェールオーバーを伴わない高い安全性モードで実行されます。ミラー サーバー インスタンスがダウンしても、プリンシパル サーバー インスタンスは影響を受けません。プリンシパル サーバー インスタンスがダウンした場合、ミラー サーバー インスタンスにサービスの提供を強制的に移行できます (データが損失する可能性があります)。

      SAFETY が OFF に設定されている場合、セッションは高パフォーマンス モードで実行されます。この場合、自動フェールオーバーも手動フェールオーバーもサポートされません。ただし、ミラー サーバーで発生した問題が、プリンシパル サーバーに影響を及ぼすことはありません。WITNESS が OFF に設定されているか、ミラーリング監視サーバーがミラーに現在接続されているときに、プリンシパル サーバー インスタンスがダウンした場合、必要に応じてミラー サーバー インスタンスにサービスの提供を強制的に移行できます (データが損失する可能性があります)。サービスの強制の詳細については、前の「FORCE_SERVICE_ALLOW_DATA_LOSS」を参照してください。

      重要な注意事項重要

      高パフォーマンス モードは、ミラーリング監視の使用を想定していません。ただし、SAFETY を OFF に設定した場合は常に、WITNESS も OFF に設定することを強くお勧めします。

      詳細については、「Transact-SQL の設定とデータベース ミラーリングの動作モード」を参照してください。

    • SUSPEND
      データベース ミラーリング セッションを一時停止します。

      SUSPEND は、どちらのパートナー上でも指定できます。

    • TIMEOUT integer
      タイムアウト時間を秒単位で指定します。タイムアウト時間は、ミラーリング セッションの別のインスタンスからの PING メッセージを受信するために、サーバー インスタンスが待機する最大時間です。この時間を過ぎると、待機していたインスタンスは接続解除されたものと見なされます。

      TIMEOUT オプションは、プリンシパル サーバー上でのみ指定できます。このオプションを指定しない場合、この時間は既定で 10 秒に設定されます。5 以上の値を指定すると、タイムアウト時間は指定した秒数に設定されます。タイムアウト値に 0 ~ 4 秒を指定すると、タイムアウト時間は自動的に 5 秒に設定されます。

      重要な注意事項重要

      タイムアウト期間を 10 秒以上にしておくことをお勧めします。値を 10 秒未満に設定すると、負荷の高いシステムでは PING を受信できず、誤認エラーが示される可能性があります。

      詳細については、「データベース ミラーリング中に発生する可能性のあるエラー」を参照してください。

  • WITNESS <witness_option>
    データベースのミラーリング監視を定義するデータベース プロパティを制御します。SET WITNESS 句は、データベースの両方のコピーに影響しますが、SET WITNESS はプリンシパル サーバー上でのみ指定できます。ミラーリング監視がセッションに対して設定されている場合にデータベースを使用できるようにするには、SAFETY の設定に関係なく、クォーラムが必要です。詳細については、「クォーラム : データベースの可用性にミラーリング監視サーバーが与える影響」を参照してください。

    ミラーリング監視とフェールオーバー パートナーは、別々のコンピューターに配置することをお勧めします。ミラーリング監視の詳細については、「データベース ミラーリング監視サーバー」を参照してください。自動フェールオーバーの詳細については、「自動フェールオーバー」を参照してください。

    SET WITNESS ステートメントを実行するには、プリンシパル サーバー インスタンスおよびミラーリング監視サーバー インスタンスのエンドポイントの STATE が STARTED に設定されている必要があります。また、ミラーリング監視サーバー インスタンスのデータベース ミラーリング エンドポイントの ROLE は、WITNESS または ALL のいずれかに設定されている必要があります。エンドポイントの指定の詳細については、「データベース ミラーリング エンドポイント」を参照してください。

    サーバー インスタンスのデータベース ミラーリング エンドポイントのロールおよび状態を確認するには、そのインスタンス上で、次の Transact-SQL ステートメントを使用します。

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    
    注意

    データベースのプロパティは、ミラーリング監視では設定できません。

    <witness_option> ::=

    注意

    1 つの SET WITNESS 句で指定できる <witness_option> は 1 つだけです。

    • 'witness_server'
      データベース エンジンのインスタンスが、データベース ミラーリング セッションのミラーリング管理サーバーとして動作することを指定します。SET WITNESS ステートメントは、プリンシパル サーバー上でのみ指定できます。

      SET WITNESS ='witness_server' ステートメントでは、witness_server の構文は partner_server の構文と同じです。

    • OFF
      データベース ミラーリング セッションから、ミラーリング監視を削除します。ミラーリング監視を OFF に設定すると、自動フェールオーバーが無効化されます。データベースが FULL SAFETY に設定され、ミラーリング監視が OFF に設定されている場合、ミラー サーバーに障害が発生すると、プリンシパル サーバーはデータベースを使用不可にします。

A. ミラーリング監視を使用したデータベース ミラーリング セッションを作成する

ミラーリング監視を使用したデータベース ミラーリングをセットアップするには、セキュリティを構成し、ミラー データベースを準備し、ALTER DATABASE を使用してパートナーを設定する必要があります。完全なセットアップ プロセスの例については、「データベース ミラーリングの設定」を参照してください。

B. データベース ミラーリング セッションを手動でフェールオーバーする

手動フェールオーバーは、どちらのデータベース ミラーリング パートナーからでも開始できます。フェールオーバーする前に、現在プリンシパル サーバーであると思われるサーバーが、実際にプリンシパル サーバーであるかどうかを確認する必要があります。たとえば、AdventureWorks2008R2 データベースの場合、現在プリンシパル サーバーであると思われるサーバー インスタンスで、次のクエリを実行します。

SELECT db.name, m.mirroring_role_desc 
FROM sys.database_mirroring m 
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks2008R2'; 
GO

そのサーバー インスタンスが実際にプリンシパルである場合、mirroring_role_desc の値は Principal になります。このサーバー インスタンスがミラー サーバーの場合には、SELECT ステートメントは Mirror を返します。

次の例では、そのサーバーが現在のプリンシパルであることを前提としています。

  1. データベース ミラーリング パートナーに手動でフェールオーバーするには、次のステートメントを実行します。

    ALTER DATABASE AdventureWorks2008R2 SET PARTNER FAILOVER;
    GO
    
  2. 新しいミラーでのフェールオーバーの結果を確認するには、次のクエリを実行します。

    SELECT db.name, m.mirroring_role_desc 
    FROM sys.database_mirroring m 
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks2008R2'; 
    GO
    

    mirroring_role_desc の現在の値は、Mirror です。