none
SQL Server 2008でミラーリングが設定できません RRS feed

  • 質問

  • お世話になります。

     

    SQL Server 2008でミラーリングが設定できません

     

    環境は
        サーバマシン:2台 2台共に同じ環境です。
        OS:Windows Server2003 SP2
        SQL Server2008 StandardEdition

    手順は
        1.プリンシパル側で SQL Server Management Studio を起動。
        2.プリンシパルのデータベースを完全バックアップ
        3.プリンシパルのバックアップをミラー側で復元
        4.ミラーリング セキュリティ構成ウィザードに従って設定
          サーバマシンが2台なので、ミラーリング監視サーバを構成しない設定で行っています。
         
        途中までうまくいっているようなのですが、最後に以下のようなエラーメッセージが出ます。
          "ミラーリングの開始中にエラーが発生しました。
            データベース'xxxx'のAlterに失敗しました。
            サーバーネットワークアドレス"TCP://ミラー側サーバ名:5022"にアクセスできないか、このアドレスが存在し
            ません。... (Microsoft SQL Server、エラー: 1418)"

        SQL Server Management Studio 起動とミラー側に接続するときの認証は、SQL Server認証を使用しています。
        (sa でログインします)

        リスナーポートはプリンシパル、ミラー共に 5022 を指定
       (Windowsファイアウォールの例外に ポート 5022 を設定)
      

       データベース ミラーリングの配置のトラブルシューティング
       http://msdn.microsoft.com/ja-jp/library/ms189127.aspx
      
       MSSQLSERVER_1418
       http://msdn.microsoft.com/ja-jp/library/aa337361.aspx
      
       などのページは見てクエリを発行したりて確認したのですが、解決できていません。

       エラーが出た後に、ミラー側から
         ALTER DATABASE データベース名 SET PARTNER = 'TCP://プリンシパル側サーバ名:5022'
       とクエリを発行すると
       "データベース "データベース名" はデータベース ミラーリングで既に有効になっています。"
       とメッセージが表示されます。
      
       こんな状況なのですが、ご教授の程よろしくお願いいたします。

    2009年1月26日 11:21

回答

  • こんにちは、naginoです。

    情報提供ありがとうございます。
    手元でも再現できました。

    ちょっと時間の都合で半端な回答になってしまいますが、とりあえず一旦返信しておきます。
    #半端な状態で返信したくはないのですが、急に時間的にタイトな仕事が・・・。

    Windows 認証にしてもうまくいかなかった理由は、「SQL Server」サービスのサービスアカウントが「LocalSystem」だったためです。
    プリンシパル側からミラー側のエンドポイントに接続する際に、プリンシパル側のサービスが上記のサービスアカウントで実行されているため、「NT AUTHORITY\ANONYMOUS LOGON」という特殊な権限で接続しに行き、結果として接続できない(CONNECT 権限が無い)状態だったことが原因です。
    ミラー側のログに出ているエラーが該当します。
    なお蛇足ですが、エンドポイントの作成(ウィザードで途中まで成功している、というところで処理されている内容)については、途中で表示される認証画面で入力した権限で処理されているようでして、つまりサービスアカウントとは関係が無く、結果 SQL Server 認証の sa アカウントでも Windows 認証のアカウントでも成功しているようです。

    とりあえずミラーリングを動作させたいのであれば、サービスアカウントを管理者権限のローカルアカウントに変更し、あとは Windows 認証でミラーリングのウィザードを実行してみてください。
    手元ではローカルの Administrator で動作確認しましたが、おそらく大丈夫だと思われます。
    なお、サービスアカウントに必要な権限についての記載が MSDN ライブラリをざっと探した限りでは見当たらなかったので、とりあえず管理者権限としています。
    #ここが確認できていない点はご容赦ください。

    別の方法としては、サービスアカウントは変更せずに、証明書を使用して SQL Server 認証でミラーリングを構成する方法も可能な気がするのですが、ウィザードでは(たぶん)設定できないこと、やや手順が複雑なこと、私が手元で確認していないこと等ありますので、もしこちらの方法で試される場合はその点ご留意ください。
    また、以前ご提示いただいた自習書の「2.1 データベース ミラーリングの前提条件」にも「ワークグループ環境では、同じ名前 / 同じパスワードのローカルユーザを利用していること」と明記されていますように、こちらの方法は無理かもしれません。
    #ここが検証できていない点はご容赦ください。

    ご参考になれば幸いです。
    • 回答としてマーク wakaran 2009年2月6日 1:14
    2009年2月4日 13:13

