Oracle:トラブルシューティング
レシピの設計中にエラーが発生することがあります。 このページでは、データベースに関連する一般的なエラーについて説明します。 さらにヘルプが必要な場合は、トラブルシューティングセクションを確認してください。次のトラブルシューティング手順でエラーを解決できない場合は、カスタマーサポートにお問い合わせください。
レシピ設計時エラー
タイムアウト
Workatoでは、実行に時間がかかりすぎる場合にジョブとアクションにタイムアウトを適用します。 データベースを操作する場合、クエリやストアドプロシージャの応答に時間がかかりすぎる場合があるため、これはよく発生する可能性があります。 この場合は、次の対応を検討してください。
アクションのタイムアウト(特定の1つのステップがタイムアウト)
- 返される行数をさらに制限する
- データベースにインデックスを導入する
- カスタムSQLクエリを最適化する(不要な結合を削除するなど)
ジョブのタイムアウト(レシピの1回の実行全体がタイムアウト)
- レシピを分離し、レシピ関数を使用してワークフローを結合する
- レシピを呼び出す際に非同期呼び出しを使用する
- 不要なアクションを削除する
既存のデータベースに接続できない
データベースへの接続を試みたときにデータベースコネクションがエラーを返す場合、考えられる理由は次のとおりです。
- オンプレミスエージェント(オンプレミスエージェントを使用している場合)が非アクティブで、再起動が必要です。
- データベースの認証情報が変更されています。 サポートが必要な場合は、データベース管理者にお問い合わせください。
- データベースサーバーが、Workatoまたは当社のOPAがインストールされているサーバーからのネットワークリクエストを受け入れていません。 Workatoまたは当社のOPAへのアクセスを許可するように、ネットワークアクセス制御を設定します。
エラー:Oracleメタデータの読み込み時にSomething went wrong
Workatoでは、行を選択などのOracleアクションを開く、または設定するときにSomething went wrongエラーが表示される場合があります。 これは、WorkatoがOracleから使用可能なテーブルや列などのメタデータを読み込もうとしたものの、Oracleデータベースが新しいコネクションを受け入れていないため接続できない場合に発生します。
OPAログに次のメッセージが表示される場合があります。
oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12516, TNS:listener could not find available handler with matching protocol stack問題を解決するには、次の手順を実行します。
Oracle設定でプロセスとセッションの制限を増やすようにデータベース管理者に依頼してください。
listener.oraファイルを確認し、ハンドラーが適切に設定されていることを確認します。
Oracleリスナーサービスを再起動して、使用可能なハンドラーを再初期化します。
Oracleデータベースへの同時コネクション数を減らすか、コネクションの再利用を最適化します。
ロジックエラー
無限ループ
Workatoでは、レシピ内のアクションが同じレシピを再度トリガーすると、無限ループが発生する可能性があります。 これはデータベースに限ったことではありません。 無限ループを検出して解決する方法をいくつか紹介します。 テーブルの新しい行でトリガーされ、同じテーブルに行を挿入するレシピを作成する場合、つまり既存のデータに対してデータエンリッチメントやデータ変換を実行する場合に、無限ループの発生を防ぐ方法をいくつか示します。
- Workatoで処理済みかどうかを示す列をテーブルに作成すること(詳細は無限ループに関するドキュメントを参照)
- 未処理の生データと変換済みデータ用に別々のテーブルを作成する
同じレコードの複数のコピー
挿入アクションを使用している場合、エラーが発生しても行の挿入アクションステップが完了しているジョブ実行では、ジョブを再実行したときに行が再挿入されます。 これにより、同じレコードの複数のコピーが挿入される可能性があります。 既存のレコードを最初に検索し、見つかった場合は更新し、見つからない場合は新しいレコードを挿入できるupsertアクションの使用を検討してください。 さまざまなユースケースと、それぞれをどのような場合に使用するかについては、ベストプラクティスを参照してください。
欠落している値または無効な値
Oracleでは、CONSTRAINTSを使用してテーブルに挿入する前に新しいデータを検証し、データの整合性を確保できます。 データに対する制約は、テーブルの作成時または変更時にOracle自体で定義でき、データの整合性が維持されるようにするために使用されます。 レシピの設計時に、これらの制約に気づかない場合があります。 たとえば、UNIQUE制約がある列は、実際のジョブが実行されるまで保証できません。 レシピの実行時に、これらの制約に違反するとエラーが発生します。 次のスクリーンショットは、CHECK制約があるフィールドに入力が指定されていない場合のジョブエラーを示しています。 エラーメッセージでは、チェック制約と制約名(この場合はROOT.SYS_C008445)が強調表示され、データベース内で検索できます。

値が欠落している場合に考えられる理由と修正方法を次に示します。
- 主キー列が自動インクリメントされていません。 列を、挿入のたびに自動インクリメントされるID列に変更する
- 列に
unique制約があり、重複する値が拒否されます。 新しいレコードを挿入する代わりに、upsertアクションを使用してレコードを更新することを検討してください。 - レシピの実行時に入力されたデータピルが
NULL値を返しました。 これがNOT NULL制約のある列に挿入されると、エラーがスローされました。 詳細はこちら。必要に応じて、NULL値の論理チェックを追加し、デフォルト値を渡すことを検討してください。 これはWorkatoのFormulaモードで実現できます。
Last updated: