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

ここでは、データベース ミラーリング セッションの設定時に発生する問題のトラブルシューティングに役立つ情報を提供します。This topic provides information to help you troubleshoot problems in setting up a database mirroring session.

注意

データベース ミラーリングの前提条件をすべて満たす必要があります。Ensure that you are meeting all the prerequisites for database mirroring.

問題Issue まとめSummary
エラー メッセージ 1418Error Message 1418 この SQL ServerSQL Server メッセージは、サーバー ネットワーク アドレスに到達できないか、そのアドレスが存在しないことを意味し、ネットワーク アドレス名を確認してコマンドを再実行するように示しています。This SQL ServerSQL Server message indicates that the server network address cannot be reached or does not exist, and it suggests that you verify the network address name and reissue the command. 詳細については、「 MSSQLSERVER_1418 」を参照してください。For more information, see the MSSQLSERVER_1418 topic.
AccountsAccounts SQL ServerSQL Server を実行しているアカウントを適切に構成するための要件について説明します。Discusses requirements for correctly configuring the accounts under which SQL ServerSQL Server is running.
エンドポイントEndpoints 各サーバー インスタンスのデータベース ミラーリング エンドポイントを適切に構成するための要件について説明します。Discusses requirements for correctly configuring the database mirroring endpoint of each server instance.
システム アドレスSystemAddress データベース ミラーリング構成でサーバー インスタンスのシステム名を指定するためのその他の方法について概要を説明します。Summarizes the alternatives for specifying the system name of a server instance in a database mirroring configuration.
ネットワーク アクセスNetwork access 各サーバー インスタンスが他のサーバー インスタンスのポートに TCP 経由でアクセスできるという要件について説明します。Documents the requirement that each the server instance be able to access the ports of the other server instance or instances over TCP.
ミラー データベースの準備Mirror database preparation ミラーリングを開始できるようにミラー データベースを準備する際の要件について概要を説明します。Summarizes the requirements for preparing the mirror database to enable mirroring to start.
失敗したファイル作成操作Failed create-file operation 失敗したファイル作成操作の対処方法について説明します。Describes how to respond to a failed create-file operation.
Transact-SQL を使用したミラーリングの開始Starting mirroring by Using Transact-SQL ALTER DATABASE database_name SET PARTNER ='partner_server' ステートメントを実行する際に必要な順序について説明します。Describes the required order for ALTER DATABASE database_name SET PARTNER ='partner_server' statements.
複数データベースにまたがるトランザクションCross-Database Transactions 自動フェールオーバーにより、状態が不明なトランザクションが自動的に解決されることがあります。ただし、この解決は不適切な場合があります。An automatic failover could lead to automatic and possibly incorrect resolution of in-doubt transactions. このため、データベース ミラーリングでは複数データベースにまたがるトランザクションをサポートしていません。For this reason database mirroring does not support cross-database transactions.

AccountsAccounts

SQL ServerSQL Server の実行に使用するアカウントは、正しく構成されている必要があります。The accounts under which SQL ServerSQL Server is running must be correctly configured.

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

    1. アカウントが同じドメインで実行されている場合、アカウントの構成が不適切になる可能性は低くなります。If the accounts are running in the same domain accounts, the chances of misconfiguration are reduced.

    2. アカウントが別のドメインで実行されているか、またはドメイン アカウントではない場合、もう一方のコンピューターの master データベースにアカウントのログインを作成する必要があります。また、そのログインには、エンドポイントに対して CONNECT 権限を与える必要があります。If the accounts are running in different domains or are not domain accounts, the login of one account must be created in master on the other computer, and that login must be granted CONNECT permissions on the endpoint. 詳細については、「 データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)」を参照してください。For more information, see Manage Metadata When Making a Database Available on Another Server Instance (SQL Server). これには、ネットワーク サービス アカウントも含まれます。This includes the Network Service account.

  2. SQL ServerSQL Server がローカル システム アカウントを使用しているサービスとして実行されている場合、認証には証明書を使用する必要があります。If SQL ServerSQL Server is running as a service that is using the local system account, you must use certificates for authentication. 詳細については、この後の「 データベース ミラーリング エンドポイントでの証明書の使用 (Transact-SQL)」を参照してください。For more information, see Use Certificates for a Database Mirroring Endpoint (Transact-SQL).