すべての返信

  • こんにちは、naginoです。

     

    このエラーは原因が判り難いもののひとつだと個人的には思っています。

    というのも、たとえば手順 3 の復元時に「WITH RECOVERY」を指定(復旧)してしまっても、首記のエラーが発生します。

    (「WITH NORECOVERY」を指定、あるいは「データベースの復元」ウィザードのオプションにある「復旧状態」で同様の設定を選択できます。)

    このエラーは原因が必ずしも接続やセキュリティ周りとは限りません。

     

    ですので、既に詳細な情報を記載されているのに申し訳ないのですが、設定したパラメータや使用したクエリなど、作業手順をより具体的に提示いただかないと解決が難しいかもしれません。

    # とはいえ、明日から Tech Days 2009 に参加するので、手元の検証環境を触る時間が厳しいので、返信を期待されても困るのですが・・・。

     

    多少なりともご参考になれば幸いです。

    2009年1月26日 14:29
  • nagino様

     

    ご回答ありがとうございます。

     

    私が行った操作は

    手順は、SQL Server 2008 自習書シリーズ

    http://www.microsoft.com/japan/sqlserver/2008/self-learning/default.mspx#cat04

     

    の データベース ミラーリング入門 のPDFファイルを見ながら進めいて行きました。

     

    上記資料と違うところは、

    1. サーバマシン2台で構成している。
    2. 2台のサーバマシンはワークグループ環境で、管理者権限の同一ID,パスワードでログインしている
    3. ミラーリング監視サーバを含めるようにはしていない。
    4. ミラー側の接続にWindows認証ではなくSQL Server 認証で接続している
    5. ミラー側のリスナーポートもプリンシパル同様 5022 を設定している
    6. プリンシパル、ミラー共にWindowsファイヤウォールの例外に5022ポートを設定している

    サービスアカウントは、資料同様何も設定していません。

    エンドポイントの構成が画面では、プリンシパル、ミラー共に状態は成功になります。

    ウィザードの画面終了後ミラーリングを開始するかどうか訊いてくるので、開始します。

    その後完全修飾ドメイン名(FQDN)でないものがあります。...のダイアログが出て"はい"

    をクリックすると、その時に(約20秒後)エラーダイアログが表示されます。

     

    そこで以下のページを見つけそこにある確認用のクエリを発行してみました。

     

    データベース ミラーリングの配置のトラブルシューティング

    http://msdn.microsoft.com/ja-jp/library/ms189127.aspx

     

    ポート番号が適切であることを確認します。
    SELECT type_desc, port FROM sys.tcp_endpoints;

    エンドポイントが開始されていること (STATE = STARTED) を確認します。

    SELECT state_desc FROM sys.database_mirroring_endpoints

    などです。

     

    それとミラー側から
         ALTER DATABASE データベース名 SET PARTNER = 'TCP://プリンシパル側サーバ名:5022'
       とクエリを発行すると
       "データベース "データベース名" はデータベース ミラーリングで既に有効になっています。"
       とメッセージが表示されます。

     

    初心者なのでこれくらいしか(資料に書いてあることぐらいしか)できておりません。

     

    簡潔に説明できなくて申し訳ありません。

     

    よろしくお願いします。

     

     

    2009年1月27日 5:50
  • こんにちは、naginoです。

    すみません、1点見落としていたのですが、今回 SQL Server 認証を使われているのですね。

    たしかデータベースミラーリングは Windows 認証か証明書による認証でないといけなかったと思います。
    ちょっと手元で確認ができないので、申し訳ないのですが一度、SQL Server Enterprise Manager やミラーリングのセキュリティの構成ウィザードで Windows 認証だけを使用して試してみてください。

    ちなみに、すでに作成してしまっているエンドポイントは以下のクエリで削除できます。
    DROP ENDPOINT エンドポイント名

    また、データベースのミラーリングの設定は以下で削除できます。
    ALTER DATABASE データベース名 SET PARTNER OFF

    ご参考になれば幸いです。

    2009年1月27日 15:54
  •  nagino様

    ご回答ありがとうございます。

    せっかくアドバイスを頂いたのに、試すまでに時間がかかってしまいまして。

    Windows認証に設定して試みましたが、SQL Server認証のときと同様の結果となりました。(同じエラーメッセージ)

    ミラー側に接続には行けるので、何か操作を行う権限みたいなものが足りないのでしょうか?

    自習書を見た時は簡単にできそうだと思ったんですが...。

     

    よろしくお願いします。

    • 回答の候補に設定 wataruf 2013年7月31日 5:09
    2009年1月29日 6:16
  •  こんにちは、naginoです。
    # フォーラム移動のタイミングと、私事雑事の都合で少々間を空けてしまい、申し訳ありません。

    手元の環境で自習書を参照しながら監視サーバ無しの 2 台構成で構築してみましたが、特に問題なく構築できました。
    何か環境か手順に差異があるのでしょうが、いまひとつはっきりしない状況です・・・。
    慣れているが故に意識せずに行ってしまっている作業や設定があるのかもしれません・・・。

    手元の環境で再現させたいですので、差し支えなければ、以下の情報を提供いただけますでしょうか。
    セキュリティ等にかかわるところは、適宜文字列を置換していただいて結構です。

    1. エンドポイントのスクリプト(プリンシパル側とミラー側それぞれ)
    SQL Server Management Studio のオブジェクトエクスプローラで、サーバオブジェクト > エンドポイント > データベースミラーリングと辿っていくと、エンドポイントが表示されます。
    右クリックからスクリプト化できますので、CREATE 文などにしてください。

    2.サービスアカウント(プリンシパル側とミラー側それぞれ)
    SQL Server Configuration Manager(SQL Server 構成マネージャ)の左側ペインで「SQL Server のサービス」を表示すると、右側ペインに「ログオン」としてサービスアカウントが表示されます。
    実行中のサービスについてだけで結構です。

    3.SQL Server のログ(プリンシパル側とミラー側それぞれ)
    SQL Server Management Studio のオブジェクトエクスプローラで、管理 > SQL Server ログと辿っていくと「現在 - ~」などのログが表示されます。
    ダブルクリックでログの内容を表示できます。
    ウィザードもしくは ALTER 文でミラーリングを開始させてからエラーが表示されるまでの間について、お願いします。
    関係していそうなログが前後の時間帯にあるようであれば、そちらも含めてください。

    少々項目が多いですが、よろしくお願いします。
    2009年2月3日 2:18
  •  nagino様

    いろいろありがとうございます。

    > 1. エンドポイントのスクリプト(プリンシパル側とミラー側それぞれ)
    > 2.サービスアカウント(プリンシパル側とミラー側それぞれ)
    > 3.SQL Server のログ(プリンシパル側とミラー側それぞれ)


    nagino様の手順に従って上記3つのログを出力しました。

    1.プリンシパル側エンドポイントのスクリプト
    CREATE ENDPOINT [mirror_endpoint]
     AUTHORIZATION [DB1\xxxxx]
     STATE=STARTED
     AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
     FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE
    , ENCRYPTION = REQUIRED ALGORITHM RC4)
    GO

    2.プリンシパル側サービスアカウント
    名前                                        状態    開始   ログオン
    SQL Server Full-text Filter Deamon Launcher 実行中  手動   NT AUTHORITY\LOCALSERVICE
    SQL Server                                  実行中  自動   LocalSystem
    SQL Server Agent                            実行中  手動   LocalSystem
    SQL Server Analysis Service                 実行中  自動   LocalSystem
    SQL Server Browser                          実行中  自動   NT AUTHORITY\LOCALSERVICE
    SQL Server Integration Services 10.0        実行中  自動   NT AUTHORITY\NETWORKSERVICE
    SQL Server Reporting Services               実行中  自動   LocalSystem

    3.プリンシパル側SQL Server のログ
    02/04/2009 18:43:36,spid35s,不明,Database mirroring has been terminated for database 'TestMirror'. This is an informational message only. No user action is required.
    02/04/2009 18:43:36,spid35s,不明,エラー: 1443、重大度: 16、状態: 2。
    02/04/2009 18:43:16,spid37s,不明,Database mirroring connection error 4 'An error occurred while receiving data: '10054(既存の接続はリモート ホストに強制的に切断されました。)'.' for 'TCP://DB2:5022'.
    02/04/2009 18:43:16,spid37s,不明,Error: 1474<c/> Severity: 16<c/> State: 1.
    02/04/2009 18:43:00,spid57,不明,The データベース ミラーリング protocol transport is now listening for connections.
    02/04/2009 18:43:00,spid57,不明,Server is listening on [ 'any' <ipv4> 5022].
    02/04/2009 18:42:58,spid57,不明,The データベース ミラーリング protocol transport is disabled or not configured.


    1.ミラー側エンドポイントのスクリプト
    CREATE ENDPOINT [mirror_endpoint]
     AUTHORIZATION [DB2\xxxxx]
     STATE=STARTED
     AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
     FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE
    , ENCRYPTION = REQUIRED ALGORITHM RC4)
    GO

    2.ミラー側サービスアカウント
    名前                                        状態    開始   ログオン
    SQL Server Full-text Filter Deamon Launcher 実行中  手動   NT AUTHORITY\LOCALSERVICE
    SQL Server                                  実行中  自動   LocalSystem
    SQL Server Agent                            実行中  手動   LocalSystem
    SQL Server Analysis Service                 実行中  自動   LocalSystem
    SQL Server Browser                          実行中  自動   NT AUTHORITY\LOCALSERVICE
    SQL Server Integration Services 10.0        実行中  自動   LocalSystem
    SQL Server Reporting Services               実行中  自動   LocalSystem

    3.ミラー側SQL Server のログ
    02/04/2009 18:43:35,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:32,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:30,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:27,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:25,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:22,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:20,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:19,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:19,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:16,Logon,不明,Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: プリンシパルIPアドレス]
    02/04/2009 18:43:04,spid59,不明,The データベース ミラーリング protocol transport is now listening for connections.
    02/04/2009 18:43:04,spid59,不明,Server is listening on [ 'any' <ipv4> 5022].
    02/04/2009 18:43:02,spid59,不明,The データベース ミラーリング protocol transport is disabled or not configured.

    *ログイン名とIPアドレスの部分は、文字列を置き換えていいます。

    非常に見づらいのですがよろしくお願いいたします。

     

    2009年2月4日 10:40
  • こんにちは、naginoです。

    情報提供ありがとうございます。
    手元でも再現できました。

    ちょっと時間の都合で半端な回答になってしまいますが、とりあえず一旦返信しておきます。
    #半端な状態で返信したくはないのですが、急に時間的にタイトな仕事が・・・。

    Windows 認証にしてもうまくいかなかった理由は、「SQL Server」サービスのサービスアカウントが「LocalSystem」だったためです。
    プリンシパル側からミラー側のエンドポイントに接続する際に、プリンシパル側のサービスが上記のサービスアカウントで実行されているため、「NT AUTHORITY\ANONYMOUS LOGON」という特殊な権限で接続しに行き、結果として接続できない(CONNECT 権限が無い)状態だったことが原因です。
    ミラー側のログに出ているエラーが該当します。
    なお蛇足ですが、エンドポイントの作成(ウィザードで途中まで成功している、というところで処理されている内容)については、途中で表示される認証画面で入力した権限で処理されているようでして、つまりサービスアカウントとは関係が無く、結果 SQL Server 認証の sa アカウントでも Windows 認証のアカウントでも成功しているようです。

    とりあえずミラーリングを動作させたいのであれば、サービスアカウントを管理者権限のローカルアカウントに変更し、あとは Windows 認証でミラーリングのウィザードを実行してみてください。
    手元ではローカルの Administrator で動作確認しましたが、おそらく大丈夫だと思われます。
    なお、サービスアカウントに必要な権限についての記載が MSDN ライブラリをざっと探した限りでは見当たらなかったので、とりあえず管理者権限としています。
    #ここが確認できていない点はご容赦ください。

    別の方法としては、サービスアカウントは変更せずに、証明書を使用して SQL Server 認証でミラーリングを構成する方法も可能な気がするのですが、ウィザードでは(たぶん)設定できないこと、やや手順が複雑なこと、私が手元で確認していないこと等ありますので、もしこちらの方法で試される場合はその点ご留意ください。
    また、以前ご提示いただいた自習書の「2.1 データベース ミラーリングの前提条件」にも「ワークグループ環境では、同じ名前 / 同じパスワードのローカルユーザを利用していること」と明記されていますように、こちらの方法は無理かもしれません。
    #ここが検証できていない点はご容赦ください。

    ご参考になれば幸いです。
    • 回答としてマーク wakaran 2009年2月6日 1:14
    2009年2月4日 13:13
  •  nagino様

    お忙しいところありがとうございます。

    nagino様のアドバイスとおり、サービスアカウントを管理者権限のローカルアカウントに変更し、Windows認証でミラーリングウィザードを
    実行してみましたところミラーリングが構築できました。
    データベースのプロパティダイアログの[フェイルオーバーボタン]でプリンシパルとミラーを切替えてみました。バッチリでした。

    今回nagino様のおかげで、問題が発生した場合、エラーメッセージよりログを見る大切さもわかりました。

    懇切丁寧なアドバイスありがとうございました。
    • 回答としてマーク wakaran 2009年2月5日 7:54
    • 回答としてマークされていない wakaran 2009年2月5日 7:55
    2009年2月5日 7:50