この章では、ETLのトラブルシューティングおよびOracle Warehouse Builderのエラー・ログについて説明します。また、DMLエラーのロギングなど、ETLのエラー処理方法についても説明します。
この章の内容は次のとおりです。
Oracle Warehouse Builderを使用する間、設計者はログ・ファイルにアクセスして様々な種類のエラーについて調査する必要があります。この項では、Oracle Warehouse Builderでログに記録されるすべてのタイプのエラー・メッセージについて概略を示し、そのアクセス方法について説明します。
Oracle Warehouse Builderでは、各種操作を実行する場合、次のようなエラーが記録されます。
この項では、Oracle Warehouse Builderで各種操作を実行した後にエラー・ログを取得する方法を示します。
Oracle Warehouse Builderでは、プロジェクト・ナビゲータからオブジェクトを選択し、次に「ファイル」メニューから「検証」を選択することにより、すべてのオブジェクトを検証できます。検証が完了すると、「ログ」ウィンドウに検証メッセージが表示されます。
図15-1に、「メッセージ・ログ」ウィンドウの新しいタブの検証メッセージを示します。
また、「マッピング」を選択し、次に「検証」を選択すると、マッピング・エディタからマッピングを検証できます。「検証結果」ウィンドウに検証メッセージおよびエラーが表示されます。
検証結果では、オブジェクト名を表示するノード、検証ノードの順に開きます。検証エラーがある場合は、表示されます。検証メッセージをダブルクリックすると、「メッセージ・エディタ」ウィンドウ内にエラー・メッセージの詳細が表示されます。
Oracle Warehouse Builderでは、各検証済オブジェクトに対する最新の検証メッセージが保存されます。プロジェクト・ナビゲータ内のコンソール・ツリーからオブジェクトを選択し、メニュー・バーから「表示」を選択し、次に「検証メッセージ」をクリックすることによりこれらのメッセージにいつでもアクセスできます。「検証結果」ウィンドウにメッセージが表示されます。
Oracle Warehouse Builderのオブジェクト用のスクリプトを生成した後、「ログ」ウィンドウに生成結果およびエラーが表示されます。「ログ」ウィンドウのエラー・メッセージをダブルクリックすると、メッセージ・エディタが表示され、ローカル・システムにエラーを保存できます。
図15-2に「生成結果」ウィンドウを表示します。
実行またはデプロイメントンエラーおよび警告メッセージのログをローカル・システム上の指定した場所に保存できます。プロジェクト・ナビゲータで、プロジェクトを選択します。「ツール」メニューから「プリファレンス」を選択します。「プリファレンス」ダイアログ・ボックスの左側にあるオブジェクト・ツリーで、「Oracle Warehouse Builder」ノードを展開し、「ロギング」オプションをクリックします。右側に表示されるプロパティを使用して、ログ・ファイルのパス、ファイル名および最大ファイル・サイズを設定します。保存するログのタイプを選択することもできます。
メニュー・バーから「表示」を選択し、次に「ログ」を選択することにより、Oracle Warehouse Builderコンソールからデプロイメント・メッセージおよびエラー・メッセージのログを参照できます。この「メッセージ・ログ」パネルは読取り専用です。
ランタイム監査ブラウザ
データの転送またはロード中にエラーが発生した場合、監査ルーチンは、ランタイム表にエラーを報告します。ランタイム監査ブラウザを使用して、これらのエラー・レポートに簡単にアクセスできます。ランタイム監査ブラウザは、過去のデプロイメントおよび実行に関する詳細情報を提供します。これらのレポートはランタイム・リポジトリ内に格納されたデータから生成されます。実行レポートの「実行」タブをクリックしてエラー・メッセージおよび監査詳細を表示します。
マッピングのデプロイ時にエラーが発生した場合は、エラー・メッセージで指定された行番号を使用して、エラーの発生箇所を特定します。生成済コードにはマッピングの各演算子のコメントが含まれています。これにより、マッピング内のどの演算子がエラーを発生させているかを特定できます。
次の例に、セット・ベース・モードで生成されたフィルタ演算子用のコードを表示します。/*および*/で囲まれているコメントは、文の特定の部分を実行する演算子を示します。
INSERT INTO "FLTR_TGT" ("CHANNEL_ID", "CHANNEL_DESC") (SELECT /*+ NO_MERGE */ /* CHANNELS.INOUTGRP1, FILTER.INOUTGRP1 */ "CHANNELS"."CHANNEL_ID" "CHANNEL_ID", "CHANNELS"."CHANNEL_DESC" "CHANNEL_DESC" FROM "SH"."CHANNELS"@"ORA11@SH_SRC_LOCATION" "CHANNELS" WHERE ( "CHANNELS"."CHANNEL_ID" < 5/* OPERATOR FILTER: FILTER CONDITION */ ) ) ;
Oracle Warehouse Builderで提供されるName and Addressのクレンジング・サービスを使用する場合は、それに関連したエラーが表示されることがあります。
Name and Addressサーバーの起動および実行エラーは、次の場所に保存されます。
OWB_HOME
/owb/bin/admin/NASvr.log
Name and Addressサーバーが次の場所で有効になっている場合、
OWB_HOME
/owb/bin/admin/NameAddr.properties:TraceLevel=1
,
ログ・ファイルNASvrTrace.log
が同じディレクトリに生成されます。
エラー・ロギングにより、文の実行中にエラーが発生してもDML文の処理を続行できます。エラー・コードおよび関連するエラー・メッセージなどのエラーの詳細は、エラー表に格納されています。DML操作が完了すると、エラー表をチェックして、エラーのある行を修正できます。DMLエラー・ロギングは、INSERT
、UPDATE
、MERGE
などのSQL文および複数表挿入に対応しています。これは、長時間かかるバルクDML文を実行する場合に有効です。
Oracle Warehouse Builderでは、セット・ベースのPL/SQLマッピングで使用するデータ・オブジェクトである表、ビュー、マテリアライズド・ビュー、ディメンションおよびキューブに対してエラー・ロギングを実行できます。DMLエラー・ロギングは、Oracle Database 10g リリース2以降で作成されたターゲット・スキーマのみに対応しています。
DMLエラー表には、マッピングを使用してDML操作を実行したときに発生したエラーの詳細が記載されています。表、ビューおよびマテリアライズド・ビューにのみ、エラー表を定義できます。
DMLエラー表名プロパティを使用して、特定のデータ・オブジェクトのDMLエラーを記録します。データ・オブジェクトをターゲットとして使用するマッピングでは、ターゲット・オブジェクトにバインドされている演算子の「DMLエラー表名」プロパティを、DMLエラーが格納されるDMLエラー表の名前に設定します。
DMLエラーを格納する独自の表を作成したり、Oracle Warehouse BuilderによりDMLエラー表を生成できます。ターゲット演算子に「DMLエラー表名」プロパティが設定されているマッピングをデプロイするときに、「DMLエラー表名」プロパティで指定した名前を持つ表がターゲット・スキーマにまだない場合は、作成されます。
DMLエラー表がマッピングとともに作成される場合は、マッピングの削除によりDMLエラー表も削除されます。
ソース・ターゲット・オブジェクト列に加えて、DMLエラー表には表15-1に示す列が含まれています。DMLエラーのログに独自の表を使用している場合、表にこれらの列が含まれていることを確認します。
DMLエラー・ロギングがセット・ベースのPL/SQLマッピングに生成されるとき、次の条件を満たしています。
表、ビュー、マテリアライズド・ビュー、ディメンションまたはキューブをロードするマッピングでは、ターゲット・オブジェクトを表す演算子に対してDMLエラー表名プロパティが設定されます。
マッピングを含むモジュールの「PL/SQL生成モード」構成パラメータは、「Oracle10g」、Oracle Database 11gまたは「デフォルト」に設定されます。
その値が「デフォルト」に設定されている場合、このモジュールに関連付けられているロケーションのVersionプロパティが「10.2」、「11.1」または「11.2」に設定されています。
DMLエラー・ロギングが有効なデータ・オブジェクトが含まれるマッピングの実行は、次のいずれかの条件で失敗します。
生成されたエラーの数が、指定したマッピングのエラーの最大数を超えています。
マッピングのエラー最大数のデフォルト・セットは50です。マッピングのエラーの構成パラメータの最大数を設定して、この値を変更できます。プロジェクト・ナビゲータで、マッピングを右クリックして「構成」を選択します。エラー構成パラメータの最大数で、マッピングの実行が終了する前に生成される可能性のあるエラーの最大数を指定します。
サポートされていない機能があると、エラーが発生します。
「DMLエラー・ロギングの制限」を参照してください。
DMLエラー表を切り捨て、以前のロード中に生成されたエラーの詳細を削除できます。これは、エラー表の維持管理に便利です。マッピングが実行される前に、エラー表を切り捨てるには、DMLエラー・ロギングが有効なデータ・オブジェクトにバインドされている演算子の「エラー表の切り捨て」プロパティを選択します。
プロパティ「ロールアップ・エラー」および「このプロパティからのエラーのみを選択」は、DMLエラー・ロギングには使用されません。
DMLエラー・ロギングは、非スカラー・データ型ではサポートされません。
各DML文には特定の制限があります。これは、その文に関連するマニュアルに記載されています。
関連項目: 各DML文のDMLエラー・ロギングの制限については、Oracle Database SQL言語リファレンスを参照してください。 |
データ・オブジェクトに定義したDMLエラー表がある場合、コントロール・センター・マネージャの「アップグレード」オプションを使用してデータ・オブジェクトをアップグレードすることはできません。
エラー・ロギングの必要性に応じて、マッピングに表演算子を構成し、APPENDまたはNOAPPENDヒントを使用できます。たとえば、ダイレクト・パス・インサートは、一意キー違反のエラー・ロギングには対応していません。一意キー違反を記録するには、NOAPPENDヒントを使用します。
この項では、ETLの実行中に発生するエラーのトラブルシューティングのヒントを説明します。
PL/SQL OracleターゲットCTを含むハイブリッド・マッピングの実行時に次のエラーが発生する場合があります。
ORA-04063: package body "DEMO.ORACLE_SQL_POWER_MTI" has errors
これは、マッピングを実装するために生成されたPL/SQLパッケージであるORACLE_SQL_POWER_MTI
にコンパイル・エラーがあることを示しています。
このエラーの原因を特定するには、SQL*Plusを起動して、ターゲット・ユーザーとして接続し、次のコマンドを実行します。
ALTER PACKAGE ORACLE_SQL_POWER_MTI COMPILE BODY; SHOW ERRORS;
たとえば、ソース表またはビューに対する権限がターゲット・ユーザーに付与されていない場合は、表が見つからないというエラーが発生する可能性があります。すべてのエラーを解決して、パッケージを再コンパイルし、ハイブリッド・マッピングを実行します。
エージェント・ログ・ファイルを使用すると、コード・テンプレート・マッピングのデプロイメント・エラーおよび実行エラーをデバッグできます。Windowsでは、デザイン・センター・コンソールにエージェント・ログが表示されます。
次は、UNIXのエージェント・ログです。
OWB_HOME
/owb/bin/admin
にあるjrt.log
ファイルには、エージェント・プロセスおよび監査設定エラーからの出力が格納されます。
コード・テンプレート・マッピングの実行ログは、OWB_HOME
/owb/jrt/log/owb
フォルダに保存されます。それぞれのジョブ実行は、ジョブ実行の監査証跡を使用してXMLログ・ファイルを含む別のディレクトリで表されます。
コントロール・センター・エージェントの起動時に次のエラーが発生する場合があります。
Error initializing server: Application: system is in failed state as initialization failed.
このエラーを解決するには、フォルダOWB_HOME
/owb/jrt/applications
のサブディレクトリをすべて削除してからコントロール・センター・エージェントを起動します。
セキュアなWebサイトからWebサービスを実行するときに、次のエラーが発生する場合があります。
SSLエラー: 要求されたターゲットへの有効な認証パスが見つかりません。
このエラーを解消するには、次の手順を実行します。
OC4JサーバーからSSLチャンネルに使用する証明書をエクスポートします。これは、$J2EE_HOME
/config
ディレクトリにあります。
$JAVA_HOME
/bin/keytool
-export -storepass welcome -file server.cer -keystore OWB_HOME
.owb/jrt/config/serverkeystore.jks
server.cerは証明書のエクスポート先となるファイル、serverkeystore.jksはOracle Warehouse Builderの組込みOC4Jサーバーで使用されるキーストアです。Oracle Warehouse Builderの組込みサーバー以外のOC4Jインスタンスを使用する場合、serverkeystore.jksは、OC4JでSSLを設定したときに作成したキーストア・ファイルです。
手順1でエクスポートしたserver.cerを、OC4Jサーバー側の$JAVA_HOME
/jre/lib/security
ディレクトリにコピーします。
OC4Jサーバー側のjava信頼済認証ストアに証明書をインポートします。
$JAVA_HOME
/bin/keytool -import -v -trustcacerts -file
$JAVA_HOME
/jre/lib/security/
server.cer
-keystore
$JAVA_HOME
/jre/lib/security/
cacerts
ここで、cacerts
は信頼できる証明書の格納に使用するファイルで、server.cer
は手順2でコピーしたファイルです。
cacerts
のパスワードの入力を求められます。
ターゲット・スキーマへのマッピングのデプロイ時に、次のエラーが発生する場合があります。
REP-01012: Cannot deploy PL/SQL maps to the target schema because it is not owned by the Control Center
原因
このエラーは、他のコントロール・センターを使用して以前オブジェクトをデプロイしたターゲット・スキーマにマッピングをデプロイしようとする場合に発生します。
ターゲット・スキーマに関連付けることができるのは1つのコントロール・センターのみです。このターゲット・スキーマへのデプロイメントに関する監査データはコントロール・センター・リポジトリの監査表に書き込まれます。コントロール・センターでは、監査データの書き込み先のコントロール・センターに関する情報を提供するターゲット・スキーマに様々なオブジェクト(主にシノニム)を作成します。他のコントロール・センターを使用して同一のターゲット・スキーマにマッピングをデプロイしようとする場合、REP-01012エラーが発生します。
注意: ローカル・コントロール・センターを使用して、表、ビュー、ディメンションなどのデータ・オブジェクトをリモート・ターゲットにデプロイできます。これは、Oracle Warehouse Builderがこれらのオブジェクトの監査情報を管理しないためです。 |
ただし、Oracle Warehouse Builderでは、1つのターゲット・スキーマに複数のマッピングをデプロイできます。
通常、デプロイメントのためにコントロール・センターを使用する場合、ターゲット・スキーマを含むデータベースにインストールされているコントロール・センターを使用してターゲット・スキーマにマッピングをデプロイします。ターゲット・スキーマを含むデータベース以外のデータベースにインストールされているコントロール・センターを使用してターゲット・スキーマにマッピングをデプロイできます。ロケーション・ナビゲータで、ターゲット・スキーマを含むリモート・ホストにインストールされるコントロール・センターを指し示すコントロール・センターを作成します。このため、リモート・コントロール・センターにマッピングをデプロイできます。
解決策
元のコントロール・センターを使用してターゲット・スキーマにデプロイされたマッピングを削除します。
元のコントロール・センターからロケーションの登録を解除します。
ターゲット・スキーマとターゲット・スキーマのコントロール・センターとの間の関連付けを提供するシノニムを削除します。
新しいコントロール・センターを使用してロケーションを登録します。
新しいコントロール・センターを使用してマッピングをデプロイします。
ロケーションを削除する前に、次の操作を実行します。
他のロケーションを使用するロケーションを使用するすべてのモジュールを再構成します。
モジュールを編集して、モジュールの可能性のあるデータ・ロケーションのセットからロケーションを削除します。
ロケーションを登録解除します。
OWBSYS
ユーザーとしてログインし、次の問合せを実行して、ロケーションがコントロール・センターにまだ関連付けられているかどうかを判定します。
SELECT s.name owner, r.name referenced, c.name connector, c.REGISTERED, c.STRONGTYPENAME FROM cmplogicalconnector_v c, cmplocation_v s, cmplocation_v r WHERE c.owninglocation = s.elementid AND c.referencedlocation = r.elementid;