基本的な接続テストを試してください。
- 5022、5023、および5024がリッスンしていることを確認します。
- 使用しているサーバー名が正しいことを確認してください。
コマンドラインから:
netstat -an
私のサーバーでは、5022がリッスンしていることがわかります。
次に、telnetを介してこれらのポートに接続できることを確認します
telnet fully-qualified-server-name 5022
ミラーリングプロパティGUIの[監視]フィールドのすぐ下にある[ メモ]セクションで言及しているように、サーバー名は完全修飾tcpアドレスである必要があります。
黒い画面が表示されるだけです。この例では、接続エラーの原因となる名前を選択しました。「接続を開けませんでした」と表示された場合、ミラー、プリンシパル、およびミラーリング監視サーバーとして定義されているサーバーに到達できないか、正しい名前を使用していません。
telnetクライアントは、Windows 2008の機能の下に追加できます。
Windows 2008では、[コンピューター]を右クリックすると、完全なコンピューター名が表示されます。コマンドラインからもpingできるはずです。例:ping myservername
更新
各SQL Serverインスタンスで次のクエリを実行し、結果を質問に入れてください。これらのトラブルシューティングのヒントの多くは、http://msdn.microsoft.com/en-us/library/ms189127.aspxからのものです。
TCPエンドポイントを表示する
SELECT type_desc, port FROM sys.tcp_endpoints;
ミラーリングエンドポイントのステータスを表示する
SELECT state_desc FROM sys.database_mirroring_endpoints;
ROLEが正しいことを確認してください
SELECT role FROM sys.database_mirroring_endpoints;
エンドポイントへのアクセス許可を表示する
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
他のサーバーインスタンスからのサービスアカウントのログインには、CONNECT権限が必要です。他のサーバーからのログインにCONNECT許可があることを確認してください。エンドポイントに対するCONNECT権限を持っている人を特定するには、各サーバーインスタンスで次のTransact-SQLステートメントを使用します。
出力例:
name STATE GRANTOR PERMISSION GRANTEE
TSQL Local Machine G sqladmin CO public
TSQL Named Pipes G sqladmin CO public
TSQL Default TCP G sqladmin CO public
TSQL Default VIA G sqladmin CO public
Mirroring G SERVERNAME\Grantor CO SERVERNAME\Grantee
Grantorは(CO)接続許可を割り当てたアカウント、Granteeは接続許可を持つアカウントです
コマンドラインから実行しipconfig /all
、ホスト名が返す内容を確認します。