Tag Archives: fix

Google forms and regular expressions for response validation

I was kind of shocked with the proliferation of teachers now using Google Classroom to conduct classes, that the documentation for the Quiz sections of the Classwork assignments is quite insufficient (or presumes you’re an IT geek like me, and can just figure out what programming is available to you.)

The example situation is given by this Blog entry related to Google Classroom and students’ answers being marked Incorrect because on Short Text responses, every answer is matched as a “literal” string – that is, upper and lowercase letters MATTER (a lot!)

Link to:
Student’s answers were marked wrongly in a short answer quiz by Google Forms.

https://support.google.com/edu/classroom/thread/39155344

The odd thing is while Google provided a solution for simple e-mail address validation, and various numerical responses, it’s been horrible at dealing with text answers.

The answer is in the 3rd category of Response Validation: Regular Expressions. RegEx’s are commonly used in programming languages and OS shells (like Linux, Unix, HPUX, etc.) since when scripting various commands, we often need to parse parameters and do things with various input like file directory listings, and long lists of things separated by some arbitrary character (like a comma or a vertical bar character.)

Thus here in my example, dealing with a student who was marked with Incorrect answers simply because they didn’t provide the exact case required by the 3 answer versions entered by the instructor (e.g. “Any Dog”, “any dog”, “ANY DOG”) – and the student typed “Any dog” and got it marked Incorrect.

One more typical way to prevent this is specifying in the Quiz preamble the exact format responses you want as an instructor for the short answers. For example, “Please enter all short answers in lowercase letters only, with no leading or trailing space or tab characters.”

But a more practical way is exercising that Regular Expression engine that’s built into Google Forms.

My example question wanting a response from the student like “inner core” (preferably providing a graphic picture of the planet’s layers and just labeling them A/B/C/D/E would have been simpler, but maybe I’m testing vocabulary at this point.)

Selecting the Response Validation type “Regular expression” and using “Matches” the pattern: “^[A-Z]” is interepreted as meaning, “if the Short answer text contains any uppercase letters from A to Z” then display the warning text “Please use all lowercase answers only!” – and do not accept the answer, as submitted.

Regular Expressions can get really complicated, but if you think of them as basically describing what’s in a string of text and matching it as either TRUE or FALSE (and preferably keeping your Answer expectations limited unless you happen to be teaching a course in OS-level scripting, in which case, go ahead and get as complicated as you’d like…) I think you’ll find your student’s will be gently guided into providing the answers in the form you were thinking of when you prepared the Quiz.

And isn’t that what this was all about in the first place?

Here’s a link to a more thorough (and lengthy, and complicated) discussion of the power of Google Forms using Regular Expressions:

Advertisement

R12.2 eBusiness Suite EBS – During ADOP phase = prepare data dictionary corruption missing parent

Adop-PrepareDuring an online patching session with ADOP, when the prepare phase checks the data dictionary integrity, you receive the following error:

