このトピックでは、データベース ミラーリング セッションの設定に関する問題のトラブルシューティングに役立つ情報を提供します。
注
データベース ミラーリングのすべての前提条件を満たしていることを確認します。
問題点 | 概要 |
---|---|
エラー メッセージ 1418 | この SQL Server メッセージは、サーバー ネットワーク アドレスに到達できないか存在しないことを示し、ネットワーク アドレス名を確認してコマンドを再実行することを提案します。 詳細については、 MSSQLSERVER_1418 トピックを参照してください。 |
アカウント | SQL Server を実行しているアカウントを適切に構成するための要件について説明します。 |
エンドポイント | 各サーバー インスタンスのデータベース ミラーリング エンドポイントを正しく構成するための要件について説明します。 |
SystemAddress | データベース ミラーリング構成でサーバー インスタンスのシステム名を指定するための代替手段をまとめます。 |
ネットワーク アクセス | 各サーバー インスタンスが TCP 経由で他のサーバー インスタンスまたはインスタンスのポートにアクセスできる要件について説明します。 |
ミラー データベースの準備 | ミラーリングを開始できるようにミラー データベースを準備するための要件の概要を示します。 |
失敗したファイルの作成操作 | 失敗したファイル作成操作に応答する方法について説明します。 |
Transact-SQL を使用したミラーリングの開始 | ALTER DATABASE database_name SET PARTNER ='partner_server' ステートメントに 必要な順序について説明します。 |
データベース間トランザクション | 自動フェールオーバーは、疑わしいトランザクションの自動解決と間違った解決につながる可能性があります。 このため、データベース ミラーリングでは、データベース間トランザクションはサポートされません。 |
アカウント
SQL Server の実行に使用するアカウントは、正しく構成されている必要があります。
アカウントに適切な権限が与えられていることを確認します。
アカウントが同じドメイン アカウントで実行されている場合、構成ミスの可能性が減少します。
アカウントが異なるドメインで実行されている場合、またはドメイン アカウントではない場合は、1 つのアカウントのログインを他のコンピューターの マスター に作成し、そのログインにエンドポイントに対する CONNECT アクセス許可を付与する必要があります。 詳細については、「データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理 (SQL Server)」を参照してください。 これには、ネットワーク サービス アカウントが含まれます。
SQL Server がローカル システム アカウントを使用するサービスとして実行されている場合は、認証に証明書を使用する必要があります。 詳しくは、「データベース ミラーリング エンドポイントでの証明書の使用 (Transact-SQL)」をご覧ください。
エンドポイント
エンドポイントが正しく構成されている必要があります。
各サーバー インスタンス (プリンシパル サーバー、ミラー サーバー、ミラーリング監視サーバーがある場合) にデータベース ミラーリング エンドポイントがあることを確認します。 詳細については、「 sys.database_mirroring_endpoints (Transact-SQL) 」を参照し、認証の形式に応じて、 Windows 認証用のデータベース ミラーリング エンドポイントの作成 (Transact-SQL) または データベース ミラーリング エンドポイントの証明書の使用 (Transact-SQL) を参照してください。
ポート番号が適切であることを確認します。
サーバー インスタンスのデータベース ミラーリング エンドポイントに現在関連付けられているポートを識別するには、 sys.database_mirroring_endpoints と sys.tcp_endpoints カタログ ビューを使用します。
説明が難しいデータベース ミラーリングセットアップの問題については、各サーバー インスタンスを調べて、正しいポートでリッスンしているかどうかを判断することをお勧めします。 ポートの可用性の確認については、 MSSQLSERVER_1418を参照してください。
エンドポイントが開始されていること (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)」を参照してください。
ROLE が正しいことを確認します。 各サーバー インスタンスで、次の Transact-SQL ステートメントを使用します。
SELECT role FROM sys.database_mirroring_endpoints; GO
詳細については、 sys.database_mirroring_endpoints (Transact-SQL) を参照してください。
他のサーバー インスタンスからのサービス アカウントのログインには、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)」を参照してください。
失敗した Create-File 操作
ミラーリング セッションに影響を与えずにファイルを追加するには、両方のサーバーにファイルのパスが存在する必要があります。 そのため、ミラー データベースの作成時にデータベース ファイルを移動すると、ミラー データベースで後でファイルの追加操作が失敗し、ミラーリングが中断される可能性があります。
この問題を解決するには:
データベース所有者は、ミラーリング セッションを削除し、追加されたファイルを含むファイル グループの完全バックアップを復元する必要があります。
その後、所有者は、プリンシパル サーバーでファイルの追加操作を含むログをバックアップし、WITH NORECOVERY オプションと WITH MOVE オプションを使用して、ミラー データベースのログ バックアップを手動で復元する必要があります。 これにより、ミラー サーバー上に指定されたファイル パスが作成され、新しいファイルがその場所に復元されます。
新しいミラーリング セッション用にデータベースを準備するには、所有者は、プリンシパル サーバーから他の未処理のログ バックアップも WITH NO RECOVERY で復元する必要があります。
詳細については、「 データベース ミラーリングの削除 (SQL Server)、 ミラーリング用ミラー データベースの準備 (SQL Server)、 Windows 認証を使用したデータベース ミラーリング セッションの確立 (Transact-SQL)、 データベース ミラーリング エンドポイントの証明書の使用 (Transact-SQL)、または Windows 認証を使用したデータベース ミラーリング セッションの確立 (SQL Server Management Studio)」を参照してください。
Transact-SQL を使用したミラーリングの開始
ALTER DATABASE database_name SET PARTNER ='partner_server' ステートメントが発行される順序は非常に重要です。
最初のステートメントは、ミラー サーバーで実行する必要があります。 このステートメントが発行されると、ミラー サーバーは他のサーバー インスタンスに接続しようとしません。 代わりに、ミラー サーバーは、ミラー サーバーがプリンシパル サーバーから接続されるまで待機するようにデータベースに指示します。
2 番目の ALTER DATABASE ステートメントは、プリンシパル サーバーで実行する必要があります。 このステートメントにより、プリンシパル サーバーはミラー サーバーへの接続を試みます。 その接続が作成されると、ミラーは別の接続でプリンシパル サーバーへの接続を試みます。
詳細については、「 ALTER DATABASE (Transact-SQL)」を参照してください。
注
SQL Server Management Studio を使用してミラーリングを開始する方法については、「 Windows 認証を使用したデータベース ミラーリング セッションの確立 (SQL Server Management Studio)」を参照してください。
データベース間トランザクション
自動フェールオーバーを使用してデータベースを高い安全性モードでミラー化すると、自動フェールオーバーによって、疑わしいトランザクションの自動解決が誤って解決される可能性があります。 データベース間トランザクションのコミット中にいずれかのデータベースで自動フェールオーバーが発生した場合、データベース間で論理的な不整合が発生する可能性があります。
自動フェールオーバーの影響を受ける可能性があるデータベース間トランザクションの種類は次のとおりです。
SQL Server の同じインスタンス内の複数のデータベースを更新しているトランザクション。
Microsoft 分散トランザクション コーディネーター (MS DTC) を使用するトランザクション。
詳細については、「 データベース ミラーリングまたは AlwaysOn 可用性グループ (SQL Server) でサポートされていないデータベース間トランザクション」を参照してください。
こちらもご覧ください
データベース ミラーリングの設定 (SQL Server)
データベース ミラーリングと AlwaysOn 可用性グループのトランスポート セキュリティ (SQL Server)