SQL Server 2008 R2を実行している3つの専用サーバーを使用して、監視者とミラーリングを設定しようとしています。このブログ投稿で説明されているように、すべてを設定しました
ミラーリングは、プリンシパルサーバーとセカンダリサーバーの間で正常に機能しているようです。しかし、最後のコマンドを実行して証人を追加すると
alter database citec_vc_prod set witness = 'TCP://witness_address:witness_port';
数秒後に次のエラーが発生します。
メッセージ1456、レベル16、状態3、行1 ALTERDATABASEコマンドをリモートサーバーインスタンス 'TCP:// witness_address:witness_port'に送信できませんでした。データベースのミラーリング構成は変更されていません。サーバーが接続されていることを確認して、再試行してください。
また、プリンシパルのイベントログには、次のエラーが表示されます。
ALTERDATABASEコマンドをリモートサーバーインスタンス 'TCP:// witness_address:witness_port'に送信できませんでした。データベースのミラーリング構成は変更されていません。サーバーが接続されていることを確認して、再試行してください。
ウィットネスのファイアウォールをすでにシャットダウンしており、接続の問題がないことを確認するために、プリンシパルからウィットネスサーバーのミラーリングエンドポイントに正常にtelnetしました。それでも、私はまだこのエラーを受け取ります。
私の設定は次のとおりです。
Principal: SQL Server 2008 R2 Standard 10.50.1617
Mirror: SQL Server 2008 R2 Standard 10.50.1617
Witness: SQL Server 2008 R2 Express 10.50.2500
各サーバーは異なるワークグループにあります。
SQLサーバーの達人を助けてください。あなたが私の唯一の希望です。
編集:これは、ミラーリングの設定に使用したT-SQLコマンドの完全なログです。上記の問題で最初の試みが失敗した後、私はすべてを削除し、最初から始めました。しかし、同じ問題が再発しました。
-- PRINCIPAL
create master key encryption by password = 'mypassword';
GO
create certificate "server1.ourdomain.com_cert" with subject = 'server1.ourdomain.com certificate', start_date = '2007/11/01', expiry_date = '2020/11/01';
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 5022, listener_ip = all)
for database_mirroring (authentication = certificate "server1.ourdomain.com_cert", encryption = disabled, role = all);
GO
Backup certificate "server1.ourdomain.com_cert" to file = 'f:\cert\server1.ourdomain.com_cert.cer';
GO
-- MIRROR
create master key encryption by password = 'mypassword';
GO
create certificate "server2.ourdomain.com_cert" with subject = 'server2.ourdomain.com certificate', start_date = '2007/11/01', expiry_date = '2020/11/01';
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 5022, listener_ip = all)
for database_mirroring (authentication = certificate "server2.ourdomain.com_cert", encryption = disabled, role = all);
GO
Backup certificate "server2.ourdomain.com_cert" to file = 'f:\cert\server2.ourdomain.com_cert.cer';
GO
-- WITNESS
create master key encryption by password = 'mypassword';
GO
create certificate "witness.ourdomain.com_cert" with subject = 'witness.ourdomain.com certificate', start_date = '2007/11/01', expiry_date = '2020/11/01';
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 5022, listener_ip = all)
for database_mirroring (authentication = certificate "witness.ourdomain.com_cert", encryption = disabled,role = witness);
GO
Backup certificate "witness.ourdomain.com_cert" to file = 'd:\cert\witness.ourdomain.com_cert.cer';
GO
-- PRINCIPAL again
create login "server2.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server2.ourdomain.com_user" from login "server2.ourdomain.com_login";
GO
select * from sys.certificates
Create certificate "server2.ourdomain.com_cert"
Authorization "server2.ourdomain.com_user"
From file = 'f:\cert\server2.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [server2.ourdomain.com_login];
GO
------
create login "witness.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "witness.ourdomain.com_user" from login "witness.ourdomain.com_login";
GO
Create certificate "witness.ourdomain.com_cert"
Authorization "witness.ourdomain.com_user"
From file = 'f:\cert\witness.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [witness.ourdomain.com_login];
GO
-- MIRROR again
create login "server1.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server1.ourdomain.com_user" from login "server1.ourdomain.com_login";
GO
Create certificate "server1.ourdomain.com_cert"
Authorization "server1.ourdomain.com_user"
From file = 'f:\cert\server1.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [server1.ourdomain.com_login];
GO
-------
create login "witness.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "witness.ourdomain.com_user" from login "witness.ourdomain.com_login";
GO
Create certificate "witness.ourdomain.com_cert"
Authorization "witness.ourdomain.com_user"
From file = 'f:\cert\witness.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [witness.ourdomain.com_login];
GO
-- WITNESS again
create login "server1.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server1.ourdomain.com_user" from login "server1.ourdomain.com_login";
GO
Create certificate "server1.ourdomain.com_cert"
Authorization "server1.ourdomain.com_user"
From file = 'd:\cert\server1.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [server1.ourdomain.com_login];
GO
-------
create login "server2.ourdomain.com_login" with PASSWORD = 'mypassword';
GO
create user "server2.ourdomain.com_user" from login "server2.ourdomain.com_login";
GO
Create certificate "server2.ourdomain.com_cert"
Authorization "server2.ourdomain.com_user"
From file = 'd:\cert\server2.ourdomain.com_cert.cer';
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [server2.ourdomain.com_login];
GO
-- MIRROR again
alter database MyDBName set partner OFF
alter database MyDBName set partner = 'TCP://server1.ourdomain.com:5022';
GO
-- PRINCIPAL again
alter database MyDBName set partner OFF
alter database MyDBName set partner = 'TCP://server2.ourdomain.com:5022';
GO
alter database MyDBName set witness OFF
alter database MyDBName set witness = 'TCP://witness.ourdomain.com:5022';
GO
編集2: Remusの要求に応じて、証人を追加しようとしているときに、3つのサーバーインスタンスにプロファイラーをアタッチしました。私が探した:
Database Mirroring State Change
Broker:Connection Event
プロファイラーの「イベントリスト」で「監査データベースミラーリングログイン」が見つからなかったため、監視できませんでした。 「セキュリティ監査」のセクションにはありませんよね?
とにかく、私は目撃者や鏡でそのようなイベントを監視することができませんでした。試してみましたが、イベントはありませんでした。プリンシパルでこれらのイベントのいくつかがありました:
Database Mirroring Connection 32 2011-12-09 20:04:07.983 1 39796 2 - Connected c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809
Audit Database Mirroring Login 30 2011-12-09 20:04:08.133 1 39797 1 - Login Success 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809 1 witness.mytopleveldomain.com_login CERTIFICATE Microsoft Unified Security Protocol Provider Initiator
Database Mirroring State Change DBM: Synchronized Principal without Witness -> DBM: Synchronizing Principal 27 2011-12-09 20:04:27.980 9 39798 2 1 0X01 principal.mytopleveldomain.com,3809 Zeiterfassung-Staging 0 13
Database Mirroring State Change DBM: Synchronizing Principal -> DBM: Synchronized Principal without Witness 27 2011-12-09 20:04:28.237 9 39799 13 1 0X01 principal.mytopleveldomain.com,3809 Zeiterfassung-Staging 0 2
Database Mirroring Connection An error occurred while receiving data: '64(failed to retrieve text for this error. Reason: 15105)'. 30 2011-12-09 20:05:42.530 1 39803 4 - Closing c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809
Database Mirroring Connection 30 2011-12-09 20:05:42.533 1 39804 5 - Closed c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://<MyWitnessIP>:5022 principal.mytopleveldomain.com,3809
Database Mirroring Connection 32 2011-12-09 20:04:07.983 1 39796 2 - Connected c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809
Audit Database Mirroring Login 30 2011-12-09 20:04:08.133 1 39797 1 - Login Success 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809 1 wtn.logmytime.de_login CERTIFICATE Microsoft Unified Security Protocol Provider Initiator
Database Mirroring State Change DBM: Synchronized Principal without Witness -> DBM: Synchronizing Principal 27 2011-12-09 20:04:27.980 9 39798 2 1 0X01 srv1.logmytime.de,3809 Zeiterfassung-Staging 0 13
Database Mirroring State Change DBM: Synchronizing Principal -> DBM: Synchronized Principal without Witness 27 2011-12-09 20:04:28.237 9 39799 13 1 0X01 srv1.logmytime.de,3809 Zeiterfassung-Staging 0 2
Database Mirroring Connection An error occurred while receiving data: '64(failed to retrieve text for this error. Reason: 15105)'. 30 2011-12-09 20:05:42.530 1 39803 4 - Closing c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809
Database Mirroring Connection 30 2011-12-09 20:05:42.533 1 39804 5 - Closed c6b6054d-56c0-4589-922a-29a40fdd9d96 1 0X01 tcp://85.214.251.151:5022 srv1.logmytime.de,3809
他のイベントも喜んでミラーリングしますが、プロファイラーを調整するときに、どのイベントセクションでそれらを見つけることができるかを教えてください。
編集:証人のプロファイリングをもう一度試みましたが、今回はほぼすべてのイベントタイプがあります。そして私はついにいくつかのデータを手に入れました:
Trace Start 2011-12-10 01:24:08.180
ErrorLog 2011-12-10 01:24:40.40 Logon Database Mirroring Login succeeded for user 'principal.ourdomain.com_login'. Authentication mode: CERTIFICATE. [CLIENT: <principalip>]
29 2011-12-10 01:24:40.400 1 28046 1428 1 0X01 witness.ourdomain.com,3809 master 0 sa
EventLog Database Mirroring Login succeeded for user 'principal.ourdomain.com_login'. Authentication mode: CERTIFICATE. [CLIENT: <principalip>] 29 2011-12-10 01:24:40.400 1 28046 1429 1 0X01 witness.ourdomain.com,3809 master 0 sa
次に、私は鏡で同じことをしましたが、私はこれらの2つのかなり重要でないイベントしか得られませんでした:
ErrorLog 2011-12-10 01:38:02.14 spid29s Database mirroring is inactive for database 'DatabaseName'. This is an informational message only. No user action is required.
sa 29 2011-12-10 01:38:02.143
EventLog Database mirroring is inactive for database 'DatabaseName'. This is an informational message only. No user action is required. sa 29 2011-12-10 01:38:02.143 0XA20500000A0000000F000000570049004E003600360036004800520054004B003700540032004800000000000000
ErrorLog 2011-12-10 01:38:22.40 spid29s Database mirroring is active with database 'DatabaseName' as the mirror copy. This is an informational message only. No user action is required.
sa 29 2011-12-10 01:38:22.407
EventLog Database mirroring is active with database 'DatabaseName' as the mirror copy. This is an informational message only. No user action is required. sa 29 2011-12-10 01:38:22.407 0XA10500000A0000000F000000570049004E003600360036004800520054004B003700540032004800000000000000
しかし、証人の追加が失敗する理由についての情報はまだ見当たりません。
SQLプロファイラーを関連する3つのインスタンスすべてに接続し、これらのイベントを監視できますか?
次に、ミラーリングセッションの確立を再試行します。イベントを追加するときは、必ずすべての列を選択してください。空のテンプレートから始めます。
2011-12-09 20:04:07.983 Database Mirroring Connection Connected
2011-12-09 20:04:08.133 Audit Database Mirroring Login Login Success
2011-12-09 20:04:27.980 Database Mirroring State Change DBM:
Synchronized Principal without Witness ->
DBM: Synchronizing Principal
2011-12-09 20:04:28.237 Database Mirroring State Change DBM:
Synchronizing Principal ->
DBM: Synchronized Principal without Witness
2011-12-09 20:05:42.530 Database Mirroring Connection An error occurred...
何が起こるかについての説明は次のとおりです。
この一連のイベントは、プリンシパルとウィットネスの間の接続が機能していることを示しています。証人を追加する要求は失敗し、複数の理由が考えられます。同様のイベントがミラーと目撃者でも発生する必要がありますが、プリンシパルでしかキャプチャできないと言う理由は明確ではありません。
ミラーのエンドポイントで使用した証明書がプリンシパルとウィットネスのエンドポイントとは異なることに気付くまで、しばらくの間、UNABLE configureWitnessに遭遇しました。
プリンシパル、ミラー、およびウィットネスのエンドポイントのミラーリングに同じ証明書(プリンシパルから2番目と3番目のサーバーにコピー)を使用すると、解決できました
「Witness_address」はIPアドレスですか、それとも名前ですか。
名前の場合、すべてのサーバーが他のすべてのサーバーの名前を解決できますか? (異なるワークグループ=名前解決なし= DNSまたはHOSTSファイルを使用する必要があります)
ミラーリングはすでに述べられており、証人のエンドポイントの状態は開始されていますか?確認するには:SELECT role_desc、state_desc FROM sys.database_mirroring_endpoints
あなたも持っていますか:
1。エンドポイントを作成しました:
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP(LISTENER_PORT = 7022)
FOR DATABASE_MIRRORING(ROLE = WITNESS)
GO
すべてのインスタンスで同じドメインアカウントを使用していますか?
エンドポイントの権限がそのアカウントに設定されていることを確認しますか?
-パートナーサーバーインスタンスのログインを作成し、
-どちらもMYDOMAIN\dbousernameとして実行されています:
USEマスター;
GO
CREATE LOGIN [MYDOMAIN\dbousername] FROM WINDOWS;
GO
-エンドポイントの接続権限をパートナーのログインアカウントに付与します
[MYDOMAIN\dbousername]へのENDPOINT :: Endpoint_Mirroringでの接続の許可;
GO
詳細については、 ここ を参照してください。