web-dev-qa-db-ja.com

ミラーリング設定に証人を追加できません

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  

しかし、証人の追加が失敗する理由についての情報はまだ見当たりません。

2
Adrian Grigore

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... 

何が起こるかについての説明は次のとおりです。

  • 20:04:07に、校長は証人とつながります
  • 20:04:08に、プリンシパルと証人がハンドシェージを正常に終了します(ログインの監査が成功します)
  • 20:04:27に、DBMは状態を監視なしの同期から同期に変更します
  • 20:04:28に、DBMは状態を同期から同期(監視なし)に戻します。
  • 20:05:42に、非アクティブのために証人との接続がタイムアウトし、閉じます

この一連のイベントは、プリンシパルとウィットネスの間の接続が機能していることを示しています。証人を追加する要求は失敗し、複数の理由が考えられます。同様のイベントがミラーと目撃者でも発生する必要がありますが、プリンシパルでしかキャプチャできないと言う理由は明確ではありません。

1
Remus Rusanu

ミラーのエンドポイントで使用した証明書がプリンシパルとウィットネスのエンドポイントとは異なることに気付くまで、しばらくの間、UNABLE configureWitnessに遭遇しました。

プリンシパル、ミラー、およびウィットネスのエンドポイントのミラーリングに同じ証明書(プリンシパルから2番目と3番目のサーバーにコピー)を使用すると、解決できました

0
Vijai

「Witness_address」はIPアドレスですか、それとも名前ですか。

名前の場合、すべてのサーバーが他のすべてのサーバーの名前を解決できますか? (異なるワークグループ=名前解決なし= DNSまたはHOSTSファイルを使用する必要があります)

0
TristanK

ミラーリングはすでに述べられており、証人のエンドポイントの状態は開始されていますか?確認するには: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

  1. すべてのインスタンスで同じドメインアカウントを使用していますか?

  2. エンドポイントの権限がそのアカウントに設定されていることを確認しますか?
    -パートナーサーバーインスタンスのログインを作成し、
    -どちらもMYDOMAIN\dbousernameとして実行されています:
    USEマスター;
    GO
    CREATE LOGIN [MYDOMAIN\dbousername] FROM WINDOWS;
    GO
    -エンドポイントの接続権限をパートナーのログインアカウントに付与します
    [MYDOMAIN\dbousername]へのENDPOINT :: Endpoint_Mirroringでの接続の許可;
    GO

詳細については、 ここ を参照してください。

0
Paul Ackerman