EndpointsEndpoints

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

  1. 各サーバー インスタンス (プリンシパル サーバー、ミラー サーバー、およびミラーリング監視サーバー (存在する場合)) にデータベース ミラーリング エンドポイントがあることを確認します。Make sure that each server instance (the principal server, mirror server, and witness, if any) has a database mirroring endpoint. 詳細については、「sys.database_mirroring_endpoints (Transact-SQL)」、および、認証形式によって、「Windows 認証でのデータベース ミラーリング エンドポイントの作成 (Transact-SQL)」もしくは「データベース ミラーリング エンドポイントでの証明書の使用 (Transact-SQL)」のいずれかを参照してください。For more information, see sys.database_mirroring_endpoints (Transact-SQL) and, depending on the form of authentication, either Create a Database Mirroring Endpoint for Windows Authentication (Transact-SQL) or Use Certificates for a Database Mirroring Endpoint (Transact-SQL).

  2. ポート番号が適切であることを確認します。Check that the port numbers are correct.

    サーバー インスタンスのデータベース ミラーリング エンドポイントに現在関連付けられているポートを識別するには、 sys.database_mirroring_endpoints カタログ ビューおよび sys.tcp_endpoints カタログ ビューを使用します。To identify the port currently associated with database mirroring endpoint of a server instance, use the sys.database_mirroring_endpoints and sys.tcp_endpoints catalog views.

  3. 説明が困難なデータベース ミラーリングのセットアップに関する問題については、各サーバー インスタンスを調査して、それぞれが正しいポートでリッスンしているかどうかを確認することをお勧めします。For database mirroring setup issues that are difficult to explain, we recommend that you inspect each server instance to determine whether it is listening on the correct ports. ポートの可用性の検証については、「 MSSQLSERVER_1418」を参照してください。For information about verifying port availability, see MSSQLSERVER_1418.

  4. エンドポイントが開始されていること (STATE = STARTED) を確認します。Make sure that the endpoints are started (STATE=STARTED). 各サーバー インスタンスで、次の Transact-SQLTransact-SQL ステートメントを使用します。On each server instance, use the following Transact-SQLTransact-SQL statement.

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

    state_desc 列の詳細については、「sys.database_mirroring_endpoints (Transact-SQL)」を参照してください。For more information about the state_desc column, see sys.database_mirroring_endpoints (Transact-SQL).

    エンドポイントを開始するには、次の Transact-SQLTransact-SQL ステートメントを使用します。To start an endpoint, use the following Transact-SQLTransact-SQL statement.

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

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

  5. ROLE の設定が正しいことを確認します。Check that the ROLE is correct. 各サーバー インスタンスで、次の Transact-SQLTransact-SQL ステートメントを使用します。On each server instance use the following Transact-SQLTransact-SQL statement.

    SELECT role FROM sys.database_mirroring_endpoints;  
    GO  
    

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

  6. 他のサーバー インスタンスからサービス アカウントにログインするには、CONNECT 権限が必要です。The login for the service account from the other server instance requires CONNECT permission. 他のサーバーからのログインに、CONNECT 権限があることを確認します。Make sure that the login from the other server has CONNECT permission. あるエンドポイントに対して CONNECT 権限のあるユーザーを確認するには、各サーバー インスタンスで、次の Transact-SQLTransact-SQL ステートメントを使用します。To determine who has CONNECT permission for an endpoint, on each server instance use the following Transact-SQLTransact-SQL statement.

    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  
    
    

システム アドレスSystem Address

データベース ミラーリング構成におけるサーバー インスタンスのシステム名には、システムを明確に識別できる任意の名前を使用できます。For the system name of a server instance in a database mirroring configuration, you can use any name that unambiguously identifies the system. サーバー アドレスには、システム名 (システムが同じドメインに存在する場合)、完全修飾ドメイン名、または IP アドレス (可能であれば静的 IP アドレス) を使用できます。The server address can be a system name (if the systems are in the same domain), a fully qualified domain name, or an IP address (preferably, a static IP address). 完全修飾ドメイン名を使用すると動作が保証されます。Using the fully qualified domain name is guaranteed to work. 詳細については、「 サーバー ネットワーク アドレスの指定 (データベース ミラーリング)を使用します。For more information, see Specify a Server Network Address (Database Mirroring).

ネットワークアクセスNetwork Access

