MOS Docs to Review for EBS DB Upgrade to 11gR2 (Latest Patch Release)

If you are considering Oracle database upgrade from 9i/10g to 11gR2 or applying release patches (11.2.0.1 to 11.2.0.3 or 11.2.0.4), several issues can be avoided by applying the recommended patches and PSU.  And if you are not on the latest 11gR2 release (11.2.0.3 or 11.2.0.4), I strongly recommend getting there, with the latest PSU possible… The following are must-review reference documents for upgrading Oracle database to 11gR2, that supports EBS 11i or R12.1.

  • Interoperability Notes EBS 12.0 and 12.1 with Database 11gR2 (Doc ID 1058763.1)
  • Interoperability Notes Oracle EBS 11i with Oracle Database 11gR2 (11.2.0) (Doc ID 881505.1)
  • Oracle Recommended Patches — Oracle Database (Doc ID 756671.1)
  • Database Patch Set Update Overlay Patches Required for Use with PSUs and Oracle E-Business Suite (Doc ID 1147107.1)
  • Oracle E-Business Suite Recommended Performance Patches (Doc ID 244040.1)

Make sure the initialization parameters are setup correctly. You may unset the AQ_TM_PROCESS parameter (alter system reset aq_tm_processes scope=spfile sid=’*’;).

  • Database Initialization Parameters for Oracle E-Business Suite Release 12 (Doc ID 396009.1)
  • Database Initialization Parameters for Oracle Applications Release 11i (Doc ID 216205.1)
  • bde_chk_cbo.sql – EBS initialization parameters – Healthcheck (Doc ID 174605.1)

Running this script before and after upgrade provides a good comparison.

  • Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) (Doc ID 556610.1)

It is better to truncate the SYS.AUD$ table with large amount or rows, when upgrading from 10g to 11g. Also, remember to purge recycle bin before upgrade.

  • How to Pre-Process SYS.AUD$ Records Pre-Upgrade From 10.1 or later to 11gR1 or later. (Doc ID 1329590.1)

After upgrade, you might want to proactively take care of these as well…

  • 11i – 12 Gather Schema Statistics fails with Ora-20001 errors after 11G database Upgrade (Doc ID 781813.1)
  • EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE(‘APPLSYS’,’FND_STATTAB’);

Apply the EBS patch to utilize the new 11gR2 statistics gathering features in EBS jobs

  • Best Practices for Gathering Statistics with Oracle E-Business Suite (Doc ID 1586374.1)

Good luck with the database upgrade (or patch release apply)!

 

 

 

 

 

EBS Clone Considerations – Database Refresh

When doing database refresh for EBS databases, the following steps may save time on completing the clone faster…

Copy the code relevant to your environment to a file and run the script file prior to the clone to save the configuration information. Once database refresh completed, you may restore the values to the database and then run autoconfig to complete the clone.

Saving Information Before Clone

1. Define a directory path in wbackupdir variable, where the backup scripts are saved.

wbackupdir=/myhomedir/clone/save

2. Save the $CONTEXT_FILE on database node

echo "Copying XML file to backup directory"
cp -p $CONTEXT_FILE $wbackupdir/

3. Save the database parameter file

