Transact-SQL の設定とデータベース ミラーリングの動作モード

このトピックでは、ALTER DATABASE の設定、ミラー化されたデータベースの状態、およびミラーリング監視サーバーの状態という観点から、データベース ミラーリング セッションの動作について説明します。このトピックは、MicrosoftSQL Server Management Studio ではなく、主に Transact-SQL を使用してデータベース ミラーリングを管理するユーザーを対象としています。動作モードについて詳しく理解していない場合は、「データベース ミラーリング セッション」を参照してください。

注意注意

Transact-SQL を使用する代わりに、[データベースのプロパティ] ダイアログ ボックスの [ミラーリング] ページを使用して、オブジェクト エクスプローラでセッションの動作モードを制御できます。詳細については、「データベース ミラーリング セッションを構成する方法 (SQL Server Management Studio)」を参照してください。

トランザクションの安全性とミラーリング監視サーバーの状態の動作モードへの影響

セッションの動作モードは、トランザクションの安全性設定とミラーリング監視サーバーの状態の組み合わせによって決まります。データベース所有者はいつでも、トランザクションの安全性レベルを変更でき、ミラーリング監視サーバーを追加または削除できます。

トランザクションの安全性

トランザクションの安全性とは、データベース ミラーリング セッションが同期して動作するか、非同期で動作するかを決定する、ミラーリング固有のデータベース プロパティです。安全性レベルには FULL と OFF の 2 種類があります。

  • SAFETY FULL

    トランザクションの安全性を FULL に設定すると、セッションは高い安全性モードで同期して動作します。ミラーリング監視サーバーが存在する場合、セッションでは自動フェールオーバーがサポートされます。

    ALTER DATABASE ステートメントを使用してセッションを確立すると、SAFETY プロパティが FULL に設定された状態でセッションが開始します。つまり、セッションは高い安全性モードで開始されます。セッションの開始後、ミラーリング監視サーバーを追加できます。

    詳細については、「同期データベース ミラーリング (高い安全性モード)」を参照してください。

  • SAFETY OFF

    トランザクションの安全性を OFF に設定すると、セッションは非同期の高パフォーマンス モードで動作します。SAFETY プロパティを OFF に設定する場合は、WITNESS プロパティも OFF (既定値) に設定する必要があります。高パフォーマンス モードのミラーリング監視サーバーによる影響については、このトピック後半の「ミラーリング監視サーバーの状態」を参照してください。トランザクションの安全性を無効にした状態での実行の詳細については、「非同期データベース ミラーリング (高パフォーマンス モード)」を参照してください。

データベースのトランザクションの安全性設定は、各パートナーについて sys.database_mirroring カタログ ビューの mirroring_safety_level 列と mirroring_safety_level_desc 列に記録されます。詳細については、「sys.database_mirroring (Transact-SQL)」を参照してください。

データベース所有者であれば、トランザクションの安全性レベルをいつでも変更できます。

ミラーリング監視サーバーの状態

ミラーリング監視サーバーが設定されている場合、クォーラムが必要なため、ミラーリング監視サーバーの状態は常に重要です。

ミラーリング監視サーバーが存在する場合、その状態は以下の 2 つの状態のいずれかになります。

  • ミラーリング監視サーバーをパートナーに接続している場合、ミラーリング監視サーバーはそのパートナーに対して CONNECTED 状態になり、そのパートナーのクォーラムを持ちます。この場合、いずれかのパートナーが使用できない場合でも、データベースは使用できるようになります。

  • ミラーリング監視サーバーが存在してもパートナーに接続されていない場合は、ミラーリング監視サーバーはそのパートナーに対して UNKOWN 状態または DISCONNECTED 状態になります。この場合、ミラーリング監視サーバーではそのパートナーのクォーラムが不足します。また、パートナーが相互に接続されていない場合、データベースは使用できなくなります。

クォーラムの詳細については、「クォーラム : データベースの可用性にミラーリング監視サーバーが与える影響」を参照してください。

