Oracle AD Online Patching(adop)でよくあるエラーとその解決方法
本記事は、Tricoreが2017年8月14日に公開した記事をもとにしています。
Oracle E-Business Suite(EBS)のパッチ適用に使用されるOracle® AD Online Patching(adop)ユーティリティでは、運用中にさまざまなトラブルが発生することがあります。この記事では、特によく見られる以下の5つの問題とその解決方法を解説します。
- データディクショナリ破損エラー
- adop prepareフェーズの失敗
- Formsオブジェクト生成の失敗
- adop cutoverフェーズのハングアップ
- パッチサイクルの中断(abort)
1. データディクショナリ破損エラー
このエラーは、adop prepareフェーズが失敗した際に発生することがあります。
エラー内容
表示されるエラーメッセージは環境によって異なる場合があります。以下は出力例です。
[EVENT] Verifying data dictionary.
[UNEXPECTED]Data dictionary corrupted:
[UNEXPECTED]Data dictionary corruption - missing parent
5608975 ORA$BASE IMAT V_WORKFLOWWORKITEMII VIEW
5608973 ORA$BASE IMAT V_WFSTAGETIME VIEW
5608973 ORA$BASE IMAT V_WFSTAGETIME VIEW
[UNEXPECTED]Data dictionary corruption detected. Provide details to
[UNEXPECTED]Oracle Support and ask for a bug to be opened against the
[UNEXPECTED]Online Patching component of Oracle Application Install.
/apps1/SID/fs_ne/EBSapps/log/adop/18/adop_xxxxx_xxxxx.log:
原因
この問題は、開発者がオンラインパッチングの標準規約に違反する形でカスタマイズを不適切に反映させた場合に発生します。
解決方法
データディクショナリの破損(missing parent)を修復するには、以下の手順を実行します。
appsユーザーとして$AD_TOP/sql/ADZDDBCC.sqlスクリプトを実行し、論理的なデータディクショナリ破損が存在するかどうかを確認します。スプールログに出力される内容で破損の有無をチェックしてください。sysユーザーとして$AD_TOP/patch/115/sql/adzddmpfix.sqlスクリプトを実行し、破損を修復します。以下の実行例では、12個の破損オブジェクトが修復されています。SQL> @adzddmpfix.sql "---- Fixing Data Dictionary Corruptions (missing parent) ----" 12 rows deleted. Commit complete. System altered. "---- Compiling invalids ----" PL/SQL procedure successfully completed. Commit complete.- 再び
appsユーザーとして$AD_TOP/sql/ADZDDBCC.sqlスクリプトを実行し、破損が残っていないか確認します。
a. 破損が検出されなければ、アップグレードまたはadopパッチサイクルを続行します。
b. 破損が依然として存在する場合は、Oracleサポートに連絡してバグ登録を依頼してください。 - 問題が解決したら、adop prepareフェーズを再実行します。
2. adop prepareフェーズの失敗
adop prepareフェーズは、ときどき失敗することがあります。ここでは、代表的なprepareエラーとその解決方法を紹介します。
エラー内容
以下のadop prepareエラーは、Oracleのバグに起因するものです。
Lines #(47-50):
runMSSrvPortsVal : oacore_server1:7252
ERROR: Run fs Context variable s_oacore_server_ports value cannot be NULL for oacore_server2
ERROR: Derived Patch managed server oacore_server2 port : NULL
ERROR: Failed to clone Run Context file to refresh Patch context file
解決方法
このエラーを解消するには、以下の手順を実行します。
- 次のコード例内のサーバー名・SID・ポート番号を、実際にエラーメッセージで報告された値やパスに置き換えて実行し、問題を修正します。
perl $AD_TOP/patch/115/bin/adProvisionEBS.pl \ ebs-delete-managedserver \ -contextfile=/apps1/SID/fs1/inst/apps/SID_server/appl/admin/SID_server.xml -managedsrvname=oacore_server2 \ -servicetype=oacore -logfile=$APPLRGF/TXK/delMS_oacore_server2.log perl $FND_TOP/patch/115/bin/txkSetAppsConf.pl -contextfile=/apps1/SID/fs1/inst/apps/SID_server/appl/admin/SID_server.xml \ -configoption=removeMS -oacore=server.cm.charter.com:7252 - 修正を適用した後、adop prepareを再実行します。
3. Formsオブジェクト生成の失敗
adop phase=apply patches=123456のようにパッチを適用する際、Formsオブジェクトが正常に生成されず、Patch continue prompt Y/N(続行確認プロンプト)が表示されないままadopセッションが終了してしまうことがあります。
エラー内容
たとえば、以下のOracle Formsオブジェクトの生成に失敗したケースがあります。
inv forms/US INVMWBIV.fmx
解決方法
失敗したパッチセッションは、パッチディレクトリから以下のコマンドで再開できます。
cd /apps1/SID/fs_ne/EBSapps/patch
adop phase=apply patches=20609071 restart=yes flags=autoskip
4. adop cutoverフェーズのハングアップ
adop cutoverフェーズがハングアップしたり、cutover処理の途中でサーバーがクラッシュ・再起動した場合は、以下の手順で復旧させてからパッチ処理を続行します。
解決方法
- PATCHファイルシステム上で稼働しているサービスやプロセスがないことを確認します。
- Runファイルシステム上でWebLogic管理サーバーとNode Managerが起動していることを確認します。以下のコマンドで状態をチェックできます。
$ adadminsrvctl.sh status $ adnodemgrctl.sh status - 以下のコマンドを順に実行します。
$ adop phase=abort $ adop phase=cleanup cleanup_mode=full $ adop phase=fs_clone force=yes - 空のadopサイクルを実行し、cutoverフェーズに問題がないことを確認します。
$adop phase=prepare, finalize, cutover, cleanup cleanup_mode=full - 新たにadop prepareを開始し、パッチを適用します。
- applyフェーズ完了後、finalize、cutover、cleanupを含む残りのadopフェーズをすべて完了させます。
5. パッチサイクルの中断(abort)
パッチサイクルが失敗し、すぐに問題を解決できない場合は、パッチサイクルを中断(abort)して通常のランタイム運用に戻すことができます。この操作により、パッチエディションは削除されます。
パッチを一切適用せずにパッチサイクルを放棄するには、以下のコマンドを実行します。
$ adop phase=abort
重要: このコマンドを使用できるのは、cutoverフェーズが正常に完了する前のみです。cutover後はシステムが新しいエディションで稼働しているため、そのパッチサイクルに対してabortコマンドを実行することはできません。
パッチサイクルを中断するとパッチエディションは削除されますが、新しいパッチサイクルを開始する前に、cleanupとfs_cloneフェーズを実行する必要があります。cleanupは必ずフルクリーンアップ(cleanup_mode=full)で実行してください。以下に一連の手順の例を示します。
$ adop phase=prepare
$ adop phase=apply patches=123456
[パッチ適用中に問題が発生し、中断したい場合]
$ adop phase=abort
$ adop phase=cleanup cleanup_mode=full
$ adop phase=fs_clone
必要に応じて、abortとcleanupのコマンドを以下のように組み合わせることも可能です。
$ adop phase=abort,cleanup cleanup_mode=full
注意: ホットパッチモード(adop phase=apply apply_mode=hotpatch)で適用したパッチは中断できません。
まとめ
本記事で紹介したadopユーティリティの既知の問題と解決策は、データベース管理者が同じようなトラブルに直面した際のトラブルシューティングの参考になるでしょう。
ご意見やご質問がある場合は、フィードバックタブからお知らせください。
-
OracleのSQLプロファイルとSQLプラン・ベースラインの違いと活用方法
本記事では、Oracle®におけるSQLプロファイルとSQLプラン・ベースラインの違いを解説し、クエリチューニング時にそれぞれがどのように機能するのかを詳しく説明します。オプティマイザ、プロファイル、ベースラインの関係これら3つの要素は、大まかに以下のように連携して動作します。クエリオプティマイザは、システム統計、バインド変数、コンパイル情報などを基に、クエリ実行に最適なプランを導き出します。しかし、入力情報に不備があると、必ずしも最適とは言えないプランを選択してしまうことがあります。SQLプロファイルには、こうした問題を緩和するための補助情報が含まれています。これによりオプティマイザの判断ミ
-
よくあるExcelの数式エラーの種類と直し方を徹底解説
小規模ビジネスなどで日々Excelを使っていると、作業中に突然エラーコードが表示されて戸惑うことがあります。原因はデータ側にあることもあれば、数式そのものの誤りであることもあり、さまざまです。この記事では、Microsoft 365ユーザー向けに、代表的なExcelのエラー表示の意味と、それぞれの直し方をわかりやすく解説します。 そもそもエラーを出さないための基本ルール まずは、エラーを未然に防ぐためのポイントを確認しておきましょう。 数式は必ず「=」(イコール)で始める 掛け算には「x」ではなく半角の「*」(アスタリスク)を使う 括弧()の開きと閉じの対応に注意する 数式内で文字列を扱う