SQL Remote の SQL エラーの効果的な処理

本書に含まれる情報は、レプリケーション・システムにおける SQL エラーの診断を合理化するのに役立ちます。

レプリケーション環境の SQL エラーは、セットアップの一部として設計する必要があります。SQL Remote には SQL 文におけるエラーの追跡を支援するオプションがありますが、このオプションは、そのようなエラーを解決することを目的としていません。REPLICATION_ERROR オプションを設定すると、SQL エラーの発生時に Message Agent によって呼び出されるストアド・プロシージャを指定できます。デフォルトでは、どのプロシージャも呼び出されません。

プロシージャを実装するためには、プロシージャを作成し、そのプロシージャによって取り出される情報を格納するテーブルを作成して、REPLICATION_ERROR オプションを設定する必要があります。

1. ストアド・プロシージャを作成します。

プロシージャは、CHAR 型、VARCHAR 型、または LONG VARCHAR 型の引数を 1 つ備えている必要があります。プロシージャは、SQL エラー・メッセージで 1 回呼び出され、そのエラーの原因の SQL 文でも 1 回呼び出されます。

以下の文では、サンプルの RepError プロシージャが作成されます。

CREATE PROCEDURE sp_RepError (IN in_error LONG VARCHAR)
BEGIN
INSERT INTO RepError (error_msg) VALUES (in_error);
END;

2. RepError プロシージャからの情報を格納するテーブルを作成します。

以下の文では、RepError テーブルが作成されます。

CREATE TABLE RepError (
pkey BIGINT DEFAULT AUTOINCREMENT PRIMARY KEY,
time_of_error TIMESTAMP DEFAULT CURRENT TIMESTAMP,
rem_user CHAR(128) DEFAULT CURRENT REMOTE USER,
error_msg LONG VARCHAR
);

3. REPLICATION_ERROR データベース・オプションを設定します。

SET OPTION public.REPLICATION_ERROR = ‘sp_RepError';

このプロシージャの実装後には、SELECT * FROM RepError を実行して、レプリケーション時に SQL エラーが発生したかどうかを調べることができます。これにより、SQL エラーを見つけるために dbremote 出力ログをすべて調べる必要もなくなります。また、特定のリモート・ユーザからのエラー、特定の時間からのエラー、または特定のエラーを容易に探すこともできます。

RepError プロシージャは SQL エラーしかレポートしないので注意してください。失われたメッセージや破損したメッセージなどの他の配信エラーはレポートしません。それでも、 RepError が他のツールでは気付かない可能性がある設計上の問題を認識するための有用なツールであることには変わりありません。

SQL Remote 出力ログ (-o オプションを使って生成されたログ) を自動的に検索したい場合は、iAnywhere Solutions の Manage Anywhere Studio を使用してその操作を実行できます。