一般的な Notification Services の問題の解決

ここでは、Notification Services に関してユーザーが遭遇する問題点とその解決策について説明します。

ms172473.note(ja-jp,SQL.90).gif重要 :
Notification Services アプリケーションのトラブルシューティングを行うには、最初に Windows イベント ビューアのアプリケーション ログに移動します。多くの場合、アプリケーション ログのイベントは、アプリケーションに関する問題の原因の特定に最も役立ちます。

配置と管理のトラブルシューティング

タイムアウト エラーが原因でインスタンスの作成に失敗する

Notification Services インスタンスを作成するプロセスでは、いくつかのタスクが実行されますが、各タスクには時間制限があります。データベースの作成処理は、他の操作に比べて時間がかかる傾向があります。この操作の時間制限は 10 分で、通常必要な時間よりも長く設定されています。ただし、インスタンスの構成またはアプリケーションの定義に、非常に大きなデータベース サイズ (数 GB) が指定されている場合は、作成処理がタイムアウトになる可能性があります。その場合、タイムアウト メッセージが表示されます。

このようなインスタンスを正常に作成するには、ADF と構成ファイルでデータベース ファイルのサイズを小さくしてからインスタンスを作成する必要があります。その後で、SQL Server Management Studio または Transact-SQL のステートメントを使用してデータベース ファイルのサイズを大きくすることができます。

トランザクション ログがいっぱいになったためにインスタンスの作成に失敗する

いっぱいになったログ、またはほぼいっぱいのログを追加した場合、Notification Services のインスタンスの作成に失敗することがあります。トランザクション ログの sizemaxsize の値を大きくしてからやり直してください。

インスタンスの更新に失敗する

Notification Services インスタンスの更新は、アプリケーション定義またはインスタンス構成のエラーが原因で失敗する可能性があります。インスタンスを更新する前に、すべての XML ファイルを確認して、このようなエラーが発生する可能性を削減する必要があります。エラーが発生した場合、ファイルを修正し、更新を再試行します。

インスタンスを更新するとインスタンス データベースとアプリケーション データベースが変更されるため、インスタンスを更新する場合は、必ず事前にインスタンス データベースとアプリケーション データベースをバックアップします。

インスタンスの更新の詳細については、「インスタンス プロパティの更新」を参照してください。アプリケーションの更新の詳細については、「アプリケーションの更新」を参照してください。

Windows サービスが開始されない

NS$instanceName Windows サービスを使用して Notification Services エンジン コンポーネントを実行しており、その Windows サービスが開始されない場合は、サービス パスワードが間違っている、開始しようとしているインスタンス名が Notification Services インスタンス名に完全には一致していない、データベースにアクセスできない状態になっている、サービスを実行するように構成した Windows ユーザー アカウントにサービスとしてログオンする権限がない、のいずれかの状態である可能性があります。問題を解決するには、以下のことを試みてください。

  • **サービス アカウントが Windows の SQLServer2005NotificationServicesUser$**ComputerName **グループのメンバであることを確認します。**SQLServer2005NotificationServicesUser$ComputerName グループのメンバには、NSService.exe などの Notification Services バイナリ ファイルに対する読み取り/実行権限があります。
  • Windows パスワードをリセットします。 Notification Services コマンドを使用してサービス パスワードを設定し、そのパスワードに特殊文字が使用されている場合、またはそのパスワードが間違って入力された場合、NS$instanceName サービスは開始されません。
    このエラーを解決するには、[サービス] アプリケーションを使ってパスワードを更新します。
    1. [コントロール パネル] の [管理ツール] を開きます。
    2. [サービス] を開きます。
    3. [NS$instanceName] サービス (instanceName は Notification Services インスタンスの名前を表します) を右クリックし、[プロパティ] をクリックします。
    4. [ログオン] タブで、[パスワード][パスワードの確認] ボックスにパスワードを入力します。 [OK] をクリックします。
    5. そのサービスを右クリックし、[開始] をクリックします。
  • **データベースを確認します。**サービスがインスタンス データベースとアプリケーション データベースにアクセスできない場合は、そのサービスは開始されません。
    • インスタンス レジストリのデータベース名は正しいですか。
    • インスタンス データベースとアプリケーション データベースをホストするデータベース エンジン インスタンスは実行されていますか。
    • インスタンス データベースとアプリケーション データベースは利用できますか。
    • サービスがデータベースにアクセスするのを妨げるようなネットワークの問題はありますか。
  • [サービス] アプリケーションからサービスを開始します。net start コマンドを使用してサービスを開始する場合は、コマンド プロンプトで使用された文字が、構成ファイルで使用された Unicode 文字と一致する必要があります。文字が一致しない場合は、インスタンスを開始できません。
    このエラーを解決するには、Microsoft Windows の [サービス] アプリケーションを使ってサービスを開始します。
    1. [コントロール パネル] の [管理ツール] を開きます。
    2. [サービス] を開きます。
    3. [NS$instanceName] サービスを右クリックし、[開始] をクリックします。

