A: 3 things to do: DST patch (timezone and OJVM), Critical Patch. The key is: correct version.
The proved sequence is as I listed here, timezone, OJVM then critical patch.
A. Time Zone Files Patch
You must know the MATRIX for time zone files version and database version. For database 10.2.0.4, patch 6672979 needed.
See metalink note 412160.1 for details.
->Oracle9 uses v1 as standard
->Oracle9 can be upgraded to v2 using patch 3171059
->Oracle10 uses v2 as standard
->Oracle9 and Oracle10 can be upgraded to v3 using patch 4689959
->v3 is delivered as part of the 10.2.0.3 patchset.
->Oracle9 and Oracle10 can be upgraded to v4 using patch 5632264.
->v4 is delivered as part of the 10.2.0.4 patchset.
->18.104.22.168 uses V4 as standard
->Oracle9 and Oracle10 can be upgraded to v5 using patch 5880630.
->Oracle9, Oracle10 and Oracle11 can be upgraded to v6 using patch 6113507.
->Oracle9, Oracle10 and Oracle11 can be upgraded to v7 using patch 6672979.
Trick 1: You can however use the 10.2.0.3 or 22.214.171.124 patch for your platform manually for 10.2.0.4. "Manually"
means you backup and overwrite timezone files in $ORACLE_HOME/oracore/zoneinfo by yourself.
Trick 2: You can best understand what to do in patch file: 672979/etc/config/actions.xml
Trick 3: How do I know time zone files version?
SELECT version FROM v$timezone_file;
B. OVJM patch
To avoid bigger trouble, Please only apply OJVM patches if the OJVM is correctly installed, And time zone data is usable in the OJVM.
B.1. make sure Oracle JVM is Installed Correctly
see details in metalink note 397770.1
B.1.1 Component Status
select comp_name, status from dba_registry;
JServer JAVA Virtual Machine VALID
/* expect result, don’t apply OJVM patch if you see different output */
B.1.2 JAVA objects
select owner, count(*) from dba_objects where object_type like ‘%JAVA%’ and owner=’SYS’;
/* don’t apply OJVM patch if your output is less than following number */
1) For Oracle 11.1.x release
2) For Oracle 10.2.x release
B.1.3 JAVA Roles
select role from dba_roles where role like ‘%JAVA%’;
There should be either 4 or 6 roles .
/* don’t apply OJVM patch if no roles are returned */
Note: Go ahead if above 3 test all passed, or STOP applying OJVM patch.
B.2. apply and verify Oracle JVM patch
B.2.1 download JAVA code (it is small one) to test/verify OJVM
see metalink note 416860.1
save it as test.ojvm.sql
The output on a system that has the OJVM DSTv4 applied is /* expected result for 10.2.0.4 */
V3 (or later) Time Zone Update is applied
V4 (or later) Time Zone Update is applied
V6 (or later) Time Zone Update is not applied
V7 (or later) Time Zone Update is not applied
The TEST_DST function can be used to test your ‘own’ time zones
PL/SQL procedure successfully completed.
B.2.2 Apply OJVM patch 6708377 for 10.1.0.5, 10.2.0.2, 10.2.0.3, 10.2.0.4 and 126.96.36.199
see details in metalink note 549825.1
C. Critical Patch (patch 7313129: V7 patch for 10.2.0.4)
Shutodown database, run opatch, run post-installation SQL. It spend most of time in post-run re-compile work.
Example for windows server 2003
Directory of c:download
09/05/2008 03:11 PM <DIR> .
09/05/2008 03:11 PM <DIR> ..
09/05/2008 10:55 AM <DIR> 10201_companion_win32
09/05/2008 10:49 AM 653,693,751 10201_companion_win32.zip
09/05/2008 10:55 AM <DIR> 10201_database_win32
09/05/2008 10:49 AM 655,025,354 10201_database_win32.zip
09/05/2008 02:06 PM <DIR> p6672979_111060_WINNT
09/05/2008 02:06 PM 83,643 p6672979_111060_WINNT.zip
09/05/2008 02:35 PM <DIR> p6708377_10204_Generic
09/05/2008 02:34 PM 298,185 p6708377_10204_Generic.zip
09/05/2008 11:06 AM <DIR> p6810189_10204_Win32
09/05/2008 10:55 AM 1,034,621,834 p6810189_10204_Win32.zip
09/05/2008 03:11 PM <DIR> p7313129_10204_Win32
09/05/2008 03:10 PM 83,301,754 p7313129_10204_Win32.zip
09/05/2008 02:25 PM 2,551 test.OJVM.sql
7 File(s) 2,427,027,072 bytes
8 Dir(s) 25,873,281,024 bytes free
Conclusion: It took most of time IDENTIFYING the correct and the latest version in matrix-like DST notes. However it became easier next time from baseline today.