質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • サーバ

    881questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • SQL Server

    720questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • .NET Framework

    537questions

    .NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

  • Windows Server

    467questions

    Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

  • メール

    310questions

    メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

WindowsServer2012R2におけるエラーイベントの解析方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,793

DinKa

score 31

タスクスケジューラより起動するバッチのエラー?とそのリカバリー方法について

環境情報
OS:WindowsServer2012R2
DB:SQLServer2014
DBサーバーにはリモートデスクトップで接続し、管理者権限は都度取得。

背景

  1.  別システムから渡されたデータをためておき、2時間ごとにSQLSeverにデータをインポートする。
  2. データは、毎回同じ名前なため、インポートをスキップすると上書きされてしまう。
  3. データに問題がある場合などで、インポートができなかった場合は、別途エラーメッセージをメールで発生させているので、その都度リカバリーしていた。
  4. 1か月に1回程度の頻度で、インポートプログラムでエラーが発生し、取り込みが行えなくなっている。
  5. インポートプログラムはC#で開発。プログラムの改修は難しいが、mappingやconfigを回収することで部分的には可能。

エラー内容
(1).NET_Runtimeエラー

  • Provider 
    [ Name]  .NET Runtime 
  • EventID 1026 
    [ Qualifiers]  0 
    Level 2 
    Task 0 
    Keywords 0x80000000000000 
  • TimeCreated 
    [ SystemTime]  201X-XX-XXT17:11:32.000000000Z 
    EventRecordID 29114 
    Channel Application 
    Computer XXXXX.com 
    Security 
  • EventData 
    アプリケーション:XXXXImpoter.exe
    フレームワークのバージョン:v4.0.30319
    説明: ハンドルされない例外のため、プロセスが中止されました
    例外情報:System.Data.SqlClient.SqlException
    スタック: 場所 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(~長いため省略いたします)

(2)Application_Error

  • System 
  • Provider 
    [ Name]  Application Error 
  • EventID 1000 
    [ Qualifiers]  0 
    Level 2 
    Task 100 
    Keywords 0x80000000000000 
  • TimeCreated 
    [ SystemTime]  201X-XX-XXT17:11:43.000000000Z 
    EventRecordID 29115 
    Channel Application 
    Computer XXXXX.com 
    Security 
  • EventData 
    XXXXImpoter.exe 
    1.0.0.0 
    56e779f0 
    KERNELBASE.dll 
    6.3.9600.18202 
    569e72bb 
    e0434352 
    00015b68 
    73a14 
    01d2de1e90dd4709 
    F:\batchpg\bin\XXXXImpoter.exe 
    C:\Windows\SYSTEM32\KERNELBASE.dll 
    0b62217a-4a12-11e7-80c8-00505699054a 

質問

  1. エラー原因を把握したい。
  2. 簡単に解決できるなら、エラーが発生しないようにしたい。
  3. インポートプログラム自体にエラーが発生したときの早期発見をしたい。
  4. 可能なら自動リカバリー方法を知りたい。

考慮済みの対応策

  1. メール通知
    ・タスクにエラーイベントを登録し、エラー時にメールを送る。
    ⇒WindowsServer2012R2には失われた機能だったため×
  2. エラーリカバリー
    ・タスクにエラーイベントを登録し、エラー発生をスイッチに再実行する。
    ⇒エラーの原因が特定できていないため、再実行しても再度エラーが出る可能性がある。
    ⇒エラーがずっと出続けると、何度も再実行することになり危険。
  3. 余分に実行
    ・別システムからの引き受けデータの発生頻度は、最短2時間に1回なため、2時間に2回取り込みを行えば取り漏れの可能性が減る。
    ⇒1時間に1回にした時の空回しは無駄ではないか。
    ⇒1/360で発生とすると、(1/360)^2なので、約30年に1回の発生頻度になる。
    ⇒ただしエラー原因によってはもっと確率が高かったり、近い時間は更にエラーが発生しやすい可能性もある。
    ⇒結局確実ではない。

条件

  1. プログラム改修に関しては極力変更は避けたい(プログラミング能力の低い自分には、コメント有り・設計書無しのコード解析は厳しい)。
  2. サーバ内で動作保証の無い(WinS2012R2だと殆どないと思う)フリーソフトは原則使わない(セキュリティの観点のみならず、管理者権限の問題による)。

求めている目標
・一番の目標はエラーなくインポートが完了できることですが、リアルタイム性がそこまで重視されているわけではないため、エラーへのリカバリーができれば問題ないと考えております。最低限、エラーが発生した場合が通知を受け、手動リカバリーでもよいと考えています。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

自己解決として、質問への回答をいたします。

1.SQLServerへの接続エラーの原因は、SQLServer自体のバックアップが午前0時~午前2時半に起動しているため、接続に失敗することが多かったようです。

2.SQLサーバーの機能によるバックアップであるため、この機能を外すことは避けたいと思います。よって、発生した場合のリカバリープランを3、4の質問の回答として考えました。

3.C#に詳しい方に助力を求めて、プログラムの解析をお願いした結果、SQLServerへのConnectエラーを例外処理として対応していなかったことが判明しました。この時に、エラーログを吐いて、ログのメール送信をするように設定してもらいました。

