質問者
データベースミラーリングが失敗する

質問
-
SQL Server 2005でデータベースミラーリングを行おうとしています。
[環境]
プリンシパル・・・Win2000Server (SP4)
ミラー・・・Win2003 SmallBusinessServer (SP1)、(domain controller)
ウィットネス・・・Win2000Server (SP4)3台共に同ドメインに属していて、SQLServer 2005 DeveloperEdition (SP1) を使用しています。
[実行した手順]
プリンシパル側テーブルから完全バックアップとトランザクションログのバックアップを取り、
ミラー側で「WITH NORECOVERY」オプションで復元。
その後ManagementStudioから[オプション]→[ミラーリング]→[セキュリティの構成ウィザード]を実行しました。
この構成までは正常に終了したようですが、(エンドポイントは作成されたようです)
この後、ミラーリングを開始しようとしたところでエラーになって成功しません。ちなみにミラー側のテーブルのステータスが「復旧中」になってアクセスできません。
[エラー内容]
・データベース 'xxx' のAlterに失敗しました。 (Microsoft.SqlServer.Smo)
・Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.ConnectionInfo)
・サーバー ネットワーク アドレス "TCP://xxx.xxx.xx:5022" にアクセスできないか、このアドレスが存在しません。ネットワーク アドレス名と、ローカル エンドポイントおよびリモート エンドポイントのポートが操作可能であることを確認してください。 (.Net SqlClient Data Provider)
(テーブル名と完全修飾アドレスは一応xxxで伏せます)
すべての返信
-
松本です。こんにちは
エンドポイントが古いのが残っていたりするのかもしれません。
私もよくこのエラーを見ました ^^;プリンシパル、ミラー、ウィットネスのそれぞれで、
SELECT * FROM sys.database_mirroring_endpoints
を実行して、エンドポイントの名前を取得して、
DROP ENDPOINT [ミラー化]
(「ミラー化」という名前は、Management Studio がつけるデフォルトのエンドポイント名です)
とやって、全サーバー(プリンシパル、ミラー、ウィットネス)で
エンドポイントを一度削除すると、成功するかもしれません。 -
おがわさん、こんにちは。
> 古いエンドポイントがあった場合、自動的に選択されるはずです。
>
はい。> データミラー用のエンドポイントはインスタンスで 1 つしかもてないため、
> ウィザードでやっても自動的に選択され、
>
はい。その通りなのですが、
古いエンドポイントが、違うポートを指定していたりする場合は、
データベース ミラーリングを開始しようとしたときに
上記のエラーが出た記憶があります。別サーバーのミラーやウィットネスを利用してデータベース ミラーリングを
構築した後に、ローカルの 3つのインスタンスだけでデータベース ミラーリ
ングを構築しようすると、このエラーが出ました。
(暗号化の設定の有無とかもいじったりしていたので、それも関係しているかも
しれません)> 考えられるのは、FireWall が間にいて、エンドポイントに接続できないのではと思います。
> それに SBS の存在が気になります。
>
確かに、FireWall など、ネットワークまわりも気になりますね。 -
#軟禁中なんで、処理がすべて夜中になっているのがつらいとこ。。。
作成しているときに別のインスタンスが停止しているとポートのバッティングが起こりますよね、1 OS 上に複数インスタンスを持っていた場合は。
別のインスタンスが稼動していれば、エンドポイント作成時に怒られた記憶があります、同一ポートの場合。
[SQL Server 2005]データベース ミラーリングの設定方法について- CUI 編
[SQL Server 2005]データベース ミラーリングの設定方法について- GUI 編この記事は 1 OS 上に複数インスタンスを作成したときの話なので、対して変わらないと思っています。
1 インスタンス上に古いエンドポイントが残っている状況で、新しいエンドポイントが作成できてしまうとしたら、バグじゃないかと。。。(^_^;)
-
おがわさん、おはようございます。
> 1 インスタンス上に古いエンドポイントが残っている状況で、
> 新しいエンドポイントが作成できてしまうとしたら、
>
すみません、私の言葉足らずでした ^^;
私の経験したエラーは、古いエンドポイントが残っている状態で、
その古いエンドポイントを使ってしまった場合のエラーという
意味でした。
なので、古いエンドポイントを DROP ENDPOINT で削除してから
ウィザードを実行し直して、エンドポイントを新しく作り直し
ましょうということになります。古いエンドポイントが残っている状態で
新しいエンドポイントは作ったことはないです m(_ _)m -
飯田です。ご返答ありがとうございます。
まずMatsumotoさんのご意見、Endpointをいったん削除する方法をやってみましたが、状況はかわりませんでした。
次にFireWallが阻害してるのでは?という可能性ですが、
各PCとも市販のウィルス対策ソフトは特に使っておらず、
SBSに付随しているFireWallは、そもそもサービス自体を起動していないので効果なしのはずです。
念のためポートスキャンツールでTCP5022をチェックしてみましたが、OKでした。
あとはそうですね。上でリンクを張っていただいた、
「データベース ミラーリングの設定方法について- CUI 編」
を参考にしてコマンドでミラーリング設定をやってみましたが、
9.プリンシパル用インスタンス上でミラーの指定を行う
でおそらく同じエラーが出て失敗しました。一応続きを実行していったら、
11.ミラー用インスタンス上でプリンシパルの指定を行う
は成功しました。
うーん原因がいまいち掴めません・・・