データベース ミラーリング構成のトラブルシューティング (SQL Server)

適用対象:SQL Server

ここでは、データベース ミラーリング セッションの設定時に発生する問題のトラブルシューティングに役立つ情報を提供します。

Note

データベース ミラーリングの前提条件をすべて満たす必要があります。

問題 まとめ
エラー メッセージ 1418 この SQL Server メッセージは、サーバー ネットワーク アドレスに到達できないか、そのアドレスが存在しないことを意味し、ネットワーク アドレス名を確認してコマンドを再実行するように示しています。
Accounts SQL Server を実行しているアカウントを適切に構成するための要件について説明します。
エンドポイント 各サーバー インスタンスのデータベース ミラーリング エンドポイントを適切に構成するための要件について説明します。
システム アドレス データベース ミラーリング構成でサーバー インスタンスのシステム名を指定するためのその他の方法について概要を説明します。
ネットワーク アクセス 各サーバー インスタンスが他のサーバー インスタンスのポートに TCP 経由でアクセスできるという要件について説明します。
ミラー データベースの準備 ミラーリングを開始できるようにミラー データベースを準備する際の要件について概要を説明します。
失敗したファイル作成操作 失敗したファイル作成操作の対処方法について説明します。
Transact-SQL を使用したミラーリングの開始 ALTER DATABASE database_name SET PARTNER ='partner_server' ステートメントを実行する際に必要な順序について説明します。
複数データベースにまたがるトランザクション 自動フェールオーバーにより、状態が不明なトランザクションが自動的に解決されることがあります。ただし、この解決は不適切な場合があります。 このため、データベース ミラーリングでは複数データベースにまたがるトランザクションをサポートしていません。

アカウント

SQL Server の実行に使用するアカウントは、正しく構成されている必要があります。

  1. アカウントに適切な権限が与えられていることを確認します。

    1. アカウントが同じドメインで実行されている場合、アカウントの構成が不適切になる可能性は低くなります。

    2. アカウントが別のドメインで実行されているか、またはドメイン アカウントではない場合、もう一方のコンピューターの master データベースにアカウントのログインを作成する必要があります。また、そのログインには、エンドポイントに対して CONNECT 権限を与える必要があります。 詳細については、データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)に関するページを参照してください。 これには、ネットワーク サービス アカウントも含まれます。

  2. SQL Server がローカル システム アカウントを使用しているサービスとして実行されている場合、認証には証明書を使用する必要があります。 詳しくは、「データベース ミラーリング エンドポイントでの証明書の使用 (Transact-SQL)」をご覧ください。

エンドポイント

エンドポイントが正しく構成されている必要があります。

  1. 各サーバー インスタンス (プリンシパル サーバー、ミラー サーバー、およびミラーリング監視サーバー (存在する場合)) にデータベース ミラーリング エンドポイントがあることを確認します。 詳細については、「sys.database_mirroring_endpoints (Transact-SQL)」、および、認証形式によって、「Windows 認証でのデータベース ミラーリング エンドポイントの作成 (Transact-SQL)」または「データベース ミラーリング エンドポイントでの証明書の使用 (Transact-SQL)」のいずれかを参照してください。

  2. ポート番号が適切であることを確認します。

    サーバー インスタンスのデータベース ミラーリング エンドポイントに現在関連付けられているポートを識別するには、 sys.database_mirroring_endpoints カタログ ビューおよび sys.tcp_endpoints カタログ ビューを使用します。

  3. 説明が困難なデータベース ミラーリングのセットアップに関する問題については、各サーバー インスタンスを調査して、それぞれが正しいポートでリッスンしているかどうかを確認することをお勧めします。

  4. エンドポイントが開始されていること (STATE = STARTED) を確認します。 各サーバー インスタンスで、次の Transact-SQL ステートメントを使用します。

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

    state_desc 列の詳細については、「sys.database_mirroring_endpoints (Transact-SQL)」を参照してください。

    エンドポイントを開始するには、次の Transact-SQL ステートメントを使用します。

    ALTER ENDPOINT Endpoint_Mirroring   
    STATE = STARTED   
    AS TCP (LISTENER_PORT = <port_number>)  
    FOR database_mirroring (ROLE = ALL);  
    GO  
    

    詳細については、「ALTER ENDPOINT (Transact-SQL)」を参照してください。

  5. ROLE の設定が正しいことを確認します。 各サーバー インスタンスで、次の Transact-SQL ステートメントを使用します。

    SELECT role FROM sys.database_mirroring_endpoints;  
    GO  
    

    詳細については、「sys.database_mirroring_endpoints (Transact-SQL)」を参照してください。

  6. 他のサーバー インスタンスからサービス アカウントにログインするには、CONNECT 権限が必要です。 他のサーバーからのログインに、CONNECT 権限があることを確認します。 あるエンドポイントに対して CONNECT 権限のあるユーザーを確認するには、各サーバー インスタンスで、次の Transact-SQL ステートメントを使用します。

    SELECT 'Metadata Check';  
    SELECT EP.name, SP.STATE,   
       CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id))   
          AS GRANTOR,   
       SP.TYPE AS PERMISSION,  
       CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id))   
          AS GRANTEE   
       FROM sys.server_permissions SP , sys.endpoints EP  
       WHERE SP.major_id = EP.endpoint_id  
       ORDER BY Permission,grantor, grantee;   
    GO  
    
    

システム アドレス

データベース ミラーリング構成におけるサーバー インスタンスのシステム名には、システムを明確に識別できる任意の名前を使用できます。 サーバー アドレスには、システム名 (システムが同じドメインに存在する場合)、完全修飾ドメイン名、または IP アドレス (可能であれば静的 IP アドレス) を使用できます。 完全修飾ドメイン名を使用すると動作が保証されます。 詳細については、「サーバー ネットワーク アドレスの指定 (データベース ミラーリング)」を参照してください。