4.自動リカバリー方法ではないですが、SQLSeverへの接続バッファタイムがデフォルトで15sであるため、これを60sに修正してもらい、接続エラーが発生しづらいよう対応してもらいました。

以上にて、条件・目標に沿った解決が可能になりました。
ただ自己解決ではなく、他人任せ(方法はともかく実施も)になってしまったのが残念ではありますが、今後の閲覧者の方に参考になればと思い、記録として残させていただきます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/12 17:11 編集

    SQLSeverへの接続バッファタイムは短めにしておいて、エラーで戻ってきたら、アプリ側で時間待ちをして接続をリトライするような方法もあるかと思います。
    確か、接続の待ち時間を長くすると接続の呼び出し側にコントロールが戻ってくるのが最長その時間になるはずです。
    まあ、他にどのような処理をしているかによりますが、戻ってこない間はそのアプリは「応答なし」と判断されるかもしれないためで、人が見た時にハングアップしている?と勘違いしてしまう可能性を避けるためです。(深夜の様なのと1分位なら問題ないと思います)

    キャンセル

  • 2017/07/27 19:42

    コメントありがとうございます。
    返事遅くなり申し訳ありません。

    平時からレスポンス自体はいいほうではありませんが、深夜なので利用者もほとんどいないと思います。万が一利用していた時に、インポートに時間がかかっていた場合でも、1分程度ならほとんど気にならないでしょうね。

    ちなみにプログラムの修正、実装が無事完了しました。
    また、今月も1回発生していましたが、実装後は発生していません。
    月1程度発生しているため、来月までマニュアル監視は念のため継続しますけどね。

    キャンセル

0

まずは、アプリが落ちた時に表示されるダイアログを非表示にする必要があります。
このダイアログが表示されたままだとアプリが残ったままになってますから。

エラー報告メッセージを無効にする

それから、プロセスを監視して特定のアプリが応答なしなどになった場合に再起動を掛けるためのツールがあるのでそれを利用して再起動を掛けます。

プロセスの監視

もしかしたら、これらのツールではダイアログの抑制などもやってくれるかもしれません。詳しくは見てないので、ご自分で調べてみてください。

これらを利用すれば、アプリがハングった時に自動でアプリの再起動を掛けることが可能です。

ただこれはあくまで対症療法であって根本対策にはなってません。
本来は、例外をキャッチしていないアプリの処理がマズイのでそれを修正すべきです。
エラーメッセージ的には、DBとの接続が何らかの理由で遮断されたか接続できないかのいずれかのような気がしますが・・・。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/04 18:53

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

    ご紹介いただいた2つのアプリに関しては、大変失礼ながらWindowsServer2012R2での動作保証がないため、今回は採用を見送らせていただきます。
    ただ、リカバリーの方針としては参考にさせていただきたいと思います。

    根本対応に関しましては、お答えいただいているように、インポートバッチ側の修正すべきなのでしょうが、エラーの発生原因がSQLServerへの接続エラーぐらいにしか理解できませんでした。
    さらに言えば稀にしか起こらないため、原因特定に至っておりません。

    ありがとうございました。

    キャンセル

  • 2017/07/05 17:03

    失礼なことは全然ありません。私が作ったソフトではありませんし(笑)。
    ただ、Windows Server 2012の動作保証となると、こういうフリーソフトの場合、記載してあるほうが稀だと思います。Win7で動いていればまず問題なく動くと思います。
    動いているアプリ(プロセス)を監視して再起動を掛けるのはそんなに難しい処理ではありません。アプリの特定はタイトルバーの文字列などでできるので監視はできるかと。
    まれにしか起こらないと言うのはちょっと原因特定が難しいかもしれませんね。そのアプリそのものに何か仕掛けをするとかしないことには。

    キャンセル

  • 2017/07/06 08:55

    返信ありがとうございます。

    WindowsServer系で動作保証を求めるとフリーソフトは選択できなさそうですね。
    やはり根本的な解決(インポートバッチのプログラム修正)をする方向が、最終的には一番良い気がしてきました。
    解析して設計の見直しから始めると思うので、時間はかかるとは思いますが。

    エラー原因に関しては、Windowsのエラーイベントから特定ができないのが難しいですね。
    インポートバッチ自体にログを吐かせるようにしてみます。

    キャンセル

  • 2017/07/06 09:21

    ハンドルされていない例外でプロセスが終了しているようなので、まずはきちんとtry~catchでSqlExceptionをハンドリングされることでしょうね。DBアクセスしているところでtry~catchしていないところを探して入れてみてはどうでしょうか?
    キャッチできたら詳細の情報をそこで吐き出すことができます。

    キャンセル

  • 2017/07/06 16:46

    ありがとうございます。
    SqlExceptionエラーを拾えるようにしてみます。

    キャンセル

同じタグがついた質問を見る

  • サーバ

    881questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • SQL Server

    720questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • .NET Framework

    537questions

    .NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

  • Windows Server

    467questions

    Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

  • メール

    310questions

    メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。