エラーがアプリケーション ログに書き込まれない

Notification Services エンジンが起動されず、アプリケーション ログにその原因を示すエラーが存在しない場合は、アプリケーション ログがいっぱいになっている可能性があります。アプリケーション ログを再構成するには、以下の手順を実行します。

  1. [コントロール パネル] の [管理ツール] を開きます。
  2. [イベント ビューア] を開きます。
  3. [アプリケーション] を右クリックし、[プロパティ] をクリックします。
  4. 以下のいずれかまたは両方の手順を実行します。
    • [最大ログ サイズ] の値を大きくします。
    • [必要に応じてイベントを上書きする] をクリックします。

アプリケーション ログに予期しないエラーが表示される

アプリケーション ログに予期しないエラーが発生した場合は、Notification Services エンジンを再起動してください。

たとえば、Windows サービスの実行中にインスタンスからアプリケーションを削除すると、削除したアプリケーションに関するエラーがイベント ログに表示される場合は、その Windows サービスを再開することによりエラーが表示されなくなります。

詳細については、「Notification Services インスタンスの開始と停止」を参照してください。

イベント収集のトラブルシューティング

アプリケーションにイベントを送信できない

イベント コレクションのトラブルシューティングを行うには、次の点を確認します。

  • ホストされるイベント プロバイダを使用する場合は、イベント プロバイダを実行する Notification Services エンジンが実行されていることを確認します。
  • イベント コレクションが有効であることを確認します。nscontrol status コマンドを実行することにより、インスタンスのコンポーネントの状態をすばやく表示できます。イベントが "無効" または "有効化中" になっている場合は、イベントを送信することはできません。
    状態の表示の詳細については、「インスタンス、アプリケーション、およびコンポーネントの状態表示」を参照してください。
    コンポーネントの有効化および無効化の詳細については、「インスタンス、アプリケーション、またはコンポーネントの有効化および無効化」を参照してください。
  • イベント プロバイダを実行するために使用されたアカウントが、インスタンス データベースとアプリケーション データベースに NSEventProvider 権限を持っていることを確認します。

ファイル システム監視イベント プロバイダが失敗する

サーバーのパフォーマンス カウンタが壊れると、ファイル システム監視イベント プロバイダが失敗することがあります。イベント ログに次のエラーが記録されている場合、パフォーマンス カウンタが壊れています。

イベント ID: 2980

パフォーマンス カウンタが壊れていると、カウンタは値を返しません。この破損を解決するには、以下の手順を実行します。

  1. インスタンスを実行している場合は、インスタンスを停止します。詳細については、「Notification Services インスタンスの開始と停止」を参照してください。
  2. システム モニタなど、Notification Services パフォーマンス カウンタにクエリするアプリケーションをすべて終了します。
  3. インスタンスを再登録します。詳細については、「レジストリ情報の更新」を参照してください。

この結果、そのインスタンスのパフォーマンス カウンタが再作成されます。この手順は、複数回実行することが必要になる場合があります。

通知の生成および配信のトラブルシューティング

通知が重複して生成される

