トップ回答者
SQLServerエージェント 再起動失敗

質問
-
毎日、サーバリブートを行っているサーバで、SQLServerエージェントが正常起動後、停止してしまう事象が発生しています。
環境は以下の通りです。
----------------------------------------------
サーバ:Windows Server2003R2
SQLサーバ:SQL Server2008R2Std
サービスログオンユーザ:NT AUTHORITY\NETWORKSERVICE
スタートアップの種類:自動
----------------------------------------------
サーバリブートにおいて、今まで特に問題はありませんでした。
環境の変化点は特になく、本日2回目の発生です。
OSのイベントログには、以下のログが出力されていました。
・起動
「SQLServerAgent service successfully started.」
起動は成功しているようですが、その20秒後、
・エラー
「SQLServerAgent could not be started (reason: SQLServerAgent は SysAdmin として SQLServer に接続できる必要がありますが、'(不明)' は SysAdmin ロールのメンバーではありません).」
が出力され、
・停止
「SQLServerAgent service successfully stopped.」
で停止になります。
どのようなことが原因として考えられ、どのような対策を取れば良いか、ご教授をお願いいたします。
回答
-
なるほど、そういう状況であれば、ワークアラウンドというより理詰めのスタンスのほうがご所望と察します。
(最初にスタンスを書いておいていただけると話の流れが違ったのですが・・・)
理詰めでいく場合は、やはり有償のサポートで Microsoft の公式見解を貰うほうが適切かと思いますが、まずはここで分かる範囲内で調べてみるというのも悪くない選択肢ですので、私が分かる範囲内でいくつか気づいたことを。で、この環境は SP2 適用までですが、SP2 CU2 に含まれる KB2640027 で Agent サービスの起動タイミングを変更する修正が入っています。
SP2 CU2
http://support.microsoft.com/kb/2740411/
KB2640027
http://support.microsoft.com/kb/2640027/
この KB はスタートアップ時に実行するジョブがあるとき限定の話となっていますが、内容としては Agent サービスの起動タイミングを後ろにずらしたという修正ですので、なんらか影響があるのは確実だと思います。
これだけで解決するかどうかは分かりませんが、切り分けのためにはこれを適用しないと話が進まないという言い方は出来るかと思います。
Microsoft に問い合わせても、まず最新の CU を適用してくれと言われるのは確実だと思われます。
ざっと見た限りでは、本件に関係しそうな CU は他にはありませんね・・・。CU で修正されている不具合については受容する、という判断をお客様側がされているので、この場合はこの線で「これ以上は切り分け出来ない以上、調査不可」というあたりが落としどころな気がします。
あと別件ですが、サーバーリブート前に、SQL Server を先に停止していますよね?
SQL Server は障害による突然の停止にも対応する仕組みがありますので気にしなくても動作自体はしますが、本来は積極的に頼るような仕組みではありませんので、サーバーリブート時はちゃんとOS より前にサービス自体を停止してあげてください。
MCITP(Database Developer/Database Administrator)
すべての返信
-
エラーメッセージからは (SQL Server ではなく) SQL Server Agent の実行アカウントが SQL Server に対して十分な権限を持っていないということのように見えますので、権限のチェックが最初かと思います。
ただ、以下のスレッドのように原因はさまざまなようですので、スレッドにある対処法をひとつずつ試していくことになるかと思います。
http://social.technet.microsoft.com/Forums/ja-JP/e719a270-b802-466a-9839-455171197b7c/sqlagent-cant-start?forum=sqldataaccessMCITP(Database Developer/Database Administrator)
-
返信ありがとうございます。
記載されているスレッドを確認し、以下を確認しましたが、解決には至っておりません。
しかし、本日は正常に起動いたしました。
1.Agent XPs
Agent XPsのrun_valueは、1になっているので問題なさそうです。
2.sysadminロール
サービスログオンユーザの「NT AUTHORITY\NETWORKSERVICE」に対して、sysadminロールを付与してあります。
3.AWEは未使用です。
4.仮想環境ではありません。
5.Lock Pages in Memory
サービスログオンユーザに対して「Lock Pages in Memory」の付与はしておりません。
(32ビット環境で、Webサーバーとしても併用しているため、この設定はしない方が良いと思っています。)
-
返信ありがとうございます。
エラーが出る場合と、エラーにならない場合の前後のイベントログについて比較し、順番の違いを発見しました。
(①~⑥までは同一です)
・エラーにならない場合
①SQLServerの起動に関するイベントログ
②データベース"master"の起動に関するイベントログ
③データベース"model"の起動に関するイベントログ
④「SQLServerAgent service successfully started.」ログ
⑤ユーザデータベース(msdb、tempdb含む)の起動に関するイベントログ
⑥「構成オプション 'Agent XPs' が 0 から 1 に変更されました。RECONFIGURE ステートメントを実行してインストールしてください。」ログ
⑦「復旧が完了しました。このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」ログ
⑧「ライブラリ 'xpsqlbot.dll' をメモリ内に読み込もうとしています。このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」ログ
⑨「'xpsqlbot.dll' バージョン '2009.100.1600' を使用して拡張ストアド プロシージャ 'xp_qv' を実行します。このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」ログ
⑩「ライブラリ 'xpstar.dll' をメモリ内に読み込もうとしています。このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」
と続きます。
・エラーになる場合
①SQLServerの起動に関するイベントログ
②データベース"master"の起動に関するイベントログ
③データベース"model"の起動に関するイベントログ
④「SQLServerAgent service successfully started.」ログ
⑤ユーザデータベース(msdb、tempdb含む)の起動に関するイベントログ
⑥「構成オプション 'Agent XPs' が 0 から 1 に変更されました。RECONFIGURE ステートメントを実行してインストールしてください。」ログ
⑦「ライブラリ 'xpsqlbot.dll' をメモリ内に読み込もうとしています。このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」ログ
⑧「'xpsqlbot.dll' バージョン '2009.100.1600' を使用して拡張ストアド プロシージャ 'xp_qv' を実行します。このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」ログ
⑨「SQLServerAgent could not be started (reason: SQLServerAgent は SysAdmin として SQLServer に接続できる必要がありますが、'(不明)' は SysAdmin ロールのメンバーではありません).」ログ
⑩「復旧が完了しました。このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」ログ
復旧完了のログとライブラリ読み込みのログの順番が違うことがわかりました。
再起動に失敗した2回ともこの順番でした。
また、起動に失敗した場合に、手動(SQLServer構成マネージャーから)起動する場合は正常に起動します。
- 編集済み tar398 2014年6月12日 0:44
-
イベントログは、原因か結果かわかりませんが、関連性は高そうですので、糸口のひとつになりそうですね。
xpsqlbot.dll はほとんど公開情報がありませんが、起動時に実行される xp_qv などのストアドプロシージャに関連(ストアドプロシージャの実体か Wrapper かも?)した DLL のようです。
xp_qv は起動時に呼ばれる SP で、ここでは DB の復旧と処理順が前後しているのが気になります。
SQL Server Agent サービスを遅延開始にして様子を見たいところですが、Windows Server 2003 R2 だと設定できないですよね・・・。
起動を手動にしてスクリプトか何かで1分程度遅れて起動するようにする、あるいは起動後にスクリプトでサービスの起動状態を確認して起動失敗していたら起動する、といったあたりが対症療法としてはありかな、と思います。あとは、管理ツールのサービスかなにかで SQL Server Agent サービスの依存関係は現状ではどのように設定されているでしょうか?
あと、SQL Server の正確なバージョンはわかりますか?
Management Studio などで表示されている 10.50.XXXX のような数値です。
SP(サービスパック) や CU(累積的な更新プログラム) がどこまで適用されているのか、でも構いません。
MCITP(Database Developer/Database Administrator)
- 編集済み nagino - 引退エンジニア 2014年6月12日 12:50
-
毎日の返信ありがとうございます。
>起動を手動にしてスクリプトか何かで1分程度遅れて起動するようにする、
>あるいは起動後にスクリプトでサービスの起動状態を確認して起動失敗していたら起動する、といったあたりが対症療法としてはありかな、と思います。
これについては検討しましたが、本来の動きとは違うことをすることに対して抵抗があるようです。(お客様の環境であるため)
現在は、私が不在でも対応できるように、手順書を作成してあります。
>管理ツールのサービスかなにかで SQL Server Agent サービスの依存関係は現状ではどのように設定されているでしょうか?
サービスの依存関係は、
このサービスが依存するシステムコンポーネントとして、「SQL Server (MSSQLSERVER)」があります。
このサービスに依存しているシステムコンポーネントはありません。
>SQL Server の正確なバージョン
10.50.4000.0です。
>SP(サービスパック) や CU(累積的な更新プログラム) がどこまで適用されているのか
サービスパックは、SP2が適用済みです。
累積的な更新プログラムは、全く適用されていません。(お客様の方針)
-
なるほど、そういう状況であれば、ワークアラウンドというより理詰めのスタンスのほうがご所望と察します。
(最初にスタンスを書いておいていただけると話の流れが違ったのですが・・・)
理詰めでいく場合は、やはり有償のサポートで Microsoft の公式見解を貰うほうが適切かと思いますが、まずはここで分かる範囲内で調べてみるというのも悪くない選択肢ですので、私が分かる範囲内でいくつか気づいたことを。で、この環境は SP2 適用までですが、SP2 CU2 に含まれる KB2640027 で Agent サービスの起動タイミングを変更する修正が入っています。
SP2 CU2
http://support.microsoft.com/kb/2740411/
KB2640027
http://support.microsoft.com/kb/2640027/
この KB はスタートアップ時に実行するジョブがあるとき限定の話となっていますが、内容としては Agent サービスの起動タイミングを後ろにずらしたという修正ですので、なんらか影響があるのは確実だと思います。
これだけで解決するかどうかは分かりませんが、切り分けのためにはこれを適用しないと話が進まないという言い方は出来るかと思います。
Microsoft に問い合わせても、まず最新の CU を適用してくれと言われるのは確実だと思われます。
ざっと見た限りでは、本件に関係しそうな CU は他にはありませんね・・・。CU で修正されている不具合については受容する、という判断をお客様側がされているので、この場合はこの線で「これ以上は切り分け出来ない以上、調査不可」というあたりが落としどころな気がします。
あと別件ですが、サーバーリブート前に、SQL Server を先に停止していますよね?
SQL Server は障害による突然の停止にも対応する仕組みがありますので気にしなくても動作自体はしますが、本来は積極的に頼るような仕組みではありませんので、サーバーリブート時はちゃんとOS より前にサービス自体を停止してあげてください。
MCITP(Database Developer/Database Administrator)
-
>(最初にスタンスを書いておいていただけると話の流れが違ったのですが・・・)
申し訳ありません。最初に私の立場をお伝えした方が良かったかもしれません。
私は、システム開発担当者としてお客様の職場に常駐しております。
開発担当者ですので、本来サーバ管理はしないのですが、担当しているシステムのみがこの問題となっているSQLServerを使用しているため、その管理も任されています。
また、お客様の主環境はOracleですので、サポートの契約もありません。
⇒有償サポートに問い合わせることはしないそうです。
私は開発担当者ということと、サーバ管理についてはあまり詳しくないことはお客様にも理解いただいております。
今回の問題は、原因不明として復旧手順書を作成し、毎日監視することで一応解決として完了しております。
しかし、管理を任されている身としてはなんとか解決できないものかと思いまして、こちらに質問させていただきました。
>CUに関して
CU2を適用するかどうかは、今後のエラーの再現次第(様子見)ということになりました。
>あと別件ですが、サーバーリブート前に、SQL Server を先に停止していますよね?
すみません、実施していないです。
OSより前にサービスを停止するよう組み込みます。
<お礼>
いろいろと対応ありがとうございました。
今後状況が何か変わりましたら報告します。