SQL Server のミラーリング テスト

■環境
 ・サーバー 2台 (Win Server2003std / Win Server 2008std) 
 ・SQL Server2005 std(SP3)
 ・アプリ:delphi2009、およびMS-ACCESSでSQLServerに接続して使用している

■やったこと
 1.SQLサーバーのミラーリング設定を登録

 ・テストサーバーに、「ミラー用のインスタンス」と「監視用のインスタンス」を作成する
 ・エンドポイントを「プリンシパル」「ミラー」「監視」のそれぞれのインスタンスに登録する

 ・プリンシパルサーバのDBの「完全バックアップ」と「トランザクションログバックアップ」を取得し、
  ミラーサーバーに復旧(操作不可状態)させる
 ・プリンシパルのDBに「ウイザード」を使ってミラーリングを構成する
 ・ミラー側のDBが「ミラー、同期済み/復元しています」の状態になっていることを確認する

 2.自動フェールオーバーのテスト

 ・プリンシパルサーバーをシャットダウンさせ、ミラー側がプリンシパルに切り替わることを確認
 ・プリンシパルサーバーを立ち上げて元の状態にもどるか確認
 ・手動でフェールオーバー操作を実施する

 3.アプリケーションからのテスト

 ・アプリケーションがミラー側を参照して動作するか確認

■わかったこと(つまづいたところ)

 1.SQLサーバーのミラーリング設定を登録

 ・SQL Serverのサービスはドメインユーザで立ち上げないと、ミラーリングは構成できない

  「Alterが失敗しました ~」と何のことかわからないメッセージが表示され、ミラーリング失敗。

  SQL Server起動ユーザをビルトインのローカルユーザ(Administrator)にしていたため、
  ミラーリングに失敗していたようです。
  SQL構成マネージャで、起動用のユーザ名をドメインのIDに設定し、サービスを再立ち上げして
  なんとかクリアー!!

 2.自動フェールオーバーのテスト
 
・プリンシパル側が停止(シャットダウン)すると、予定通りミラー側に自動的に切り替わった。
  しかし、プリンシパル側が立ち上がっても、自動的には元に戻らなかった。
  
   もとに戻ると勝手に想像していたが、もとに戻らないようです。
   
 ・プリンシパル側が同期状態になるまで、数分かかる。
  同期状態になる前に、手動でフェールオーバーさせても失敗する

   焦りました。ミラー側がプリンシパルになり、元に戻れないんじゃないかと焦ってしまいました。
   数分待つと状態が変わり、手動でフェールオーバーできるようになりました。  

 3.アプリケーションからのテスト
 
 ・アプリを修正しないと、フェールオーバー対応できない

   Delphiではこれまで「Microsoft OLE DB Provider for SQL Server」を使ってSQL Serverに接続し
   ていましたが、どうもフェールオーバーに対応していないようです。
   プロバイダを「SQL Native Client」に切り替えて、「FailoverPartner=サーバー名\インスタンス名」
   のパラメータを接続文字に追加して解決しました。

   Microsoft AccessではODBCで接続しているので簡単にはミラーリングに対応できないかもです。 ショックです。

◆2013/03/11追記

ご参考:アプリからサーバーを切り替える方法

SQL Server のミラーリング テスト” への2件のフィードバック

  1. ・プリンシパル側が停止(シャットダウン)すると、予定通りミラー側に自動的に切り替わった。
      しかし、プリンシパル側が立ち上がっても、自動的には元に戻らなかった。
     
    → フェールオーバー(切り替え)が実行されると、プリンシバルとミラーが切り替わる。
     つまり、元に戻すには再びフェールオーバーを実行する必要がある(自動・手動いづれか)

    ・プリンシパル側が同期状態になるまで、数分かかる。

    → 表示上の話かもしれない。
     「最新の状態に更新」を実行し、表示をリフレッシュすればよいのでは。
     見た目上、状態が変わっていないだけかもしれない。

    Microsoft AccessではODBCで接続しているので簡単にはミラーリングに対応できないかもです

    → サーバーの完全名とポート番号を指定する必要がある?
    http://support.microsoft.com/kb/941526/ja

  2. 通りすがりさん
    SQL Server関係で初めてコメント頂きました。
    ありがとうございます。

    ・戻しについては、その後、エージェントを使って勝手に切り替わるように変更しました。
    ・戻りの時間ですが、表示の更新はやってます。(笑
    ・Accessからの接続は、その後、ストアドを実行する前にプリンシパルが生きてるか確認し、
     応答がなければ、ミラー側にアクセス(ADO接続)するように関数を作って対応しましたが、
     結構苦労した覚えがあります。

    これまで、サーバーの音がうるさい時は、プリンシバル側を停止するという、変な運用を行っていた
    関係でミラーリングを行っていましたが、防音ラック購入でようやく24時間稼働させられるようになり、
    ミラーリングはやめてしましました。(笑)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です