サブスクライバが重複した通知を受け取っている場合は、どのようにイベントの収集および使用を行っているのかを確認します。

  • 通知クラスに基づいて名前が指定されたビューに通知生成ルールがアクセスする必要がある場合は、それらの通知生成ルールが通知テーブルに直接アクセスしていないことを確認します。無効データ削除処理を介して削除されなかったイベントはすべて通知テーブルに保持されていますが、このビューは現在のイベント セットのみを返します。
    たとえば、イベント クラスの名前が StockEvent である場合は、サブスクリプション ルールでは、NSStockEventEvents テーブルではなく、StockEvent ビューを使用します。
  • イベント記録や外部テーブルなどの別のソースからイベントを取得している場合は、通知の作成に使用するデータのみを選択するロジックを、クエリに含める必要があります。たとえば、過去 24 時間の間に送信されたイベント、または列に特定の値を持つイベントを含めることができます。サブスクリプション ルールに含まれるステートメントは、イベント ソース内の値を変更できるため、イベントの使用状況を追跡できます。
  • 同じイベント データを複数回送信していないことを確認します。

サブスクリプション ルールの作成の詳細については、「サブスクリプション ルールの定義」を参照してください。

通知が生成または配信されない

アプリケーションから通知が送信されない場合は、以下の項目を確認します。

  • ジェネレータ コンポーネントを実行する Notification Services エンジンは実行されていますか。有効になっていますか。
  • 利用可能なイベントはありますか。
    インスタンス データベース内にある NSDiagnosticEventClass ストアド プロシージャを実行します。EventBatchesCollectedCount 列を調べて、予定どおりにイベントが到着したかどうかを確認します。
  • サブスクリプションは存在しますか。
    アプリケーションに評価の対象となるサブスクリプションが存在するかどうかを確認するには、アプリケーション データベース内にある NSSubscriptionClassNameView ビューを使用します。
  • 定期的なサブスクリプションは正しくスケジュールされていますか。
    サブスクリプションの詳細を表示するには、アプリケーション データベース内にある NSSubscriptionClassNameView ビューを使用するか、アプリケーション データベース内にある NSScheduledSubscriptionList ストアド プロシージャと NSScheduledSubscriptionDetails ストアド プロシージャを実行します。
  • 通知で参照されているサブスクライバ デバイスは存在しますか。
    サブスクリプション ルールで、サブスクライバ ID とサブスクライバ デバイス名を指定する必要があります。サブスクライバ デバイス名は、サブスクライバに対して定義されたサブスクライバ デバイスの名前に一致している必要があります。サブスクライバ デバイスを表示するには、インスタンス データベース内にある NSSubscriberDeviceView を使用します。
  • ルールはタイムアウトしていますか。
    通知を生成するサブスクリプション ルールがタイムアウトしている場合、アプリケーションは通知を生成しません。ルールが効率的であること、イベント データとサブスクリプション データに適切なインデックスを定義したこと、古いデータを削除するために無効データ削除が実行されていること、およびサーバー上で実行されている他のプロセスによってルールがブロックされていないことを確認します。サブスクリプション ルールの開発の詳細については、「サブスクリプション ルールの定義」を参照してください。
  • 通知は生成されていますか。
    通知が生成されていることを確認するには、インスタンス データベース内にある NSDiagnosticNotificationClass ストアド プロシージャを実行します。通知が生成される予定の間隔の NotificationsGenerated 列を調べます。通知が存在しない場合は、イベントまたはサブスクリプションが存在しないか、サブスクリプション クラス一致ルールが通知クラス関数に通知をまったく挿入しない可能性があります。ルールの詳細については、「サブスクリプション ルールの定義」を参照してください。
  • 通知は失敗していますか。
    通知が失敗したかどうかを確認するには、NSDiagnosticFailedNotifications ストアド プロシージャを実行します。
  • 通知は正しい配信チャネルに移動していますか。
    アプリケーションが通知クラスに対して正しいプロトコルを定義していること、およびアプリケーションに追加されたサブスクリプションが正しい配信チャネルを使用していることを確認します。
  • 配信チャネルは機能していますか。
    配信チャネルが機能するかどうかを確認するには、NSDiagnosticDeliveryChannel レポートを実行します。
  • ディストリビュータは有効ですか。
    コンポーネントの有効化および無効化の詳細については、「インスタンス、アプリケーション、またはコンポーネントの有効化および無効化」を参照してください。