echo "Copying $ORACLE_HOME/dbs/ initialization parameter files"
cp -p $ORACLE_HOME/dbs/*${ORACLE_SID}.ora $wbackupdir/

Following items are saved, logged into the database.

sqlplus -s system/$SYSTEMPWD <<EOF
SET PAGES 0 FEEDBACK OFF lines 200 trims on

Each item will be saved to separate files, thus can be run separately if needed after database refresh.

4. Save database read-only users, user accounts used in db links, etc whose password need to be preserved.

SPOOL $wbackupdir/passwords.sql

SELECT 'ALTER USER '||name||' IDENTIFIED BY VALUES '''||password||''';'
FROM sys.user\$
WHERE name in ('SYS','SYSTEM','EBS_QUERY','NOETIX_SYS',
'EUL10_NTX_US', 'HR_QUERY','AM_STAGE','AM_EDM_ADMIN','ZZOIM',
'APEX_PUBLIC_USER','XXEASE_REMOTE', 'XXEASE')
or name like '%DBLINK'
or name like '%INT'
ORDER BY 1;

SPOOL OFF

 

5. To preserve the database links, we use expdp. But need to drop the database links before doing the import. Following code will generate database link drop statements [only drop private DB Links under APPS user].

DROP DIRECTORY CLONE_SAVE;
CREATE DIRECTORY CLONE_SAVE as '/tmp';

spool $wbackupdir/dropappslinks.sql
select 'drop database link ' ||db_link ||';'
from dba_db_links
where owner = 'APPS'
and db_link not like 'APPS_TO_APPS%'
and db_link not like 'EDW_APPS_TO_WH%'
order by db_link
/
spool off

6. Save the profile values that need to be preserved. Second SQL capture site level profile values of interest. Add/remove as appropriate for your environment.

spool $wbackupdir/profile1.sql
SELECT ('Update XDO.XDO_CONFIG_VALUES
Set value = ' || DECODE(value, NULL, 'NULL', ''''||value||'''') || '
Where property_code = ' ||''''||'SYSTEM_TEMP_DIR'||''';' )
FROM XDO.XDO_CONFIG_VALUES
WHERE property_code = 'SYSTEM_TEMP_DIR' ;

spool off

 

spool $wbackupdir/profile2.sql

REM Site level Values

SELECT ('Update APPLSYS.FND_PROFILE_OPTION_VALUES
SET profile_option_value = ' || DECODE(fpov.profile_option_value, NULL, 'NULL', ''''||profile_option_val
ue||'''') || '
WHERE profile_option_id = ' || fpov.profile_option_id ||';')
FROM APPLSYS.FND_PROFILE_OPTION_VALUES fpov, APPLSYS.FND_PROFILE_OPTIONS fpo
WHERE fpo.profile_option_id = fpov.profile_option_id AND
fpov.level_id = 10001 AND
fpo.profile_option_name IN
('XXLPR_SPOOLER_URL',
'XXLPR_OVERRIDE_POLLING_SERVER_URL',
'XXPCK_WORK_DIRECTORY',
'XXPCK_INBOUND_DIRECTORY',
'XXPCK_OUTBOUND_DIRECTORY',
'XXPCK_DISCOVERER_SERVER',
'BNE_SERVER_LOG_PATH',
'BNE_SERVLET_PATH',
'BNE_UIX_BASE_PATH',
'BNE_UIX_PHYSICAL_DIRECTORY',
'BNE_UPLOAD_IMPORT_DIRECTORY',
'BNE_UPLOAD_STAGING_DIRECTORY',
'BNE_UPLOAD_TEXT_DIRECTORY',
'POS_EXTERNAL_URL',
'POS_INTERNAL_URL',
'ASO_CONFIGURATOR_URL',
'CZ_UIMGR_URL',
'APPS_FRAMEWORK_AGENT',
'APPS_JSP_AGENT',
'APPS_PORTAL',
'APPS_SERVLET_AGENT',
'APPS_WEB_AGENT',
'ASO_CONFIGURATOR_URL',
'CZ_UIMGR_URL',
'HELP_WEB_AGENT',
'ICX_DISCOVERER_LAUNCHER',
'ICX_DISCOVERER_VIEWER_LAUNCHER',
'ICX_FORMS_LAUNCHER',
'QP_PRICING_ENGINE_URL',
'IBY_ECAPP_URL',
'ICX_PAY_SERVER',
'TCF:HOST'
);

spool off

 

spool $wbackupdir/profile3.sql

REM Responsibility/Server level Values

SELECT 'Update applsys.fnd_profile_option_values
Set profile_option_value = ' || DECODE(fpov.PROFILE_OPTION_VALUE, NULL, 'NULL',
''''||profile_option_value||'''') ||' Where profile_option_id = ' ||
fpov.PROFILE_OPTION_ID|| ' And level_id = '|| fpov.LEVEL_ID ||
' And level_value2 = '|| '(select NODE_ID from applsys.fnd_nodes
where NODE_NAME = '''||fn.NODE_NAME||''');'
FROM applsys.fnd_profile_option_values fpov, applsys.fnd_nodes fn
WHERE fn.NODE_ID = fpov.LEVEL_VALUE2 AND fpov.LEVEL_ID = 10007;

select 'update applsys.fnd_svc_comp_param_vals ',
'set parameter_value = ''' || fscpv.PARAMETER_VALUE || '''',
' where PARAMETER_ID= ' || fscpv.PARAMETER_ID || ';'
from applsys.fnd_svc_comp_params_tl fscpt
, applsys.fnd_svc_comp_param_vals fscpv
where fscpt.display_name = 'Test Address'
and fscpt.parameter_id = fscpv.parameter_id;

select 'commit;' from dual;
spool off

 

7. Save Oracle Directories created in the DB

spool $wbackupdir/recreateoracledirs.sql
set feedback off
set pages 0 lines 300 trims on
select 'create or replace directory '|| DIRECTORY_NAME ||' as '''||DIRECTORY_PATH||''';'
from dba_directories;

select 'grant '||PRIVILEGE||' on directory '||TABLE_NAME||' to '||GRANTEE||';'
from dba_tab_privs
where privilege in ('READ', 'WRITE');

spool off

 

8. Export the APPS owned DB Links

/bin/rm /tmp/appsdblinks.dmp
expdp dumpfile=appsdblinks.dmp directory=clone_save full=y include=db_link userid=\"/ as sysdba\"
cp -p /tmp/appsdblinks.dmp $wbackupdir

 

Perform the Database Refresh

After the information is saved from the database, you may do the following steps to complete the database copy process.

  1. Shutdown EBS and Database Sevices
  2. Startup database in mount status, restricted mode
  3. Drop database
  4. Restore the initialization parameter file saved in step 3
  5. Using RMAN or other methods, perform clone of the database [RMAN duplicate].

 

Post Database Refresh Configuration

Clear source node information from FND_NODES and other configuration tables.

sqlplus apps/prodpassword
EXEC FND_CONC_CLONE.SETUP_CLEAN;
COMMIT;

Using the $CONTEXT_FILE, run autoconfig on the database node.

cd $ORACLE_HOME/appsutil/clone/bin
perl ./adcfgclone.pl dbconfig $CONTEXT_FILE

Now, you should see the database node name in the FND_NODES table.

select NODE_NAME, SUPPORT_DB D, SUPPORT_ADMIN A, SUPPORT_CP C,
SUPPORT_FORMS F, SUPPORT_WEB W
from apps.FND_NODES
order by 1;

Restore Saved Configuration Information

sqlplus -s system/$SYSTEMPWD <<EOF

SET PAGES 0 FEEDBACK OFF lines 200 trims on
CREATE OR REPLACE DIRECTORY CLONE_SAVE as '/tmp';
@passwords.sql
@recreateoracledirs.sql
connect APPS/$appspwd
@profile1.sql
@profile2.sql
@profile3.sql
@dropappslinks.sql

Restore DB Links under APPS

cp -p appsdblinks.dmp /tmp/appsdblinks.dmp
impdp directory=clone_save dumpfile=appsdblinks.dmp logfile=appsdblinks.imp.log schemas=apps userid=\"/ as sysdba\"

 

If you are not interested in the AWR and audit information in the clone instance, you may truncate those tables…

sqlplus -s "/ as sysdba" <<EOF
SET PAGES 0 FEEDBACK OFF

Prompt "Cleaning up Audit and Statistics Tables"

TRUNCATE TABLE SYS.AUD\$;
truncate table WRI\$_OPTSTAT_TAB_HISTORY ;
truncate table WRI\$_OPTSTAT_OPR ;
truncate table WRI\$_OPTSTAT_IND_HISTORY ;
truncate table WRI\$_OPTSTAT_HISTHEAD_HISTORY ;
truncate table WRI\$_OPTSTAT_HISTGRM_HISTORY ;
truncate table WRI\$_OPTSTAT_AUX_HISTORY ;
exec dbms_stats.purge_stats(sysdate);
select dbms_stats.GET_STATS_HISTORY_AVAILABILITY from dual;
select dbms_stats.get_stats_history_retention from dual;
exec dbms_stats.alter_stats_history_retention(8);
EOF

 

Complete the Clone on the EBS Nodes

Change APPS, ALLORACLE, any custom schema passwords using FNDCPASS to match the passwords before the database refresh.

FNDCPASS apps/appspwd 0 Y system/systempwd SYSTEM APPLSYS pwd_from_Dev
FNDCPASS apps/appspwd 0 Y system/systempwd ALLORACLE pwd_from_Dev
FNDCPASS apps/appspwd 0 Y system/systempwd ORACLE XX pwd_from_Dev 
FNDCPASS apps/appspwd 0 Y system/systempwd USER SYSADMIN pwd_from_Dev

Now execute autoconfig on all EBS nodes to complete the clone.

cd $AD_TOP/bin
./adconfig.sh contextfile=$CONTEXT_FILE

 

Hope this helps… Have fun!

PS: Please comment on the approach and method. If there is better, faster, easier method, would love to know. Here the assumption is all patch levels on the database side and EBS side are same, just need more recent data in the non-production instance for testing purposes.