ALTER DATABASE データベース ミラーリング (Transact-SQL)
データベースのデータベース ミラーリングを制御します。データベース ミラーリング オプションで指定した値は、データベースのコピーと、データベース ミラーリング セッション全体の両方に適用されます。<database_mirroring_option> は、ALTER DATABASE ステートメントごとに 1 つだけ指定できます。
注意 |
---|
構成はパフォーマンスに影響する場合があるので、データベース ミラーリングの構成はピーク タイム以外の時間に行うことをお勧めします。 |
データベース ミラーリングの詳細については、「データベース ミラーリングの管理」を参照してください。その他の ALTER DATABASE オプションについては、「ALTER DATABASE (Transact-SQL)」を参照してください。その他の ALTER DATABASE SET オプションについては、「ALTER DATABASE の SET オプション (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. データベース ミラーリング セッションを手動でフェールオーバーする
手動フェールオーバーは、どちらのデータベース ミラーリング パートナーからでも開始できます。フェールオーバーする前に、現在プリンシパル サーバーであると思われるサーバーが、実際にプリンシパル サーバーであるかどうかを確認する必要があります。たとえば、AdventureWorks データベースの場合、現在プリンシパル サーバーであると思われるサーバー インスタンスで、次のクエリを実行します。
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'AdventureWorks';
GO
そのサーバー インスタンスが実際にプリンシパルである場合、mirroring_role_desc の値は Principal になります。このサーバー インスタンスがミラー サーバーの場合には、SELECT ステートメントは Mirror を返します。
次の例では、そのサーバーが現在のプリンシパルであることを前提としています。
データベース ミラーリング パートナーに手動でフェールオーバーするには、次のステートメントを実行します。
ALTER DATABASE AdventureWorks SET PARTNER FAILOVER; GO
新しいミラーでのフェールオーバーの結果を確認するには、次のクエリを実行します。
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'AdventureWorks'; GO
mirroring_role_desc の現在の値は、Mirror です。