一般的な配信エラーが発生する

一部の配信エラーは、実際は構成エラーの可能性があります。たとえば、SMTP 配信チャネルを正しく構成していない場合に、Notification Services がこの配信チャネルを使って通知の配信を試みると、次のようなメッセージを受け取ることがあります。

SMTP 配信通知一般エラー

同様のエラーが何度か発生する場合は、配信チャネルが正しく構成されていることを確認します。詳細については、「配信チャネルの定義」を参照してください。

SMTP 配信が失敗する

インターネット インフォメーション サービス (IIS) SMTP プロトコルとローカル IIS SMTP サービスを使用しているときは、Notification Services は通知の配信先を判断するために IIS ディレクトリを調べる必要があります。この情報にアクセスできるのは管理者だけです。

ローカル IIS SMTP サービスを使用するには、ディストリビュータ エンジン コンポーネントを実行するために使用されたアカウントがローカルの Administrators グループのメンバである必要があります。

ディストリビュータがタイムアウトする

イベント ログにさまざまなタイムアウト エラーが記録される場合は、ディストリビュータのログ記録レベルが高すぎる可能性があります。通常、データベース システムが大量の通知を処理しており、配信タスクとログ記録タスクの両方を処理できないときに、この現象が発生します。

この問題を解決するには、ログ記録をオフに設定します。詳細については、「配信プロトコルの実行設定の指定」を参照してください。

Vacuumer のトラブルシューティング

データが削除されず、大きなイベント テーブルと通知テーブルが生成される

アプリケーション データベースからデータが正常に削除されない場合は、以下の項目を確認します。

  • アプリケーション定義に、無効データ削除スケジュールが指定されていますか。詳細については、「データ削除の構成」を参照してください。
  • 妥当な保有期間を指定しましたか (保有期間が長くなるほど、テーブルに蓄積されるデータが増加します)。
  • システムの利用が少ない期間中に、無効データ削除を実行していますか。利用が多い期間の場合は、効率的にデータを削除するために十分なシステム リソースが、無効データ削除に割り当てられません。
    開始時刻は UTC 値であることに注意してください。たとえば、開始時刻として値 02:00:00 を指定した場合は、グリニッジ標準時の午前 2 時になります。使用しているタイム ゾーンで時刻を午前 2 時に指定するには、使用しているタイム ゾーンとグリニッジ標準時の間の差分を加算または減算します。たとえば、太平洋標準時は、グリニッジ標準時の 8 時間遅れです。太平洋標準時の午前 2 時に無効データ削除を実行するには、開始時刻を 10:00:00 に指定します。
  • 無効データ削除期間は十分ですか。データのボリュームに応じて、より長い期間にわたって無効データ削除の実行が必要になる場合があります。

無効データ削除のパフォーマンスを評価するには、以下のリソースを使用します。

  • NSSnapshotApplications ストアド プロシージャを実行して、無効データ削除が最後に実行された時刻、および削除されたイベントと通知の数を確認します。詳細については、「NSSnapshotApplications (Transact-SQL)」を参照してください。
  • Windows パフォーマンスを使用して NS$instanceName: Vacuumer パフォーマンス オブジェクトを監視します。詳細については、「NS$instance_name: Vacuumer オブジェクト」を参照してください。

Web アプリケーションのトラブルシューティング

サブスクリプション管理アプリケーションが Notification Services インスタンスにアクセスできない

サブスクリプション管理アプリケーションは、インスタンス データベースとアプリケーション データベースの検索、およびこれらのデータベースへのアクセスを実行できる必要があります。このためには、アプリケーションが実行されるサーバー上でインスタンスを登録し、アプリケーションが使用するアカウントをインスタンス データベースとアプリケーション データベース内の NSSubscriberAdmin ロールに追加する必要があります。詳細については、「サブスクリプション管理インターフェイスの配置」を参照してください。

参照

処理手順

Notification Services に関してよく寄せられる質問
Notification Services イベント ログ記録の構成
イベント メッセージの使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手