各サーバー インスタンスは、他のサーバー インスタンスのポートに TCP 経由でアクセスできる必要があります。Each server instance must be able to access the ports of the other server instance or instances over TCP. これは、サーバー インスタンスが相互に信頼関係を持たない別のドメイン (信頼されていないドメイン) に存在する場合に特に重要になります。This is especially important if the server instances are in different domains that do not trust each other (untrusted domains). このような状況では、サーバー インスタンス間の通信の大半が制限されます。This restricts much of the communication between the server instances.

Mirror Database PreparationMirror Database Preparation

ミラーリングを初めて開始する場合も、ミラーリングを削除した後に再度開始する場合も、ミラー データベースがミラーリング用に準備されていることを確認します。Whether starting mirroring for the first time or starting it again after mirroring was removed, verify that the mirror database is prepared for mirroring.

ミラー サーバーにミラー データベースを作成する際には、同じデータベース名と WITH NORECOVERY オプションを指定して、プリンシパル データベースのバックアップを復元する必要があります。When you create the mirror database on the mirror server, make sure that you restore the backup of the principal database specifying the same database name WITH NORECOVERY. また、このバックアップが実行された後で作成されたすべてのログ バックアップについても、WITH NORECOVERY を指定して適用する必要があります。Also, all log backups created after that backup was taken must also be applied, again WITH NORECOVERY.

また、可能であれば、ミラー データベースのファイル パス (ドライブ文字を含む) を、プリンシパル データベースと同一のパスにすることが推奨されています。Also, we recommend that, if it is possible, the file path (including the drive letter) of the mirror database be identical to the path of the principal database. ファイルのパスが異なる場合、たとえば、プリンシパル データベースが "F:" ドライブに存在する一方で、ミラー システムに "F:" ドライブがない場合には、RESTORE ステートメントに MOVE オプションを含める必要があります。If the file paths must differ, for example, if the principal database is on drive 'F:' but the mirror system lacks an F: drive, you must include the MOVE option in the RESTORE statement.

重要

ミラー データベースの作成時にデータベース ファイルを移動した場合、そのミラー データベースに後でファイルを追加する際に、ミラーリングの中断が必要になる場合があります。If you move the database files when you are creating the mirror database, you might be unable to add files to the database later without mirroring being suspended.

データベース ミラーリングが停止している場合にミラーリングを再開するには、停止後にプリンシパル データベースで作成されたすべてのログ バックアップをミラー データベースに適用する必要があります。If database mirroring has been stopped, all subsequent log backups taken on the principal database must be applied to the mirror database before mirroring can be restarted.

詳細については、「 ミラーリングのためのミラー データベースの準備 (SQL Server)を使用します。For more information, see Prepare a Mirror Database for Mirroring (SQL Server).

Failed Create-File OperationFailed Create-File Operation

ミラーリング セッションに影響を与えずにファイルを追加するには、追加するファイルのパスが両方のサーバーに存在する必要があります。Adding a file without impacting a mirroring session requires that the path of the file exist on both servers. したがって、ミラー データベースの作成時にデータベース ファイルを移動し、その後でミラー データベースにファイルを追加しようとした場合、ファイルの追加操作が失敗し、ミラーリングが中断されることがあります。Therefore, if you move the database files when creating the mirror database, a later add-file operation might fail on the mirror database and cause mirroring to be suspended.

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

  1. ミラーリング セッションを削除し、追加されたファイルを含むファイル グループの完全バックアップを復元します。The database owner must remove the mirroring session and restore a full backup of the filegroup that contains the added file.

  2. 次に、ファイルを追加する操作を含むログをプリンシパル サーバーでバックアップし、WITH NORECOVERY オプションと WITH MOVE オプションを使用して、そのログ バックアップをミラー データベースに手動で復元します。The owner must then back up the log containing the add-file operation on the principal server and manually restore the log backup on the mirror database using the WITH NORECOVERY and WITH MOVE options. この操作を行うと、指定したファイル パスがミラー サーバーに作成され、その場所に新しいファイルが復元されます。Doing this creates the specified file path on the mirror server and restores the new file to that location.

  3. 新しいミラーリング セッションのためにデータベースを準備するには、WITH NORECOVERY オプションを使用して、プリンシパル サーバーでバックアップした他の未処理のログをすべて復元する必要もあります。To prepare the database for a new mirroring session, the owner must also restore WITH NO RECOVERY any other outstanding log backups from the principal server.