サーバー インスタンス上の各ミラーリング監視サーバーの状態は、sys.database_mirroring カタログ ビューの mirroring_witness_state 列と mirroring_witness_state_desc 列に記録されます。詳細については、「sys.database_mirroring (Transact-SQL)」を参照してください。

次の表に、セッションの動作モードと、トランザクションの安全性設定やミラーリング監視サーバーの状態との依存関係の概要を示します。

動作モード

トランザクションの安全性

ミラーリング監視サーバーの状態

高パフォーマンス モード

OFF

NULL (ミラーリング監視サーバーなし)2

自動フェールオーバーを伴わない高い安全性モード

FULL

NULL (ミラーリング監視サーバーなし)

自動フェールオーバーを伴う高い安全性モード1

FULL

CONNECTED

1 ミラーリング監視サーバーが切断された場合は、そのミラーリング監視サーバー インスタンスが使用できるようになるまで、WITNESS を OFF に設定することをお勧めします。

2 ミラーリング監視サーバーが高パフォーマンス モードで存在する場合、このミラーリング監視サーバーはセッションに参加しません。ただし、データベースを使用できるようにするには、少なくとも 2 つのサーバー インスタンスが接続された状態にしておく必要があります。そのため、高パフォーマンス モードのセッションでは、WITNESS プロパティを OFF に設定しておくことをお勧めします。詳細については、「クォーラム : データベースの可用性にミラーリング監視サーバーが与える影響」を参照してください。

安全性設定とミラーリング監視サーバーの状態の表示

安全性設定やデータベースのミラーリング監視サーバーの状態を表示するには、sys.database_mirroring カタログ ビューを使用します。関連する列は次のとおりです。

要素

説明

トランザクションの安全性

mirroring_safety_level または mirroring_safety_level_desc

ミラー データベース上での更新に関するトランザクションの安全性設定。次のいずれかになります。

UNKNOWN

OFF

FULL

NULL= データベースがオンラインではありません。

ミラーリング監視サーバーの有無

mirroring_witness_name

データベース ミラーリングのミラーリング監視サーバー名または NULL。NULL はミラーリング監視サーバーが存在しないことを示します。

ミラーリング監視サーバーの状態

mirroring_witness_state または mirroring_witness_state_desc

特定のパートナー上のデータベースでのミラーリング監視サーバーの状態。

UNKNOWN

CONNECTED

DISCONNECTED

NULL = ミラーリング監視サーバーが存在しないか、データベースがオンラインではありません。

たとえば、プリンシパル サーバーまたはミラー サーバーのいずれかで、次のクエリを入力します。

SELECT mirroring_safety_level_desc, mirroring_witness_name, mirroring_witness_state_desc FROM sys.database_mirroring

このカタログ ビューの詳細については、「sys.database_mirroring (Transact-SQL)」を参照してください。

プリンシパル サーバーの消失時の動作に影響する要因

次の表に、トランザクションの安全性設定、データベースの状態、およびミラーリング監視サーバーの状態の組み合わせが、プリンシパル サーバーの消失時のミラーリング セッションの動作にどのように影響するかを示します。

トランザクションの安全性

ミラー データベースのミラーリングの状態

ミラーリング監視サーバーの状態

プリンシパルが停止しているときの動作

FULL

SYNCHRONIZED

CONNECTED

自動フェールオーバーが発生します。

FULL

SYNCHRONIZED

DISCONNECTED

ミラー サーバーが停止します。フェールオーバーはできません。データベースを使用できません。

OFF

SUSPENDED または DISCONNECTED

NULL (ミラーリング監視サーバーなし)

サービスがミラー サーバーに強制的に引き継がれます (データが消失する可能性があります)。

FULL

SYNCHRONIZING または SUSPENDED

NULL (ミラーリング監視サーバーなし)

サービスがミラー サーバーに強制的に引き継がれます (データが消失する可能性があります)。