回答:
プリンシパルサーバーでミラーリングエンドポイントを再起動すると、これが解決する場合があります。
これを行うには、次のT-SQLを使用します。
ALTER ENDPOINT Endpoint_Name STATE = STOPPED
ALTER ENDPOINT Endpoint_Name STATE = STARTED
エンドポイントの名前を取得します。
SELECT * FROM sys.endpoints
WHERE type = 4
詳細については、KB 2490051を参照してください。
まず、プリンシパルでこのT-SQLコマンドを使用して再接続してもらいます。
ALTER DATABASE AdventureWorks2012 SET PARTNER RESUME;
それが失敗した場合は、プリンシパルとミラーの間の通信に問題があり、そこから楽しみが始まります。IP接続から、ミラーリングエンドポイントのセキュリティ、さまざまな暗号化方法まで、あらゆるものを使用できます。詳細なトラブルシューティングを行う必要がある場合は、Robert Davisの著書Pro SQL Server 2008 Mirroringをお勧めします。
今回のケースでは、ミラーリングエンドポイントの接続に証明書認証を使用していますが、問題はミラーリングエンドポイントが使用していた証明書の1つが期限切れになったことが原因でした。
エンドポイント認証に関連する証明書の有効期限を確認するには、
SELECT * FROM sys.certificates
この場合、有効期限が切れたものについて新しい証明書を作成しALTER ENDPOINT
、それらをインポートした後に作成する必要があります。
次の手順でこの問題を修正しました。PRIMARYでのみエンドポイントを再起動しても解決しませんでした
PRIMARY:
SELECT * FROM sys.endpoints WHERE type = 4
ALTER ENDPOINT Mirroring STATE = STOPPED
ALTER ENDPOINT Mirroring STATE = STARTED
ミラー上:
SELECT * FROM sys.endpoints WHERE type = 4
ALTER ENDPOINT Mirroring STATE = STOPPED
ALTER ENDPOINT Mirroring STATE = STARTED
PRIMARYに戻る:
ALTER DATABASE PACXDSite SET PARTNER RESUME;
場合:
プリンシパルサーバーで以下のコマンドを実行すると:
alter database 'Database_Name' set partner off
上記のコマンドを実行した後、DBは[mirror, disconnected]
ミラーサーバー上で状態になります。
解決:
手順1:ミラーでクエリの下を実行する
exec sp_resetstatus 'Database_Name'
ステップ2:以下のコマンドを実行すると、DBが使用可能になります。
restore database 'Database_Name' with recovery
注:ステップ2は回復するのに時間がかかります。
「RESUME PARTNER」が機能しない場合
ALTER DATABASE AdventureWorks2016 SET PARTNER RESUME;
そのデータベースのミラーを解除して再構成します。
--STEP 1 ON PRINCIPAL、データベースのミラーを解除します
ALTER DATABASE AdventureWorks2016 SET PARTNER OFF;
--STEP 2 ON MIRROR、データベースのミラーを解除します
ALTER DATABASE AdventureWorks2016 SET PARTNER OFF;
-ミラーのステップ3
RESTORE LAST FULL BACKUP DATABASE WITH NO RECOVERY
RESTORE TRAN BACKUP DATABASE WITH NO RECOVERY
-ミラーのステップ4
ALTER DATABASE AdventureWorks2016 SET PARTNER = 'TCP://PRINCIPAL.MyDomain.COM:5022';
-プリンシパルのステップ5
ALTER DATABASE AdventureWorks2016 SET PARTNER = 'TCP://MIRROR.MyDomain.COM:5022';
--WITNESSがすでに構成されている場合は、STEP 6 ON PRINCIPAL
ALTER DATABASE AdventureWorks2016 SET WITNESS = 'TCP://WITNESS.MyDomain.COM:5022';
プリンシパルデータベースは常にオンラインで利用可能であるため、上記のすべてを勤務時間中に行うことができることに言及する価値があります。