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

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

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

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

.NET Framework

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

サーバ

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

メール

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

Windows Server

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

Q&A

解決済

2回答

6672閲覧

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

DinKa

総合スコア40

SQL Server

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

.NET Framework

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

サーバ

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

メール

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

Windows Server

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

0グッド

0クリップ

投稿2017/07/04 08:33

編集2017/07/05 00:04

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

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

背景
0. 別システムから渡されたデータをためておき、2時間ごとにSQLSeverにデータをインポートする。
0. データは、毎回同じ名前なため、インポートをスキップすると上書きされてしまう。
0. データに問題がある場合などで、インポートができなかった場合は、別途エラーメッセージをメールで発生させているので、その都度リカバリーしていた。
0. 1か月に1回程度の頻度で、インポートプログラムでエラーが発生し、取り込みが行えなくなっている。
0. インポートプログラムは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

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

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

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

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

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

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

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

投稿2017/07/12 07:58

編集2017/07/12 08:01
DinKa

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PineMatsu

2017/07/12 08:12 編集

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

2017/07/27 10:42

コメントありがとうございます。 返事遅くなり申し訳ありません。 平時からレスポンス自体はいいほうではありませんが、深夜なので利用者もほとんどいないと思います。万が一利用していた時に、インポートに時間がかかっていた場合でも、1分程度ならほとんど気にならないでしょうね。 ちなみにプログラムの修正、実装が無事完了しました。 また、今月も1回発生していましたが、実装後は発生していません。 月1程度発生しているため、来月までマニュアル監視は念のため継続しますけどね。
guest

0

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

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

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

プロセスの監視

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

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

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

投稿2017/07/04 08:52

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DinKa

2017/07/04 09:53

ご回答ありがとうございます。 ご紹介いただいた2つのアプリに関しては、大変失礼ながらWindowsServer2012R2での動作保証がないため、今回は採用を見送らせていただきます。 ただ、リカバリーの方針としては参考にさせていただきたいと思います。 根本対応に関しましては、お答えいただいているように、インポートバッチ側の修正すべきなのでしょうが、エラーの発生原因がSQLServerへの接続エラーぐらいにしか理解できませんでした。 さらに言えば稀にしか起こらないため、原因特定に至っておりません。 ありがとうございました。
PineMatsu

2017/07/05 08:03

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

2017/07/05 23:55

返信ありがとうございます。 WindowsServer系で動作保証を求めるとフリーソフトは選択できなさそうですね。 やはり根本的な解決(インポートバッチのプログラム修正)をする方向が、最終的には一番良い気がしてきました。 解析して設計の見直しから始めると思うので、時間はかかるとは思いますが。 エラー原因に関しては、Windowsのエラーイベントから特定ができないのが難しいですね。 インポートバッチ自体にログを吐かせるようにしてみます。
PineMatsu

2017/07/06 00:21

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

2017/07/06 07:46

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問