R12.2 eBusiness Suite EBS – During ADOP phase = prepare data dictionary corruption missing parent:
Verifying data dictionary.
[UNEXPECTED]Data dictionary corrupted:
[UNEXPECTED]Data dictionary corruption – missing parent
1416131 ORA$BASE APPS BPA_GUIDED_PICKING SYNONYM
1416121 ORA$BASE APPS CO_CLIPPERSHIP_INTERFACE SYNONYM
1416132 ORA$BASE APPS BPA_PRINT_GUIDED_PICK_LABELS SYNONYM
1416128 ORA$BASE APPS GEM_ESIG_INQUIRY_CORE SYNONYM
[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.

[STATEMENT] Please run adopscanlog utility, using the command

“adopscanlog -latest=yes”

Issue:

The corruption is detected with the $AD_TOP/sql/ADZDDBCC.sql scriptis executed just prior to setting up the ADOP session.  This is also a mandatory check performed during pre-upgrade readiness checking for R12.2 upgrades.

Solution:

There is a rudimentary, but effective script supplied in $AD_TOP/patch/115/sql named adzddmpfix.sql (and a number of other adzd___ named scripts that address other data dictionary issues, such as the common TimeZone timestamp issues (Doc ID 2017686.1))

This script is run as SYS and requires all middle-tier services to be shutdown because it’s rebuilding all of the APPS synonyms for objects and recompiling afterwards.

sqlplus “/ as sysdba” @$AD_TOP/patch/115/sql/adzddmpfix.sql

REM $Header: adzddmpfix.sql 120.0.12020000.3 2015/09/14 10:10:32 sstomar noship$
REM dbdrv: none
REM +======================================================================+
REM | Copyright (c) 2005, 2015 Oracle and/or its affiliates. |
REM | All rights reserved. |
REM | Version 12.0.0 |
REM +======================================================================+
REM | FILENAME
REM | adzddmpfix.sql
REM |
REM | DESCRIPTION
REM | Warning: this script is an experimental workaround to the Oracle
REM | Database data Dictionary “missing parent” corruption described in
REM | Bug 20627866. This bug currently has no other known fix, but this
REM | script will repair the problem sufficiently to allow adop to continue
REM | executing.
REM |
REM | Warning: You must be connected as SYSDBA with application services
REM | shutdown to run this script
REM | Usage:
REM | sqlplus / as sysdba
REM | @adzddmpfix.sql
REM |
REM |
REM +=======================================================================+

Sample output:

SQL> @adzddmpfix.sql
“—- Fixing Data Dictionary Corruptions (missing parent) —-”

4 rows deleted.

Commit complete.

System altered.

“—- Compiling invalids —-”

Don’t forget to re-run the $AD_TOP/sql/ADZDDBCC.sql script to identify whether the data dictionary corruption is still present afterwards.

 

How To Get Those Customizations to Work Correctly with Oracle EBS R12.2 Editioning (EBR)

Oracle e-Business Suite R12.2 Overview of Edition-Based Redefinition (EBR) in 11gR2 databases.
Oracle e-Business Suite R12.2 Overview of Edition-Based Redefinition (EBR) in 11gR2 databases.

Scenario:
Creating a new view based upon the AP.AP_SUPPLIERS table to reside in a new XXCUSTOMSCHEMA.

If you attempt the simple:

create or replace force view XXCUSTOMSCHEMA.AP_SUPPLIER_NEW_V
as
SELECT *
FROM ap.ap_suppliers ;

It works, but your data and table definition may change whenever patching editions are in-play.

If you attempt to just reference the editioned object instead:

create or replace force view XXCUSTOMSCHEMA.AP_SUPPLIER_NEW_V
as
SELECT *
FROM ap.ap_suppliers# /* or the preferred apps.ap_suppliers synonym */

You will receive the ominous ORA-38818: illegal reference to editioned object error message.

What’s missing? The XXCUSTOMSCHEMA isn’t recognized as an edition-friendly schema by Oracle’s e-Business Suite (nor the database), yet.

Create your XXCUSTOMSCHEMA in the usual way:

create user XXCUSTOMSCHEMA
identified by (password)
default tablespace USERS
temporary tablepace TEMP
profile DEFAULT
account UNLOCK;

/* as APPS user */

exec FND_ORACLE_USER_PKG.LOAD_ROW(‘XXCUSTOMSCHEMA’, ‘CUSTOM’, ‘INVALID’, NULL, ‘N’, ‘B’);

/* as SYSTEM user */

alter session set current_schema=APPS;
exec AD_ZD_PREP.ENABLE_CUSTOM_USER(‘XXCUSTOMSCHEMA’);

/* Create your SELECT grants to the editioned objects as APPS user */

grant select on ap.ap_suppliers#  to XXCUSTOMSCHEMA;

/* OR if you’re running newer than 12.2.5…the editioning security will cause hundreds of invalid editioned object stubs that need re-compilation unless you instead use */

exec AD_ZD.grant_privs(‘SELECT’, ‘AP_SUPPLIERS’, ‘XXCUSTOMSCHEMA’,X_GRANT_TO_TABLE=>TRUE)

PL/SQL procedure successfully completed.

SQL> exec AD_ZD.revoke_privs(‘SELECT’,’AP_SUPPLIERS’,’XXCUSTOMSCHEMA’);

/* Create your custom view referencing the APPS synonym – which points to the editioned object */

create or replace force view XXCUSTOMSCHEMA.AP_SUPPLIER_NEW_V
as
SELECT *
FROM apps.ap_suppliers ;

This is the same process when creating procedures and functions with the usual caveat that unless it’s a 12c database, you cannot create materialized views on the editioned objects.

For the 11gR2 EBS users, you would stick with the existing non-editioned table object reference:

CREATE MATERIALIZED VIEW APPS.XXAP_SUPPLIER_NEW_MV
(
vendor_id,
vendor_name
)
AS
SELECT aps.vendor_id, aps.vendor_name
FROM ap.ap_suppliers aps;

/* The owning schema for the materialized view must have CREATE TABLE, VIEW AND INDEX privileges on the destination tablespace */

New OEM 12c/13c Agent Install Won’t Keep Running – Dies After Awhile

Many agents - Copyright by Warner Bros.,The Wachowski Brothers used without permission as educational content.
Agents are often hard to kill, usually. Images Copyright by Warner Bros., The Wachowski Brothers; used without permission as educational content.

OEM agents tend to occupy memory based upon how many targets they have to keep track of in a particular host.  At another organization, we tended to spin up VM’s for each instance environment, so at maximum, a particular agent might have a few hundred targets (especially on an e-Business Suite Applications Tier.)  In those circumstances, the default Java memory settings are probably fine.

In this environment, we run our hosts to death, and on this particular proof-of-concept host, we have 43 instances running on it, with variants of 10g, 11g, and 12c databases combined.

We are doing a fresh install of OEM 12.1.0.5.0 for our POC before setting up the 13c production OMS, and after deploying the agent to this particular database host, the agent would startup fine, run for about 20 or so minutes and then abruptly die without warning.

Re-starts fine, passes the usual tests fine (before the 20 minutes or so goes by) and then dies again.

AGENT_INST=/u01/app/oracle/agent12c/agent_inst

cd $AGENT_INST/bin

./emctl status agent

Oracle Enterprise Manager Cloud Control 12c Release 5
Copyright (c) 1996, 2015 Oracle Corporation.  All rights reserved.
—————————————————————
Agent Version          : 12.1.0.5.0
OMS Version            : 12.1.0.5.0
Protocol Version       : 12.1.0.1.0
Agent Home             : /u01/app/oracle/agent12c/agent_inst
Agent Log Directory    : /u01/app/oracle/agent12c/agent_inst/sysman/log
Agent Binaries         : /u01/app/oracle/agent12c/core/12.1.0.5.0
Agent Process ID       : 10598
Parent Process ID      : 10499
Agent URL              : https://itsrv33c.mydomain:3872/emd/main/
Local Agent URL in NAT : https://itsrv33c.mydomain:3872/emd/main/
Repository URL         : https://itsrv35g.mydomain:1159/empbs/upload
Started at             : 2016-11-09 09:57:05
Started by user        : oracle
Operating System       : HP-UX version B.11.31 (IA64W)
Last Reload            : (none)
Last successful upload                       : 2016-11-09 10:19:26
Last attempted upload                        : 2016-11-09 10:19:26
Total Megabytes of XML files uploaded so far : 0.2
Number of XML files pending upload           : 0
Size of XML files pending upload(MB)         : 0
Available disk space on upload filesystem    : 16.92%
Collection Status                            : Collections enabled
Heartbeat Status                             : Ok
Last attempted heartbeat to OMS              : 2016-11-09 10:19:53
Last successful heartbeat to OMS             : 2016-11-09 10:19:53
Next scheduled heartbeat to OMS              : 2016-11-09 10:20:53

—————————————————————
Agent is Running and Ready

./emctl pingOMS

Oracle Enterprise Manager Cloud Control 12c Release 5
Copyright (c) 1996, 2015 Oracle Corporation.  All rights reserved.
—————————————————————
EMD pingOMS completed successfully

$AGENT_INST/sysman/log/gcagent.log contains

—– Wed Nov  9 09:39:43 2016::26900::Agent Launched with PID 27336 at time Wed
Nov  9 09:39:43 2016 —–
—– Wed Nov  9 09:39:43 2016::27336::Time elapsed between Launch of Watchdog p
rocess and execing EMAgent is 34 secs —–
2016-11-09 09:39:44,287 [1:main] WARN – Missing filename for log handler ‘wsm’
2016-11-09 09:39:44,302 [1:main] WARN – Missing filename for log handler ‘opss’
2016-11-09 09:39:44,305 [1:main] WARN – Missing filename for log handler ‘opsscf
g’
Agent is going down due to an OutOfMemoryError
—– Wed Nov  9 09:40:06 2016::26900::Checking status of EMAgent : 27336 —–
—– Wed Nov  9 09:40:06 2016::26900::EMAgent exited at Wed Nov  9 09:40:06 201
6 with return value 57. —–
—– Wed Nov  9 09:40:06 2016::26900::EMAgent will be restarted because of an O
ut of Memory Exception. —–
—– Wed Nov  9 09:40:06 2016::26900::writeAbnormalExitTimestampToAgntStmp: exi
tCause=OOM : restartRequired=1 —–
—– Wed Nov  9 09:40:06 2016::26900::Restarting EMAgent. —–

That means, the agent is starting, then stopping, then restarting, then stopping (aka “thrashing”)

Take a look for the running agent daemon at the OS level:

ps -ef | grep agent12c
oracle 26900     1  0 09:39:09 pts/0     0:00 /u01/app/oracle/agent12c/core/12.1.0.5.0/perl/bin/perl /u01/app/oracle/agent12c/core/12.1.0.5.0/bin/emwd.pl agent /u01/app/oracle/…
oracle 27665 26900  0 09:40:12 pts/0     1:01 /u01/app/oracle/agent12c/core/12.1.0.5.0/jdk/bin/IA64W/java -Xmx169M -XX:MaxPermSize=96M -server -Djava.security.egd=file:///de…

Oh – it’s set up for the default of 169MB of RAM.  Check My Oracle Support.

EM 12c: emctl start agent Fails ‘Fatal agent error: State Manager failed at Startup’ ‘restarted because of an Out of Memory Exception’ Reported in emagent.nohup /gcagent.log (Doc ID 1950490.1)

Verify this setting also in the $AGENT_INST/sysman/log/gcagent.log:

—– Wed Nov  9 09:40:06 2016::26900::Auto tuning the agent at time Wed Nov  9
09:40:06 2016 —–
inMemoryLoggingSize=6291456
_SchedulePersistTimer=30
MaxThreads=10
agentJavaDefines=-Xmx169M -XX:MaxPermSize=96M
SchedulerRandomSpreadMins=5
UploadMaxNumberXML=5000
UploadMaxMegaBytesXML=50.0
Auto tuning was successful

Well, it’s trying. Per the above Doc ID 1950490.1

Stop the agent.

$AGENT_INST/bin/emctl stop agent

Edit the $AGENT_INST/sysman/config/emd.properties   (this contains the runtime parameters for the agent):

old entry:
agentJavaDefines=-Xmx169M -XX:MaxPermSize=96M

new entry:
agentJavaDefines=-Xmx512M -XX:MaxPermSize=96M

(You may tune these values up or down according to your environment requirements)

Restart the agent:

$AGENT_INST/bin/emctl stop agent

Agent runs, and keeps running like the E-Bunny.

R12.2 adop phase fs_clone fails because it can’t copy a file.

Complexity leading to fragility
Complex Systems Integration (Courtesy of: https://www.mulesoft.com/resources/esb/business-process-integration)

Oracle…sometimes blinding in complexity, and a foreshadowing of what happens when a system becomes so complex that it becomes fragile.

This is what the screen session looks like:

adnodemgrctl.sh: check the logfile /u01/oradev/fs1/inst/apps/DEV2_itsrv33m/logs/appl/admin/log/adnodemgrctl.txt for more information …
[UNEXPECTED]fs_clone has failed.
[STATEMENT] Please run adopscanlog utility, using the command
“adopscanlog -latest=yes”
to get the list of the log files along with snippet of the error message corresponding to each log file.
adop exiting with status = 2 (Fail)

Here is what it looks like in the adop.log

[EVENT]     Performing CLONE steps.
[PROCEDURE] [START 2016/11/08 08:20:19] CLONE Patch File System from Run File System
[PROCEDURE] Calling: /u01/oradev/fs2/EBSapps/appl/ad/12.0.0/patch/115/bin/txkADOPPreparePhaseSynchronize.pl
[EVENT]     Log: /u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m
[UNEXPECTED]Error occurred running “perl /u01/oradev/fs2/EBSapps/appl/ad/12.0.0/patch/115/bin/txkADOPPreparePhaseSynchronize.pl -contextfile=/u01/oradev/fs2/inst/apps/DEV2_itsrv33m/appl/admin/DEV2_itsrv33m.xml -patchcontextfile=/u01/oradev/fs1/inst/apps/DEV2_itsrv33m/appl/admin/DEV2_itsrv33m.xml -promptmsg=hide -console=off -mode=create -sync_mode=copy -sessionid=25 -timestamp=20161108_081645 -outdir=/u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m”
[UNEXPECTED]occurred during CLONE Patch File System from Run File System, running command: “perl /u01/oradev/fs2/EBSapps/appl/ad/12.0.0/patch/115/bin/txkADOPPreparePhaseSynchronize.pl -contextfile=/u01/oradev/fs2/inst/apps/DEV2_itsrv33m/appl/admin/DEV2_itsrv33m.xml -patchcontextfile=/u01/oradev/fs1/inst/apps/DEV2_itsrv33m/appl/admin/DEV2_itsrv33m.xml -promptmsg=hide -console=off -mode=create -sync_mode=copy -sessionid=25 -timestamp=20161108_081645 -outdir=/u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m”.
[EVENT]     Releasing managed server ports.
[PROCEDURE] [START 2016/11/08 08:30:55] Releasing ports
[STATEMENT] Calling task: “Releasing ports on itsrv33m”; script: “/u01/oradev/fs2/inst/apps/DEV2_itsrv33m/admin/install/txkCloneAcquirePort.pl”; args: ” -option=close -server=itsrv33m.mwd.h2o -ports=5570,7015,7615,7415,7215,7216,7217,7815,6114,6214,10013 -log=/u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/txkCloneAcquirePort.log”
[PROCEDURE] [START 2016/11/08 08:30:56] Releasing ports on itsrv33m
[PROCEDURE] Calling: /u01/oradev/fs2/inst/apps/DEV2_itsrv33m/admin/install/txkCloneAcquirePort.pl
[EVENT]     Log: /u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/txkCloneAcquirePort.log
[PROCEDURE] [END   2016/11/08 08:30:57] Releasing ports on itsrv33m
[PROCEDURE] [END   2016/11/08 08:30:57] Releasing ports

How cryptic!  Looks complicated.  This system happens to have AD/TXK.Delta.8, so the logs related to adop are all being centralized under the session # (in this case “25”.)

Diving deep into the log subdirectories:

/u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/TXK_SYNC_create/txkADOPPreparePhaseSynchronize.log

================================
Inside copyComnUtil()…
================================

Directory /u01/oradev/fs1/EBSapps/comn already exists.
Removing the directory: /u01/oradev/fs1/EBSapps/comn/util

Copying the directory
———————
SOURCE : /u01/oradev/fs2/EBSapps/comn/util
TARGET : /u01/oradev/fs1/EBSapps/comn/util

Execute SYSTEM command : cp -rH  /u01/oradev/fs2/EBSapps/comn/util /u01/oradev/fs1/EBSapps/comn/util
EXIT STATUS: 1
Copied /u01/oradev/fs2/EBSapps/comn/util into /u01/oradev/fs1/EBSapps/comn/utilLOG FILE: /u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/TXK_SYNC_create/cp_rH.out

<snip>
======================================
Inside copyCloneLogsToFSNE()…
======================================

Creating the directory: /u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/TXK_SYNC_create/fsclone_apply

Copying the directory
———————
SOURCE : /u01/oradev/fs2/inst/apps/DEV2_itsrv33m/admin/log/clone
TARGET : /u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/TXK_SYNC_create/fsclone_apply

/u01/oradev/fs2/EBSapps/comn/adopclone_itsrv33m/bin/adclone.pl did not go through successfully.
LOG DIRECTORY: /u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/TXK_SYNC_create/fsclone_apply.
*******FATAL ERROR*******
PROGRAM : (/u01/oradev/fs2/EBSapps/appl/ad/12.0.0/patch/115/bin/txkADOPPreparePhaseSynchronize.pl)
TIME    : Tue Nov  8 08:30:55 2016
FUNCTION: main::runFSCloneApply [ Level 1 ]
ERRORMSG: /u01/oradev/fs2/EBSapps/comn/adopclone_itsrv33m/bin/adclone.pl did not go through successfully.

/u01/oradev/fs_ne/EBSapps/log/adop/25/20161108_081645/fs_clone/itsrv33m/TXK_SYNC_create/fsclone_apply/FSCloneApplyAppsTier_11080821.log

(One innocuous, but annoying file, owned by someone other than applmgr, and happened to be 600 (user read/write only):)

Done copying /u01/oradev/fs2/EBSapps/appl/wms to /u01/oradev/fs1/EBSapps/appl/wms/
Copying /u01/oradev/fs2/EBSapps/appl/gmf to /u01/oradev/fs1/EBSapps/appl/gmf/
WARNING:
.end std out.
cp: cannot open /u01/oradev/fs2/EBSapps/appl/mwd/12.0.0/sql/MWDPOLPO.xsl: Permission denied

.end err out.
WARNING: Copying of /u01/oradev/fs2/EBSapps/appl/mwd failed
ERROR: Copying failed, so stopping all the parallel threads
Done copying /u01/oradev/fs2/EBSapps/appl/okc to /u01/oradev/fs1/EBSapps/appl/okc/
WARNING: Copying of /u01/oradev/fs2/EBSapps/appl/okc failed
Done copying /u01/oradev/fs2/EBSapps/comn/java/classes/oracle/apps/pqh to /u01/oradev/fs1/EBSapps/comn/java/classes/oracle/apps/pqh/
WARNING: Copying of /u01/oradev/fs2/EBSapps/comn/java/classes/oracle/apps/pqh failed
Done copying /u01/oradev/fs2/EBSapps/appl/gmf to /u01/oradev/fs1/EBSapps/appl/gmf/
WARNING: Copying of /u01/oradev/fs2/EBSapps/appl/gmf failed
Done copying /u01/oradev/fs2/EBSapps/comn/java/classes/oracle/apps/ies to /u01/oradev/fs1/EBSapps/comn/java/classes/oracle/apps/ies/
WARNING: Copying of /u01/oradev/fs2/EBSapps/comn/java/classes/oracle/apps/ies failed
Done copying /u01/oradev/fs2/EBSapps/appl/msc to /u01/oradev/fs1/EBSapps/appl/msc/
WARNING: Copying of /u01/oradev/fs2/EBSapps/appl/msc failed
Done copying /u01/oradev/fs2/EBSapps/appl/ams to /u01/oradev/fs1/EBSapps/appl/ams/
WARNING: Copying of /u01/oradev/fs2/EBSapps/appl/ams failed
Done copying /u01/oradev/fs2/EBSapps/appl/cs to /u01/oradev/fs1/EBSapps/appl/cs/
WARNING: Copying of /u01/oradev/fs2/EBSapps/appl/cs failed
START: Inside exitClone….
Updating status INCOMPLETE for ApplyApplTop
START: Updating status INCOMPLETE for action ApplyApplTop
END: Updated status INCOMPLETE for action ApplyApplTop

One file.  A single file.  Could have been a hidden file. Could have been anywhere in the entire AppsTier filesystem.  This one file stopped ADOP cold from performing.  This happened to be phase=fs_clone, but could have been a patching session, or a post-clone config (adcfgclone.pl) session.

Remove the file, and:

The fs_clone phase completed successfully.
adop exiting with status = 0 (Success)

Complexity leads to unintentional fragility.

All about R12 Oracle Home Inventories

The inventories are used by the Oracle Universal Installer (ORACLE_HOME)/oui (by reference, rapidwiz installers, too) and opatch utilities.
If they are not correct for the host you are working on, the utilities may abort with all sorts of errors.
The Oracle Universal Installer can also be used to re-create the inventory, or attach a pre-existing Oracle Home.
Formatted in XML syntax, all tags either end on a single line, or have a beginning and end tag associated with each entry.
Learning the actual structure of the file can be useful when dealing with non-Production environments when you’re upgrading and downgrading components, and need to roll-back certain changes, or are experimenting with modifying the filesystem layout. This way, if the inventory has minor errors (such as when the IDX numbers get out-of-sequence due to removed components, or you have to roll-back an OEM Agent upgrade to a plugin), you will have an idea where to correct the file to make your OUI happy again.

Useful references:
Master Note For Cloning Oracle Database Server ORACLE_HOME’s Using the Oracle Universal Installer (OUI) (Doc ID 1154613.1) https://support.oracle.com/epmos/faces/DocContentDisplay?id=1154613.1
How to Create a Clean oraInventory in Release 12 using the ouicli.pl utility (Doc ID 834894.1) – https://support.oracle.com/epmos/faces/DocContentDisplay?id=834894.1R12.0 / R12.1 : How To Create, Update or Rebuild The Central Inventory For Oracle Applications E-Business Suite ? (Doc ID 742477.1) https://support.oracle.com/epmos/faces/DocContentDisplay?id=742477.1

All () references refer to your unique environment’s actual physical filesystem locations – e.g. (ORACLE_BASE) might be /u01/app/oracle on your host.

## Master location files indicating which inventory is being used (can be manually modified to re-point to older legacy homes that are not multi-home aware)

## an 11g and older Middle-tier home locator
$> cat /etc/oraInst.loc
#Oracle Installer Location File Location
#Wed Dec 01 07:15:54 EST 2010
inst_group=oinstall
inventory_loc=(INST_TOP)/admin/oraInventory

## an 11g and older Database-tier home locator
$> cat /etc/oraInst.loc
inventory_loc=(DB_ORACLE_HOME)admin/oui/(ENV_ID)/oraInventory

## a 12c home locator – will be maintained in-parallel with the 11i version for now – multiple entries delimited by colons
$> cat /etc/oragchomelist

(ORACLE_BASE)/core/12.1.0.4.0:(ORACLE_BASE)/agent_inst

## A main R12 Middle-tier inventory, with a 12.1.0.4.0 OEM Agent
## located in (inventory_loc)/ContentsXML/inventory.xml
#Notes:
# REMOVED=”T” – means ignore this during reading of the inventory
# IDX=(n)     – a unique number assigned (preferably sequentially, but not required to be in numerical sequence in the file)
# HOME NAME=  – a unique name (without spaces or special characters) – there are specific naming formats are required by RapidClone for R12 components and should not be changed, the non-R12 labels are less strict.
# Note that the 12c entries begin to include version information for each individual sub-component (REF_HOME_LOC)

$> cat inventory.xml
<?xml version=”1.0″ standalone=”yes” ?>
<!– Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. –>
<!– Do not modify the contents of this file by hand. –>
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>11.1.0.12.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME=”OracleHome3″ LOC=”(ORACLE_BASE)/tech_st/10.1.2″ TYPE=”O” IDX=”4″/>
<HOME NAME=”OracleHome1″ LOC=”(INST_TOP)/ora/10.1.3″ TYPE=”O” IDX=”1″/>
<HOME NAME=”OracleHome2″ LOC=”(ORACLE_BASE)/tech_st/10.1.3″ TYPE=”O” IDX=”2″/>
<HOME NAME=”OH742297619″ LOC=”(ORACLE_BASE)/Middleware/oracle_common” TYPE=”O” IDX=”12″>
<REFHOMELIST>
<REFHOME LOC=”(ORACLE_BASE)/Middleware/as_1″/>
</REFHOMELIST>
</HOME>
<HOME NAME=”OH1912350525″ LOC=”(ORACLE_BASE)/Middleware/as_1″ TYPE=”O” IDX=”13″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/Middleware/oracle_common”/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”agent12c2″ LOC=”(ORACLE_BASE)/core/12.1.0.4.0″ TYPE=”O” IDX=”14″>
<REFHOMELIST>
<REFHOME LOC=”(ORACLE_BASE)/sbin”/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.outl.discovery.plugin_12.1.0.2.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.oet.discovery.plugin_12.1.0.3.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.xa.discovery.plugin_12.1.0.6.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emfa.discovery.plugin_12.1.0.6.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.discovery.plugin_12.1.0.4.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emas.discovery.plugin_12.1.0.6.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emas.agent.plugin_12.1.0.6.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.agent.plugin_12.1.0.4.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.discovery.plugin_12.1.0.7.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.agent.plugin_12.1.0.7.0″/>
</REFHOMELIST>
</HOME>
<HOME NAME=”sbin12c2″ LOC=”(ORACLE_BASE)/sbin” TYPE=”O” IDX=”2″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome4″ LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.outl.discovery.plugin_12.1.0.2.0″ TYPE=”O” IDX=”7″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome1″ LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.oet.discovery.plugin_12.1.0.3.0″ TYPE=”O” IDX=”3″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome2″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.xa.discovery.plugin_12.1.0.6.0″ TYPE=”O” IDX=”4″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome3″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emfa.discovery.plugin_12.1.0.6.0″ TYPE=”O” IDX=”5″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome5″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.discovery.plugin_12.1.0.4.0″ TYPE=”O” IDX=”9″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome6″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emas.discovery.plugin_12.1.0.6.0″ TYPE=”O” IDX=”8″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome11″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emas.agent.plugin_12.1.0.6.0″ TYPE=”O” IDX=”18″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome12″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.agent.plugin_12.1.0.4.0″ TYPE=”O” IDX=”19″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome7″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.discovery.plugin_12.1.0.7.0″ TYPE=”O” IDX=”15″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome8″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.agent.plugin_12.1.0.7.0″ TYPE=”O” IDX=”10″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome4″ LOC=”(ORACLE_BASE)/plugins/oracle.apps.ebs.discovery.plugin_12.1.0.1.0″ TYPE=”O” IDX=”6″ REMOVED=”T”/>
<HOME NAME=”agent12c1″ LOC=”(ORACLE_BASE)/core/12.1.0.3.0″ TYPE=”O” IDX=”1″ REMOVED=”T”/>
<HOME NAME=”OraHome6″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.agent.plugin_12.1.0.3.0″ TYPE=”O” IDX=”11″ REMOVED=”T”/>
<HOME NAME=”OraHome9″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.discovery.plugin_12.1.0.6.0″ TYPE=”O” IDX=”16″ REMOVED=”T”/>
<HOME NAME=”OraHome10″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.agent.plugin_12.1.0.6.0″ TYPE=”O” IDX=”17″ REMOVED=”T”/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>

## The main Database-Tier inventory for an 11g R12 database host, with a 12.1.0.4.0 OEM Agent
## located in (inventory_loc)/ContentsXML/inventory.xml

$> cat inventory.xml
<?xml version=”1.0″ standalone=”yes” ?>
<!– Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. –>
<!– Do not modify the contents of this file by hand. –>
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>11.1.0.12.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME=”(ORACLE_SID)_DB__(ORACLE_SID_LOWERCASE)_db_tech_st_11_2_0″ LOC=”(ORACLE_HOME)” TYPE=”O” IDX=”1″/>
<HOME NAME=”agent12c1″ LOC=”(ORACLE_BASE)/core/12.1.0.4.0″ TYPE=”O” IDX=”2″>
<REFHOMELIST>
<REFHOME LOC=”(ORACLE_BASE)/sbin”/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.xa.discovery.plugin_12.1.0.6.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emfa.discovery.plugin_12.1.0.6.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.apps.ebs.discovery.plugin_12.1.0.4.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.outl.discovery.plugin_12.1.0.2.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.discovery.plugin_12.1.0.7.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.oet.discovery.plugin_12.1.0.3.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emas.discovery.plugin_12.1.0.6.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.discovery.plugin_12.1.0.4.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.agent.plugin_12.1.0.4.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.agent.plugin_12.1.0.7.0″/>
<REFHOME LOC=”(ORACLE_BASE)/plugins/oracle.apps.ebs.agent.plugin_12.1.0.4.0″/>
</REFHOMELIST>
</HOME>
<HOME NAME=”sbin12c1″ LOC=”(ORACLE_BASE)/sbin” TYPE=”O” IDX=”3″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome1″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.xa.discovery.plugin_12.1.0.6.0″ TYPE=”O” IDX=”4″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome2″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emfa.discovery.plugin_12.1.0.6.0″ TYPE=”O” IDX=”5″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome3″ LOC=”(ORACLE_BASE)/plugins/oracle.apps.ebs.discovery.plugin_12.1.0.4.0″ TYPE=”O” IDX=”6″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome4″ LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.outl.discovery.plugin_12.1.0.2.0″ TYPE=”O” IDX=”7″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome6″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.discovery.plugin_12.1.0.7.0″ TYPE=”O” IDX=”13″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome7″ LOC=”(ORACLE_BASE)/plugins/oracle.tugbu.oet.discovery.plugin_12.1.0.3.0″ TYPE=”O” IDX=”9″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome8″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.emas.discovery.plugin_12.1.0.6.0″ TYPE=”O” IDX=”10″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome9″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.discovery.plugin_12.1.0.4.0″ TYPE=”O” IDX=”11″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome10″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.oh.agent.plugin_12.1.0.4.0″ TYPE=”O” IDX=”12″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome11″ LOC=”(ORACLE_BASE)/plugins/oracle.sysman.db.agent.plugin_12.1.0.7.0″ TYPE=”O” IDX=”14″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
<HOME NAME=”OraHome5″ LOC=”(ORACLE_BASE)/plugins/oracle.apps.ebs.agent.plugin_12.1.0.4.0″ TYPE=”O” IDX=”8″>
<DEPHOMELIST>
<DEPHOME LOC=”(ORACLE_BASE)/core/12.1.0.4.0″/>
</DEPHOMELIST>
</HOME>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>

Replace a Yamaha PSR-S900 Keyboard LCD Display

Full  Keyboard
Yamaha PSR-S900 Arranger Keyboard Full-view

I have one of these (Yamaha PSR-S900 Arranger Keyboard Workstation) and after 7 years, the display started going defective – half of the screen was duplicated, lines running through the middle of the display.

Yamaha PSR-S900 LCD Display Going Bad
Yamaha PSR-S900 LCD Display Going Bad (defective)

This renders use of the keyboard relatively impossible (because there is still a composite video out that can be sent to a portable DVD/LCD player, which will still work for the purposes of reading what’s on the display – your patch selections, mixer settings, scoring, sheet music, file selections, etc.)

I hit eBay and found a few replacement display units for about $150 (shipped from China, but made in Japan), and figured it would be worth trying (after all, a new PSR-S950 still runs about $2000.)

The replacement looks like this:

PSR-S900 replacement LCD
Example PSR-S900 replacement LCD image from eBay

There’s a single pair red/white power lead with a small white modular plug used to connect it to the high-voltage power daughterboard. (my plug had one fewer white connections, so I used a modeling knife to trim off the extra middle connector).

PSR-S900 LCD Display - Reverse-side
Example PSR-S900 LCD Display replacement – Reverse-side

The display itself connects via a 10-wire flat ribbon connector that is press-fit into the LCD’s connector. These are the somewhat fragile, but when carefully removed, basically easily re-inserted into the same receptacle (similar to re-wiring a video game console mod.) In the photo, this receptacle is on the right-center side of the display.

Since I didn’t happen to have the service manual, we dive in with the screwdriver (all phillips-head).  Flipping the keyboard over and laying it on a mattress (to avoid scratches,) you’ll find 14 3/4 inch panel screws,  4 slightly longer 1-1/2 inch panel screws used in the center holes of the keyboard, and about 24 larger headed 1-inch panel screws connecting 2 wood panels to the speakers and bottom frame.  You get to remove ALL of these to get the bottom and top shells separated (just keep them in separate dishes/jars.)

The bottom assembly sort of resembles this view from a PSR-1500 (for general reference – the PSR-S900 is more symmetrical in design) The larger screws are connecting the bottom boards to the 2 speaker enclosures and then attaching the wood panels to the bottom plastic shell; the smaller screws go into those taller pyramid-looking tower holes in the bottom case:

PSR-1500 Lower Case Assembly Diagram
PSR-1500 Lower Case Assembly Diagram

This is an interior view of where the LCD is actually mounted (underneath the front panel; this view is of the bottom of the top half of the keyboard):

PSR-S900 LCD Display - front panel mounting (viewed from below)
PSR-S900 LCD Display – front panel mounting (viewed from below)

To access this view, you will be removing the 6 mounting screws holding the CPU board box (the large aluminum vented box sitting on top of the LCD panel area.)  There are grounding wires on 3 sides of this box that are simply attached with more of the small panel screws.  You can either remove the screws that attach the box to the mounting posts, or the screws that hold the posts to the top assembly (whichever ones you can access most easily.)  The only connections I removed to access the LCD were the ethernet cable plugging into the CPU box, and the 2 white multi-wire connections that plug into the back-panel connector board (the one that has the USB plugs, video connectors and MIDI In/Out – it’s mounted to the top (silver) case assembly):

PSR-S900 Back panel connectors
Back panel connectors – top (silver), bottom (black)

Once the CPU box is unmounted and moved aside (untaping the wires that are taped to the box), you can usually access the first 2 (of 4) screws mounting the LCD to the front panel (these are the 2 closest to the keyboard.) You can remove just the screws attaching the LCD to the aluminum mounts (you do not need to remove the mounts themselves).  To access the other 2 (the ones towards the back panel), if you don’t have a right-angle screwdriver that can fit under the back-panel connector board (about 1-inch clearance), you can remove the 6 screws holding the connector board to the top case assembly (4 of these have bendable wire tie-downs on them; the other 2 seem to hold the mylar foil shielding tabs.)  There is also a single screw that connects the coaxial video connector to the back panel that must also be removed to move the board.

PSR-S900 Interior View Open Case Assembly
Yamaha PSR-S900 Interior View Open Case Assembly

Inside my particular model (which might have been an earlier build than the one my replacement LCD was designed to fit) the high voltage board was connected with a longer set of leads to the defective LCD.  So I unmounted it, rotated it clockwise 90 degrees to move the connector closer to the LCD, and re-mounted it using a single screw to hold it in-place again.

After un-mounting the defective LCD, I removed the existing ribbon connector and before mounting the new one, re-attached the ribbon into the new LCD (drawing a line with a marker on the ribbon helps you remember how deep it was plugged in before).  Plugged in the HV power lead and tested the power up to confirm the new display actually works (the first time, there were a bunch of alternating shadows, indicating I hadn’t seated the ribbon connector properly.)

4 screws back in to hold the LCD, 6+1 screws to re-mount the connector board, 6 more to remount the CPU box (and re-connect the ground wires, and 2 of them hold the box shut), then you can shut the case and replace all of those other screws you took out that hold the case together.

Nothing particularly technical – mostly a bunch of screws and tape.  And about an hour and an eBay purchase later, the keyboard is back up and running fine.

R12.1.3 Patch Warnings during AutoPatch – Fixed

If you’ve been bothered by these warning messages that come up during every AutoPatch (adpatch) session in Oracle e-Business Release 12.1.x:

AutoPatch warning:
Product Data File
/ptcharmk/apps/apps_st/appl/admin/zfaprod.txt
does not exist for product “zfa”.
This product is registered in the database but the
above file does not exist in APPL_TOP. The product
will be ignored without error.

AutoPatch warning:
Product Data File
/ptcharmk/apps/apps_st/appl/admin/zsaprod.txt
does not exist for product “zsa”.
This product is registered in the database but the
above file does not exist in APPL_TOP. The product
will be ignored without error.

AutoPatch warning:
Product Data File
/ptcharmk/apps/apps_st/appl/admin/jtsprod.txt
does not exist for product “jts”.
This product is registered in the database but the
above file does not exist in APPL_TOP. The product
will be ignored without error.

AutoPatch warning:
Territory Data File
/ptcharmk/apps/apps_st/appl/admin/zfaterr.txt
does not exist for product “zfa”.
This product is registered in the database but the
above file does not exist in APPL_TOP. The product
will be ignored without error.

AutoPatch warning:
Territory Data File
/ptcharmk/apps/apps_st/appl/admin/zsaterr.txt
does not exist for product “zsa”.
This product is registered in the database but the
above file does not exist in APPL_TOP. The product
will be ignored without error.
AutoPatch warning:
Territory Data File
/ptcharmk/apps/apps_st/appl/admin/jtsterr.txt
does not exist for product “jts”.
This product is registered in the database but the
above file does not exist in APPL_TOP. The product
will be ignored without error.

Simply Create the following text files. The contents should be respectively:

$APPL_TOP/admin/jtsprod.txt
%%% Single-product product data file format 12.0.A
jts 875
END_OF_PRODUCT_ABBREVIATIONS -999
875 jts JTS APP
No No No No
Yes Yes
875 JTS JTS
0
1.0.0 1.0.0
none
none
none
none
END_OF_PRODUCTS
Release 12.0.0
12.0.0
R120 R120_ additional-this-mpl
JTS 12.0.0
END_OF_RELEASE 0.0.0

$APPL_TOP/admin/jtsterr.txt (or substitute your own NLS_LANG and NLS_CHARACTERSET settings localized for your instance)
%%% Single-product territory data file format 12.0.A
R120
0 usaeng US AMERICAN EN US American_English
appltape.txt appltape.txt AL32UTF8
Yes Standard Data_Group
none
none
none
none
none
c jts Oracle_CRM_Self_Service_Admin
END_OF_PRODUCT_NAMES
END_OF_LANGUAGE_INFO

$APPL_TOP/admin/zsaprod.txt
%%% Single-product product data file format 12.0.A
zsa 506
END_OF_PRODUCT_ABBREVIATIONS -999
506 zsa ZSA APP
No No No No
Yes Yes
506 ZSA ZSA
0
1.0.0 1.0.0
none
none
none
none
END_OF_PRODUCTS
Release 12.0.0
12.0.0
R120 R120_ additional-this-mpl
ZSA 12.0.0
END_OF_RELEASE 0.0.0

$APPL_TOP/admin/zsaterr.txt
%%% Single-product territory data file format 12.0.A
R120
0 usaeng US AMERICAN EN US American_English
appltape.txt appltape.txt AL32UTF8
Yes Standard Data_Group
none
none
none
none
none
c zsa Oracle_Sales_Analyzer
END_OF_PRODUCT_NAMES
END_OF_LANGUAGE_INFO

$APPL_TOP/admin/zfaprod.txt
%%% Single-product product data file format 12.0.A
zfa 505
END_OF_PRODUCT_ABBREVIATIONS -999
505 zfa ZFA APP
No No No No
Yes Yes
505 ZFA ZFA
0
1.0.0 1.0.0
none
none
none
none
END_OF_PRODUCTS
Release 12.0.0
12.0.0
R120 R120_ additional-this-mpl
ZFA 12.0.0
END_OF_RELEASE 0.0.0

$APPL_TOP/admin/zfaterr.txt
%%% Single-product territory data file format 12.0.A
R120
0 usaeng US AMERICAN EN US American_English
appltape.txt appltape.txt AL32UTF8
Yes Standard Data_Group
none
none
none
none
none
c zfa Oracle_Financial_Analyzer
END_OF_PRODUCT_NAMES
END_OF_LANGUAGE_INFO

Repeat the following dummy file creations for each product you’re registering above:

Create directory $APPL_TOP/zfa/12.0.0/admin

Create directory $APPL_TOP/zfa/12.0.0/admin/driver

Create directory $APPL_TOP/zfa/12.0.0/admin/sql

Create file $APPL_TOP/zfa/12.0.0/admin/driver/zfafile.drv with following contents:
# Dummy xxadfile.drv

Create file $APPL_TOP/zfa/12.0.0/sql/ZFANLINS.sql with following contents:
commit;
exit;

Create file $APPL_TOP/zfa/12.0.0/admin/sql/ZFANLADD.sql with following contents:
commit;
exit;

 

That’s it – no more warnings during AutoPatch. (they are all legacy products anyway)