詳細については、「データベース ミラーリングの削除 (SQL Server)」、「ミラーリングのためのミラー データベースの準備 (SQL Server)」、「Windows 認証を使用してデータベース ミラーリング セッションを確立する (Transact-SQL)」、「データベース ミラーリング エンドポイントでの証明書の使用(Transact-SQL)」、「Windows 認証を使用してデータベース ミラーリング セッションを確立する方法 (SQL Server Management Studio)」のいずれかを参照してください。For more information, see Removing Database Mirroring (SQL Server), Prepare a Mirror Database for Mirroring (SQL Server), Establish a Database Mirroring Session Using Windows Authentication (Transact-SQL), Use Certificates for a Database Mirroring Endpoint (Transact-SQL), or Establish a Database Mirroring Session Using Windows Authentication (SQL Server Management Studio).

Transact-sql を使用したミラーリングの開始Starting mirroring by Using Transact-SQL

ALTER DATABASE database_name SET PARTNER ='partner_server' ステートメントを実行する際は、順序が非常に重要です。The order in which the ALTER DATABASE database_name SET PARTNER ='partner_server' statements are issued is very important.

  1. 最初のステートメントは、ミラー サーバーで実行する必要があります。The first statement must be run on the mirror server. このステートメントの実行時に、ミラー サーバーでは他のサーバー インスタンスへの接続は試行されません。When this statement is issued, the mirror server does not try to contact any other server instance. ミラー サーバーは自身のデータベースに対し、プリンシパル サーバーからそのミラー サーバーへの接続が行われるまで待機するように指示します。Instead, the mirror server instructs its database to wait until the mirror server has been contacted by the principal server.

  2. 2 番目の ALTER DATABASE ステートメントはプリンシパル サーバーで実行する必要があります。The second ALTER DATABASE statement must be run on the principal server. このステートメントにより、プリンシパル サーバーはミラー サーバーへの接続を試みます。This statement causes the principal server to try to connect to the mirror server. この接続が確立されると、ミラー サーバーは、さらに別の接続でプリンシパル サーバーへの接続を試みます。After that connection is created, the mirror then tries to connect to the principal server on another connection.

詳細については、「 ALTER DATABASE (transact-sql)」を参照してください。For more information, see ALTER DATABASE (Transact-SQL).

注意

SQL Server Management StudioSQL Server Management Studio を使用してミラーリングを開始する方法の詳細については、「Windows 認証を使用してデータベース ミラーリング セッションを確立する (SQL Server Management Studio)」を参照してください。For information about using SQL Server Management StudioSQL Server Management Studio to start mirroring, see Establish a Database Mirroring Session Using Windows Authentication (SQL Server Management Studio).

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

データベースが自動フェールオーバーを伴う高い安全性モードでミラー化されている場合、自動フェールオーバーにより、状態が不明なトランザクションが自動的に解決されることがあります。ただし、この解決は不適切な場合があります。When a database is being mirrored in high-safety mode with automatic failover, an automatic failover could lead to automatic and possibly incorrect resolution of in-doubt transactions. 複数データベースにまたがるトランザクションがコミットされているときに、いずれかのデータベースで自動フェールオーバーが発生すると、データベース間で論理的な不一致が発生することがあります。If an automatic failover occurs on either database while a cross-database transaction is being committed, logical inconsistencies can occur between the databases.

自動フェールオーバーの影響を受ける可能性がある、複数データベースにまたがるトランザクションには、次の種類があります。The types of cross-database transactions that can be affected by an automatic failover include the following:

  • 同じ SQL ServerSQL Serverインスタンスで複数のデータベースを更新するトランザクション。A transaction that is updating multiple databases in the same instance of SQL ServerSQL Server.

  • MicrosoftMicrosoft 分散トランザクション コーディネーター (MS DTC) を使用するトランザクション。Transactions that use a MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC).

詳細については、「データベース ミラーリングまたは AlwaysOn 可用性グループではサポートされない複数データベースにまたがるトランザクション (SQL Server)」を参照してください。For more information, see Cross-Database Transactions Not Supported For Database Mirroring or AlwaysOn Availability Groups (SQL Server).

参照See Also

データベースミラーリングの設定 (SQL Server) Setting Up Database Mirroring (SQL Server)
データベースミラーリングと AlwaysOn 可用性グループ (SQL Server のトランスポートセキュリティ)Transport Security for Database Mirroring and AlwaysOn Availability Groups (SQL Server)