Share via


SQL Server へのログ書き込みに失敗する

こんにちは、マイクロソフトの古水です。
今回は、ISA Server 2006 のログを SQL Sever に保存するように設定している際に、SQL Server へのログ書き込みが失敗し Microsoft Firewall サービスが停止する障害に関して説明いたします。
本現象は、下記の 2 つの条件が揃った場合に発生します。

・ISA Server の警告定義内 [ログ エラー] が有効になっている
*******************************************************************
ISA Server がログを格納する処理に失敗した場合に、既定では Microsoft Firewall サービスを停止させるように設定されています。
動作 ログ(ファイアウォール ログおよび Web プロキシ ログ) は、アクセス解析等に重要なものであるためです。設定画面は下記です。

・動作 ログの格納先が SQL Server 2005 以降である
*******************************************************************
ISA Server では、動作 ログの保存先に SQL Server を指定することが出来ます。設定画面は下記です。

SQL Server 2005 から格納するデータ検証機能が強化されたため、このデータ検証機能により適切ではないと判断された場合には、データの格納を SQL Server が拒否します。
その結果として ISA Server はログ書き込みに失敗したことを検知し、既定の設定に基づき Microsoft Firewall サービスを停止させ、通信が遮断されます。
もし、Microsoft Firewall サービスの異常停止時に、下記のようなアプリケーション ログが記録された場合には、本現象に該当する可能性があります。

アプリケーション ログの抜粋
----------------------
****/**/** 14:40:16 Microsoft Firewall 情報 なし 14182 N/A ****** Firewall サービスが停止しました。
****/**/** 14:40:16 Microsoft ISA Server Web Proxy エラー ログ 21204 N/A ****** ISA Server Web フィルタ は SQL データベース ISALOG_DB に情報のログを記録できませんでした。
SQL エラーの説明: リンク サーバー '(null)' の OLE DB プロバイダ 'STREAM' から、列 '[!BulkInsert].uri' に無効なデータが返されました。.
----------------------

本現象に該当する可能性が高い場合は、下記何れかの対処策をご検討ください。

対処策 1 - SQL Server 2005 データ検証設定を変更する
*******************************************************************
SQL Server 2005 の起動パラメータを変更し、データ検証機能を無効に設定します。
ただし、本設定を指定した場合でも、データが適切でない場合でもそのまま SQL Server 2005 に格納するのではなく、極力訂正してから格納しようとします。
本変更は SQL Server 2005 全体に影響が及ぶため、もし SQL Server を ISA Server 以外のアプリケーションも利用する場合には、、その影響についてご確認下さい。

設定方法
==========================
1. 「SQL Server Configuration Manager」を起動します。
2. 対象の SQL Server インスタンスで右クリックし [プロパティ] を実行し [詳細設定] タブを表示します。
3. 一覧中の [起動時のパラメータ] の下矢印ボタンをクリックします。
4. 現在の設定内容が表示されますので、この最後に ";-T4808"(ダブルクォートを除く)を追加します。
5. [Enter] キーを押下して入力を終えます(テキストボックスが閉じます)。
6. [OK] ボタンを押下します。
7. SQL Server 再起動まで変更が反映されない旨メッセージが表示されますが、 [OK] ボタンを押下します。
8. 対象の SQL Server インスタンスで右クリックし [再起動] を実行します。

解除方法
==========================
9. 上記 1 から 3 を実行します。
10. 追加した ";-T4808"(ダブルクォートを除く)を削除します。
11. 上記 5 ~ 8 を実行します。

※なお、SQL Server 2008 の場合は、データ検証機能を無効にすることができないため、後述する対処策 2 のみ有効です。

対処策 2 - ISA Server の警告定義の設定を変更する。
*******************************************************************
ISA Server には既定でいくつかの "警告定義" が構成されており、ログの書き込みに失敗した場合にはサービスを停止するよう定義されています。
この定義を変更することで、ログ書き込みの失敗時にサービスを停止させないことが可能となります。

==========================
1. ISA Server 管理画面を起動します。
2. 画面左側より [監視] をクリックします。
3. 画面中央の [警告] タブをクリックします。
4. 画面右側の [タスク] タブをクリックし、[警告定義の構成] をクリックします。
5. [警告のプロパティ] が開きます。[ログ エラー] をクリックして [編集] ボタンをクリックします。
6. [動作] タブをクリックし [指定されたサービスを停止する] の左にあるチェックを無効にします。
7. [OK] ボタンをクリックしてプロパティ画面を閉じます。
8. 管理画面上の [適用] ボタンをクリックして、設定を反映させます。

以上になります。