ネットワーク アクセス

各サーバー インスタンスは、他のサーバー インスタンスのポートに TCP 経由でアクセスできる必要があります。 これは、サーバー インスタンスが相互に信頼関係を持たない別のドメイン (信頼されていないドメイン) に存在する場合に特に重要になります。 このような状況では、サーバー インスタンス間の通信の大半が制限されます。

ミラー データベースの準備

ミラーリングを初めて開始する場合も、ミラーリングを削除した後に再度開始する場合も、ミラー データベースがミラーリング用に準備されていることを確認します。

ミラー サーバーにミラー データベースを作成する際には、同じデータベース名と WITH NORECOVERY オプションを指定して、プリンシパル データベースのバックアップを復元する必要があります。 また、このバックアップが実行された後で作成されたすべてのログ バックアップについても、WITH NORECOVERY を指定して適用する必要があります。

また、可能であれば、ミラー データベースのファイル パス (ドライブ文字を含む) を、プリンシパル データベースと同一のパスにすることが推奨されています。 ファイルのパスが異なる場合、たとえば、プリンシパル データベースが "F:" ドライブに存在する一方で、ミラー システムに "F:" ドライブがない場合には、RESTORE ステートメントに MOVE オプションを含める必要があります。

重要

ミラー データベースの作成時にデータベース ファイルを移動した場合、そのミラー データベースに後でファイルを追加する際に、ミラーリングの中断が必要になる場合があります。

データベース ミラーリングが停止している場合にミラーリングを再開するには、停止後にプリンシパル データベースで作成されたすべてのログ バックアップをミラー データベースに適用する必要があります。

詳細については、「ミラーリングのためのミラー データベースの準備 (SQL Server)」を参照してください。

失敗したファイル作成操作

ミラーリング セッションに影響を与えずにファイルを追加するには、追加するファイルのパスが両方のサーバーに存在する必要があります。 したがって、ミラー データベースの作成時にデータベース ファイルを移動し、その後でミラー データベースにファイルを追加しようとした場合、ファイルの追加操作が失敗し、ミラーリングが中断されることがあります。

この問題を解決するには、データベース所有者が次の操作を行う必要があります。

  1. ミラーリング セッションを削除し、追加されたファイルを含むファイル グループの完全バックアップを復元します。

  2. 次に、ファイルを追加する操作を含むログをプリンシパル サーバーでバックアップし、WITH NORECOVERY オプションと WITH MOVE オプションを使用して、そのログ バックアップをミラー データベースに手動で復元します。 この操作を行うと、指定したファイル パスがミラー サーバーに作成され、その場所に新しいファイルが復元されます。

  3. 新しいミラーリング セッションのためにデータベースを準備するには、WITH NORECOVERY オプションを使用して、プリンシパル サーバーでバックアップした他の未処理のログをすべて復元する必要もあります。

詳細については、「データベース ミラーリングの削除 (SQL Server)」、「ミラーリングのためのミラー データベースの準備 (SQL Server)」、Windows 認証を使用してデータベース ミラーリング セッションを確立する (Transact-SQL) 方法に関するページ、「データベース ミラーリング エンドポイントでの証明書の使用 (Transact-SQL)」、Windows 認証を使用してデータベース ミラーリング セッションを確立する方法 (SQL Server Management Studio) に関するページのいずれかを参照してください。

Transact-SQL を使用したミラーリングの開始

ALTER DATABASE database_name SET PARTNER ='partner_server' ステートメントを実行する際は、順序が非常に重要です。

  1. 最初のステートメントは、ミラー サーバーで実行する必要があります。 このステートメントの実行時に、ミラー サーバーでは他のサーバー インスタンスへの接続は試行されません。 ミラー サーバーは自身のデータベースに対し、プリンシパル サーバーからそのミラー サーバーへの接続が行われるまで待機するように指示します。

  2. 2 番目の ALTER DATABASE ステートメントはプリンシパル サーバーで実行する必要があります。 このステートメントにより、プリンシパル サーバーはミラー サーバーへの接続を試みます。 この接続が確立されると、ミラー サーバーは、さらに別の接続でプリンシパル サーバーへの接続を試みます。

詳しくは、「 ALTER DATABASE (Transact-SQL)」をご覧ください。

Note

SQL Server Management Studio を使用してミラーリングを開始する方法の詳細については、Windows 認証を使用してデータベース ミラーリング セッションを確立する方法 (SQL Server Management Studio) に関するページを参照してください。

複数データベースにまたがるトランザクション

データベースが自動フェールオーバーを伴う高い安全性モードでミラー化されている場合、自動フェールオーバーにより、状態が不明なトランザクションが自動的に解決されることがあります。ただし、この解決は不適切な場合があります。 複数データベースにまたがるトランザクションがコミットされているときに、いずれかのデータベースで自動フェールオーバーが発生すると、データベース間で論理的な不一致が発生することがあります。

自動フェールオーバーの影響を受ける可能性がある、複数データベースにまたがるトランザクションには、次の種類があります。

  • 同じ SQL Serverインスタンスで複数のデータベースを更新するトランザクション。

  • Microsoft 分散トランザクション コーディネーター (MS DTC) を使用するトランザクション。

詳細については、Always On 可用性グループとデータベース ミラーリングでのデータベース間のトランザクションと分散トランザクション (SQL Server) に関するページを参照してください。

参照

データベース ミラーリングの設定 (SQL Server)
データベース ミラーリングと Always On 可用性グループのトランスポート セキュリティ (SQL Server)