четверг, 21 февраля 2013 г.

Установка DST 19

#su - oradb
$cd /tmp
$ls -l
total 588496
-rw-r--r--   1 oradb    oinstall  314120 Jan 16 10:48 p15897859_112030_SOLARIS64.zip

$unzip p15897859_112030_SOLARIS64.zip

Archive:  p15897859_112030_SOLARIS64.zip
   creating: 15897859/
  inflating: 15897859/README.txt
  inflating: 15897859/README.html
   creating: 15897859/files/
   creating: 15897859/files/oracore/
   creating: 15897859/files/oracore/zoneinfo/
  inflating: 15897859/files/oracore/zoneinfo/readme_19.txt
   creating: 15897859/files/oracore/zoneinfo/little/
  inflating: 15897859/files/oracore/zoneinfo/little/timezlrg_19.dat
  inflating: 15897859/files/oracore/zoneinfo/little/timezone_19.dat
  inflating: 15897859/files/oracore/zoneinfo/timezlrg_19.dat
  inflating: 15897859/files/oracore/zoneinfo/timezone_19.dat
   creating: 15897859/files/oracore/zoneinfo/big/
  inflating: 15897859/files/oracore/zoneinfo/big/timezlrg_19.dat
  inflating: 15897859/files/oracore/zoneinfo/big/timezone_19.dat
   creating: 15897859/etc/
   creating: 15897859/etc/config/
  inflating: 15897859/etc/config/inventory.xml
  inflating: 15897859/etc/config/actions.xml
  inflating: 15897859/etc/config/deploy.xml
   creating: 15897859/etc/xml/
  inflating: 15897859/etc/xml/GenericActions.xml
  inflating: 15897859/etc/xml/ShiphomeDirectoryStructure.xml

$ls -l
drwxr-xr-x   4 oradb    oinstall     374 Dec 31 12:31 15897859
-rw-r--r--   1 oradb    oinstall  314120 Jan 16 10:48 p15897859_112030_SOLARIS64.zip

$cd 15897859

$/u01/app/oradb/product/11.2.0.3/dbhome_1/OPatch/opatch apply

$
 


$export ORACLE_SID=testdb
$sqlplus "/as sysdba"


SQL*Plus: Release 11.2.0.3.0 Production on Fri Feb 22 09:55:57 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 4.0899E+10 bytes
Fixed Size                  2168160 bytes
Variable Size            3892316832 bytes
Database Buffers         3.6910E+10 bytes
Redo Buffers               95125504 bytes
Database mounted.
SQL> SELECT * FROM v$timezone_file;

FILENAME                VERSION
-------------------- ----------
timezlrg_19.dat              19

SQL> alter database open;

Database altered.

SQL> SELECT * FROM v$timezone_file;

FILENAME                VERSION
-------------------- ----------
timezlrg_14.dat              14

SQL>
SQL> select u.name || '.' || o.name || '.' || c.name TSLTZcolumn
from sys.obj$ o, sys.col$ c, sys.user$ u
where c.type# = 231
and o.obj# = c.obj#
and u.user# = o.owner#; 
2    3    4    5

no rows selected

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
  2    3    4

PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         14
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE

SQL> select TZ_VERSION from sys.registry$database;

TZ_VERSION
----------
        14

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;

  2    3    4
PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         14
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE

SQL>
SQL> SELECT version FROM v$timezone_file;
   VERSION
----------
        14

SQL> purge dba_recyclebin;

DBA Recyclebin purged.

SQL> alter session set "_with_subquery"=materialize;
Session altered.

SQL> alter session set "_simple_view_merging"=TRUE;

Session altered.

SQL> exec DBMS_DST.BEGIN_PREPARE(19);

PL/SQL procedure successfully completed.

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
  2    3    4

PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         14
DST_SECONDARY_TT_VERSION       19
DST_UPGRADE_STATE              PREPARE

SQL> TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;

Table truncated.

SQL> TRUNCATE TABLE sys.dst$affected_tables;

Table truncated.

SQL> TRUNCATE TABLE sys.dst$error_table;

Table truncated.

SQL> set serveroutput on
SQL> BEGIN
DBMS_DST.FIND_AFFECTED_TABLES
(affected_tables => 'sys.dst$affected_tables',
log_errors => TRUE,
log_errors_table => 'sys.dst$error_table');
END;

/  2    3    4    5    6    7

PL/SQL procedure successfully completed.

SQL> SELECT * FROM sys.dst$affected_tables;
TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------
SYS                            KET$_AUTOTASK_STATUS
MW_START_TIME
         1           0

SYS                            KET$_CLIENT_TASKS
CURR_WIN_START
         3           0

TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------

SYS                            SCHEDULER$_JOB
LAST_END_DATE
         7           0

SYS                            SCHEDULER$_JOB
LAST_START_DATE

TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------
         7           0

SYS                            SCHEDULER$_JOB
NEXT_RUN_DATE
         5           0

SYS                            SCHEDULER$_JOB

TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------
LAST_ENABLED_TIME
         8           0

SYS                            SCHEDULER$_JOB
START_DATE
         5           0


TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------
SYS                            SCHEDULER$_JOB_RUN_DETAILS
REQ_START_DATE
         9           0

SYS                            SCHEDULER$_JOB_RUN_DETAILS
START_DATE
        14           0

TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------

SYS                            SCHEDULER$_WINDOW
ACTUAL_START_DATE
         1           0

SYS                            SCHEDULER$_WINDOW
LAST_START_DATE

TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------
         7           0

SYS                            SCHEDULER$_WINDOW
NEXT_START_DATE
         9           0

SYS                            SCHEDULER$_WINDOW_DETAILS

TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
 ROW_COUNT ERROR_COUNT
---------- -----------
REQ_START_DATE
         1           0

SYS                            SCHEDULER$_WINDOW_DETAILS
START_DATE
         1           0


14 rows selected.

SQL> SELECT * FROM sys.dst$error_table;

no rows selected

SQL> SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1883';

no rows selected

SQL> SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1878';
no rows selected

SQL> SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in ('1878','1883');

no rows selected

SQL> EXEC DBMS_DST.END_PREPARE;
A prepare window has been successfully ended.

PL/SQL procedure successfully completed.

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
  2    3    4

PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         14
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE

SQL>
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup upgrade;
ORACLE instance started.

Total System Global Area 4.0899E+10 bytes
Fixed Size                  2168160 bytes
Variable Size            3892316832 bytes
Database Buffers         3.6910E+10 bytes
Redo Buffers               95125504 bytes
Database mounted.
Database opened.
SQL>
SQL> set serveroutput on
SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
  2    3    4

PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         14
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE

SQL> purge dba_recyclebin;
DBA Recyclebin purged.

SQL> TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;

Table truncated.

SQL> TRUNCATE TABLE sys.dst$affected_tables;

Table truncated.

SQL> TRUNCATE TABLE sys.dst$error_table;
Table truncated.

SQL> alter session set "_with_subquery"=materialize;

Session altered.

SQL> alter session set "_simple_view_merging"=TRUE;

Session altered.

SQL> EXEC DBMS_DST.BEGIN_UPGRADE(19);
An upgrade window has been successfully started.

PL/SQL procedure successfully completed.

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
  2    3    4

PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         19
DST_SECONDARY_TT_VERSION       14
DST_UPGRADE_STATE              UPGRADE

SQL> SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES';

OWNER                          TABLE_NAME                     UPG
------------------------------ ------------------------------ ---
SYSMAN                         AQ$_MGMT_LOADER_QTABLE_L       YES
SYSMAN                         AQ$_MGMT_LOADER_QTABLE_S       YES
SYSMAN                         AQ$_MGMT_NOTIFY_QTABLE_L       YES
SYSMAN                         AQ$_MGMT_NOTIFY_QTABLE_S       YES
SYSMAN                         MGMT_PROV_ASSIGNMENT           YES
SYSMAN                         MGMT_PROV_BOOTSERVER           YES
SYSMAN                         MGMT_PROV_CLUSTER_NODES        YES
SYSMAN                         MGMT_PROV_DEFAULT_IMAGE        YES
SYSMAN                         MGMT_PROV_IP_RANGE             YES
SYSMAN                         MGMT_PROV_NET_CONFIG           YES
SYSMAN                         MGMT_PROV_OPERATION            YES

OWNER                          TABLE_NAME                     UPG
------------------------------ ------------------------------ ---
SYSMAN                         MGMT_PROV_RPM_REP              YES
SYSMAN                         MGMT_PROV_STAGING_DIRS         YES
SYSMAN                         MGMT_PROV_SUITE_INST_MEMBERS   YES

14 rows selected.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.

Total System Global Area 4.0899E+10 bytes
Fixed Size                  2168160 bytes
Variable Size            3892316832 bytes
Database Buffers         3.6910E+10 bytes
Redo Buffers               95125504 bytes
Database mounted.
Database opened.
SQL> set serveroutput on
SQL> VAR numfail number
SQL> BEGIN
  2  DBMS_DST.UPGRADE_DATABASE(:numfail,
  3  parallel => TRUE,
  4  log_errors => TRUE,
  5  log_errors_table => 'SYS.DST$ERROR_TABLE',
  6  log_triggers_table => 'SYS.DST$TRIGGER_TABLE',
  7  error_on_overlap_time => FALSE,
  8  error_on_nonexisting_time => FALSE);
  9  DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
 10  END;

 11  /
Table list: "SYSMAN"."MGMT_PROV_SUITE_INST_MEMBERS"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_STAGING_DIRS"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_RPM_REP"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_OPERATION"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_NET_CONFIG"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_IP_RANGE"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_DEFAULT_IMAGE"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_CLUSTER_NODES"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_BOOTSERVER"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_ASSIGNMENT"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_NOTIFY_QTABLE_S"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_NOTIFY_QTABLE_L"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_LOADER_QTABLE_S"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_LOADER_QTABLE_L"
Number of failures: 0
Failures:0

PL/SQL procedure successfully completed.

SQL>
SQL> VAR fail number
BEGIN
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail);
END;

/SQL>   2    3    4    5
An upgrade window has been successfully ended.
Failures:0

PL/SQL procedure successfully completed.

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
  2    3    4

PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         19
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE

SQL> SELECT * FROM v$timezone_file;

FILENAME                VERSION
-------------------- ----------
timezlrg_19.dat              19

SQL> SELECT VERSION FROM v$timezone_file;

   VERSION
----------
        19

SQL> select TZ_VERSION from registry$database;

TZ_VERSION
----------
        14

SQL> update registry$database set TZ_VERSION = (select version FROM v$timezone_file);

1 row updated.

SQL> commit;

Commit complete.

SQL> select TZ_VERSION from registry$database;

TZ_VERSION
----------
        19


SQL> create or replace and compile java source named "OffsetFromStandard" as
  2  import java.util.Calendar;
  3  import java.util.GregorianCalendar;
  4  import java.util.TimeZone;
  5
  6  public class OffsetFromStandard
  7  {
  8     public static int getDSTOffset(
  9       String timezone,
 10       int year,
 11       int month,
 12       int mday,
 13       int hour,
 14       int min,
 15       int sec)
 16     {
 17       int RetVal = -360000000;
 18       String[] TZs = TimeZone.getAvailableIDs();
 19       for (int i = 0; i < TZs.length; i++)
 20       {
 21         if (timezone.equals(TZs[i]))
 22         {
 23           TimeZone tz = TimeZone.getTimeZone(timezone);
 24           GregorianCalendar c = new GregorianCalendar(tz);
 25           c.set(year, month-1, mday, hour, min, sec);
 26           RetVal = c.get(Calendar.DST_OFFSET);
 27         };
 28       }
 29       return RetVal;
 30     }
 31  }
 32  /


Java created.

SQL> alter java class "OffsetFromStandard" resolve
/  2

Java altered.

SQL> CREATE OR REPLACE function get_dst_offset (timezone VARCHAR2,
  2                                                  year NUMBER,
  3                                                 month NUMBER,
  4                                                  mday NUMBER,
  5                                                  hour NUMBER,
  6                                                   min NUMBER,
  7                                                   sec NUMBER) RETURN NUMBER AS
  8  LANGUAGE JAVA NAME 'OffsetFromStandard.getDSTOffset (java.lang.String, int, int, int, int, int, int) return int';

  9  /

Function created.

SQL> CREATE OR REPLACE function test_dst(timezone VARCHAR2,
  2                                                   year NUMBER,
  3                                                  month NUMBER,
  4                                                   mday NUMBER,
  5                                                   hour NUMBER,
  6                                                    min NUMBER,
  7                                                    sec NUMBER) RETURN varchar2 as
  8     retval varchar2(40);
  9  begin
 10     select case get_dst_offset (timezone,year,month,mday,hour,min,sec)
 11       when 3600000 then 'Timestamp is *in* DST'
 12       when 0 then 'Timestamp is *not* in DST'
 13       when -360000000 then 'Time Zone not valid'
 14       else 'Error' end into retval from dual;
 15     return retval;
 16  end;

 17  /

Function created.

SQL> set serveroutput on
SQL> begin
  2     if test_dst('America/New_York', 2007, 3, 11, 11, 0, 0)= 'Timestamp is *in* DST' then
  3       dbms_output.put_line('V3 (or later) Time Zone Update is applied');
  4     else
  5       dbms_output.put_line('V3 (or later) Time Zone Update is not applied');
  6     end if;
  7     if test_dst('America/Edmonton', 2007, 3, 11, 11, 0, 0) = 'Timestamp is *in* DST' then
  8       dbms_output.put_line('V4 (or later) Time Zone Update is applied');
  9     else
 10       dbms_output.put_line('V4 (or later) Time Zone Update is not applied');
 11     end if;
 12     if test_dst('Pacific/Auckland', 2008, 4, 5, 11, 0, 0) = 'Timestamp is *in* DST' then
 13       dbms_output.put_line('V6 tzdata2007f (or later) Time Zone Update is applied');
 14     else
 15       dbms_output.put_line('V6 tzdata2007f (or later) Time Zone Update is not applied');
 16     end if;
 17     if test_dst('Australia/Adelaide', 2008, 4, 5, 11, 0, 0) = 'Timestamp is *in* DST' then
 18       dbms_output.put_line('V7 tzdata2007k (or later) Time Zone Update is applied');
 19     else
 20       dbms_output.put_line('V7 tzdata2007k (or later) Time Zone Update is not applied');
 21     end if;
 22     if test_dst('Africa/Casablanca', 2008, 6, 1, 23, 0, 0) = 'Timestamp is *in* DST' then
 23       dbms_output.put_line('V9 tzdata2008f (or later) Time Zone Update is applied');
 24     else
 25       dbms_output.put_line('V9 tzdata2008f (or later) Time Zone Update is not applied');
 26     end if;
 27       if test_dst('Asia/Damascus', 2008, 10, 15, 10, 0, 0) = 'Timestamp is *in* DST' then
 28       dbms_output.put_line('V10 tzdata2008i (or later) Time Zone Update is applied');
 29     else
 30       dbms_output.put_line('V10 tzdata2008i (or later) Time Zone Update is not applied');
 31     end if;
 32     if test_dst('Asia/Karachi', 2009, 04, 16, 10, 0, 0) = 'Timestamp is *in* DST' then
 33       dbms_output.put_line('V11 tzdata2009g (or later) Time Zone Update is applied');
 34     else
 35       dbms_output.put_line('V11 tzdata2009g (or later) Time Zone Update is not applied');
 36     end if;
 37  -- DSTv13 check changed since this gave a false negative when DSTv14 is applied
 38     if test_dst('Pacific/Fiji', 2009, 11, 30, 10, 0, 0) = 'Timestamp is *in* DST' then
 39       dbms_output.put_line('V13 tzdata2009s (or later) Time Zone Update is applied');
 40     else
 41       dbms_output.put_line('V13 tzdata2009s (or later) Time Zone Update is not applied');
 42     end if;
 43     if test_dst('Pacific/Fiji', 2010, 11, 16, 10, 0, 0) = 'Timestamp is *in* DST' then
 44       dbms_output.put_line('V14 tzdata2010i (or later) Time Zone Update is applied');
 45     else
 46       dbms_output.put_line('V14 tzdata2010i (or later) Time Zone Update is not applied');
 47     end if;
 48    if test_dst('Asia/Hong_Kong', 1977, 07, 01, 10, 0, 0) = 'Timestamp is *in* DST' then
 49       dbms_output.put_line('V15 tzdata2010o (or later) Time Zone Update is not applied');
 50     else
 51       dbms_output.put_line('V15 tzdata2010o (or later) Time Zone Update is applied');
 52     end if;
 53    if test_dst('Europe/Istanbul', 2011, 03, 27, 10, 0, 0) = 'Timestamp is *in* DST' then
 54       dbms_output.put_line('V16 tzdata2011g (or later) Time Zone Update is not applied');
 55     else
 56       dbms_output.put_line('V16 tzdata2011g (or later) Time Zone Update is applied');
 57     end if;
 58    if test_dst('Europe/Moscow', 2012, 06, 20, 10, 0, 0) = 'Timestamp is *in* DST' then
 59       dbms_output.put_line('V17 tzdata2011i (or later) Time Zone Update is not applied');
 60     else
     dbms_output.put_line('V17 tzdata2011i (or later) Time Zone Update is applied');
 61   62     end if;
 63    if test_dst('Europe/Minsk', 2012, 06, 20, 10, 0, 0) = 'Timestamp is *in* DST' then
 64       dbms_output.put_line('V18 tzdata2012c (or later) Time Zone Update is not applied');
 65     else
 66       dbms_output.put_line('V18 tzdata2012c (or later) Time Zone Update is applied');
 67     end if;
 68     dbms_output.put_line('The TEST_DST function can be used to test your ''own'' time zones');
 69  end;

 70  /
V3  (or later) Time Zone Update is applied
V4  (or later) Time Zone Update is applied
V6  tzdata2007f (or later) Time Zone Update is applied
V7  tzdata2007k (or later) Time Zone Update is applied
V9  tzdata2008f (or later) Time Zone Update is applied
V10 tzdata2008i (or later) Time Zone Update is applied
V11 tzdata2009g (or later) Time Zone Update is applied
V13 tzdata2009s (or later) Time Zone Update is applied
V14 tzdata2010i (or later) Time Zone Update is applied
V15 tzdata2010o (or later) Time Zone Update is applied
V16 tzdata2011g (or later) Time Zone Update is applied
V17 tzdata2011i (or later) Time Zone Update is not applied
V18 tzdata2012c (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.

SQL> DROP function get_dst_offset;
Function dropped.

SQL> DROP function test_dst;

Function dropped.

SQL> DROP java source "OffsetFromStandard";

Java dropped.

SQL> select comp_name, version, status from dba_registry;

COMP_NAME
--------------------------------------------------------------------------------
VERSION                        STATUS
------------------------------ -----------
OWB
11.2.0.3.0                     VALID

Oracle Application Express
3.2.1.00.12                    VALID

Oracle Enterprise Manager
11.2.0.3.0                     VALID


COMP_NAME
--------------------------------------------------------------------------------
VERSION                        STATUS
------------------------------ -----------
OLAP Catalog
11.2.0.3.0                     VALID

Spatial
11.2.0.3.0                     VALID

Oracle Multimedia
11.2.0.3.0                     VALID


COMP_NAME
--------------------------------------------------------------------------------
VERSION                        STATUS
------------------------------ -----------
Oracle XML Database
11.2.0.3.0                     VALID

Oracle Text
11.2.0.3.0                     VALID

Oracle Expression Filter
11.2.0.3.0                     VALID


COMP_NAME
--------------------------------------------------------------------------------
VERSION                        STATUS
------------------------------ -----------
Oracle Rules Manager
11.2.0.3.0                     VALID

Oracle Workspace Manager
11.2.0.3.0                     VALID

Oracle Database Catalog Views
11.2.0.3.0                     VALID


COMP_NAME
--------------------------------------------------------------------------------
VERSION                        STATUS
------------------------------ -----------
Oracle Database Packages and Types
11.2.0.3.0                     VALID

JServer JAVA Virtual Machine
11.2.0.3.0                     VALID

Oracle XDK
11.2.0.3.0                     VALID


COMP_NAME
--------------------------------------------------------------------------------
VERSION                        STATUS
------------------------------ -----------
Oracle Database Java Packages
11.2.0.3.0                     VALID

OLAP Analytic Workspace
11.2.0.3.0                     VALID

Oracle OLAP API
11.2.0.3.0                     VALID


18 rows selected.

SQL> select owner, status, count(*) from all_objects where object_type like '%JAVA%' group by owner, status;

OWNER                          STATUS    COUNT(*)
------------------------------ ------- ----------
EXFSYS                         VALID           48
ORDSYS                         VALID         1948
MDSYS                          VALID          538
SYS                            VALID        21885

SQL> select role from dba_roles where role like '%JAVA%';
ROLE
------------------------------
JAVA_DEPLOY
JAVAUSERPRIV
JAVAIDPRIV
JAVASYSPRIV
JAVADEBUGPRIV
JAVA_ADMIN

6 rows selected.

SQL> select currently_used, name from  dba_feature_usage_statistics where name like '%Java%';

CURRE NAME
----- ----------------------------------------------------------------
FALSE Oracle Java Virtual Machine (user)
TRUE  Oracle Java Virtual Machine (system)

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options


$unzip p15897884_112030_Generic.zip

$cd 15897884

$/u01/app/oradb/product/11.2.0.3/dbhome_1/OPatch/opatch apply

$sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Fri Feb 22 10:32:06 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 4.0899E+10 bytes
Fixed Size                  2168160 bytes
Variable Size            4294970016 bytes
Database Buffers         3.6507E+10 bytes
Redo Buffers               95125504 bytes
Database mounted.
Database opened.
SQL> @?/javavm/admin/fixTZa.sql

Session altered.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


Java created.

No errors.

Java altered.

No errors.

Package created.

No errors.

Package body created.

No errors.

PL/SQL procedure successfully completed.


Call completed.

Testing various timezone DST attributes
FAILED for America/Creston 1325401200000 -25200000 0
FAILED for America/Resolute 1325397600000 -21600000 0
FAILED for America/Resolute 1331452799999 -21600000 0
FAILED for America/Resolute 1331452800000 -21600000 3600000
FAILED for America/Resolute 1352012399999 -21600000 3600000
FAILED for America/Resolute 1352012400000 -21600000 0
FAILED for America/Resolute 1362902399999 -21600000 0
FAILED for America/Resolute 1362902400000 -21600000 3600000
FAILED for America/Resolute 1383461999999 -21600000 3600000
FAILED for America/Resolute 1383462000000 -21600000 0
FAILED for America/Resolute 1394351999999 -21600000 0
FAILED for America/Resolute 1394352000000 -21600000 3600000
FAILED for America/Resolute 1414911599999 -21600000 3600000
FAILED for America/Resolute 1414911600000 -21600000 0
FAILED for America/Resolute 1425801599999 -21600000 0
FAILED for America/Resolute 1425801600000 -21600000 3600000
FAILED for America/Resolute 1446361199999 -21600000 3600000
FAILED for America/Resolute 1446361200000 -21600000 0
FAILED for America/Resolute 1457855999999 -21600000 0
FAILED for America/Resolute 1457856000000 -21600000 3600000
FAILED for America/Resolute 1478415599999 -21600000 3600000
FAILED for America/Resolute 1478415600000 -21600000 0
FAILED for Chile/EasterIsland 1335668399999 -21600000 3600000
FAILED for Chile/EasterIsland 1346558400000 -21600000 3600000
FAILED for Pacific/Easter 1335668399999 -21600000 3600000
FAILED for Pacific/Easter 1346558400000 -21600000 3600000
FAILED for America/Havana 1333256399999 -18000000 0
FAILED for America/Havana 1352005199999 -18000000 3600000
FAILED for America/Havana 1383454799999 -18000000 3600000
FAILED for America/Havana 1414904399999 -18000000 3600000
FAILED for America/Havana 1446353999999 -18000000 3600000
FAILED for America/Havana 1478408399999 -18000000 3600000
FAILED for America/Port-au-Prince 1331449200000 -18000000 3600000
FAILED for America/Port-au-Prince 1352008799999 -18000000 3600000
FAILED for Cuba 1333256399999 -18000000 0
FAILED for Cuba 1352005199999 -18000000 3600000
FAILED for Cuba 1383454799999 -18000000 3600000
FAILED for Cuba 1414904399999 -18000000 3600000
FAILED for Cuba 1446353999999 -18000000 3600000
FAILED for Cuba 1478408399999 -18000000 3600000
FAILED for America/Goose_Bay 1331445599999 -14400000 0
FAILED for America/Goose_Bay 1352005199999 -14400000 3600000
FAILED for America/Goose_Bay 1362895199999 -14400000 0
FAILED for America/Goose_Bay 1383454799999 -14400000 3600000
FAILED for America/Goose_Bay 1394344799999 -14400000 0
FAILED for America/Goose_Bay 1414904399999 -14400000 3600000
FAILED for America/Goose_Bay 1425794399999 -14400000 0
FAILED for America/Goose_Bay 1446353999999 -14400000 3600000
FAILED for America/Goose_Bay 1457848799999 -14400000 0
FAILED for America/Goose_Bay 1478408399999 -14400000 3600000
FAILED for America/Kralendijk 1325390400000 -14400000 0
FAILED for America/Lower_Princes 1325390400000 -14400000 0
FAILED for America/Santiago 1335668399999 -14400000 3600000
FAILED for America/Santiago 1346558400000 -14400000 3600000
FAILED for Antarctica/Palmer 1335668399999 -14400000 3600000
FAILED for Antarctica/Palmer 1346558400000 -14400000 3600000
FAILED for Chile/Continental 1335668399999 -14400000 3600000
FAILED for Chile/Continental 1346558400000 -14400000 3600000
FAILED for America/St_Johns 1331443799999 -12600000 0
FAILED for America/St_Johns 1352003399999 -12600000 3600000
FAILED for America/St_Johns 1362893399999 -12600000 0
FAILED for America/St_Johns 1383452999999 -12600000 3600000
FAILED for America/St_Johns 1394342999999 -12600000 0
FAILED for America/St_Johns 1414902599999 -12600000 3600000
FAILED for America/St_Johns 1425792599999 -12600000 0
FAILED for America/St_Johns 1446352199999 -12600000 3600000
FAILED for America/St_Johns 1457846999999 -12600000 0
FAILED for America/St_Johns 1478406599999 -12600000 3600000
FAILED for CNT 1331443799999 -12600000 0
FAILED for CNT 1352003399999 -12600000 3600000
FAILED for CNT 1362893399999 -12600000 0
FAILED for CNT 1383452999999 -12600000 3600000
FAILED for CNT 1394342999999 -12600000 0
FAILED for CNT 1414902599999 -12600000 3600000
FAILED for CNT 1425792599999 -12600000 0
FAILED for CNT 1446352199999 -12600000 3600000
FAILED for CNT 1457846999999 -12600000 0
FAILED for CNT 1478406599999 -12600000 3600000
FAILED for Canada/Newfoundland 1331443799999 -12600000 0
FAILED for Canada/Newfoundland 1352003399999 -12600000 3600000
FAILED for Canada/Newfoundland 1362893399999 -12600000 0
FAILED for Canada/Newfoundland 1383452999999 -12600000 3600000
FAILED for Canada/Newfoundland 1394342999999 -12600000 0
FAILED for Canada/Newfoundland 1414902599999 -12600000 3600000
FAILED for Canada/Newfoundland 1425792599999 -12600000 0
FAILED for Canada/Newfoundland 1446352199999 -12600000 3600000
FAILED for Canada/Newfoundland 1457846999999 -12600000 0
FAILED for Canada/Newfoundland 1478406599999 -12600000 3600000
FAILED for America/Araguaina 1350788400000 -10800000 3600000
FAILED for America/Araguaina 1361066399999 -10800000 3600000
FAILED for America/Araguaina 1382238000000 -10800000 3600000
FAILED for America/Araguaina 1392515999999 -10800000 3600000
FAILED for America/Araguaina 1413687600000 -10800000 3600000
FAILED for America/Araguaina 1424570399999 -10800000 3600000
FAILED for America/Araguaina 1445137200000 -10800000 3600000
FAILED for America/Araguaina 1456019999999 -10800000 3600000
FAILED for America/Araguaina 1476586800000 -10800000 3600000
FAILED for America/Bahia 1325383200000 -10800000 3600000
FAILED for America/Bahia 1330221599999 -10800000 3600000
FAILED for Atlantic/Stanley 1325386800000 -10800000 0
FAILED for Africa/Casablanca 1335664800000 0 3600000
FAILED for Africa/Casablanca 1342749599999 0 3600000
FAILED for Africa/Casablanca 1345428000000 0 3600000
FAILED for Africa/Casablanca 1348970399999 0 3600000
FAILED for Africa/Casablanca 1367114400000 0 3600000
FAILED for Africa/Casablanca 1380419999999 0 3600000
FAILED for Africa/Casablanca 1398564000000 0 3600000
FAILED for Africa/Casablanca 1411869599999 0 3600000
FAILED for Africa/Casablanca 1430013600000 0 3600000
FAILED for Africa/Casablanca 1443319199999 0 3600000
FAILED for Africa/Casablanca 1461463200000 0 3600000
FAILED for Africa/Casablanca 1474768799999 0 3600000
FAILED for Africa/Tripoli 1352505600000 3600000 0
FAILED for Africa/Tripoli 1364515199999 3600000 0
FAILED for Africa/Tripoli 1364515200000 3600000 3600000
FAILED for Africa/Tripoli 1382659199999 3600000 3600000
FAILED for Africa/Tripoli 1382659200000 3600000 0
FAILED for Africa/Tripoli 1395964799999 3600000 0
FAILED for Africa/Tripoli 1395964800000 3600000 3600000
FAILED for Africa/Tripoli 1414713599999 3600000 3600000
FAILED for Africa/Tripoli 1414713600000 3600000 0
FAILED for Africa/Tripoli 1427414399999 3600000 0
FAILED for Africa/Tripoli 1427414400000 3600000 3600000
FAILED for Africa/Tripoli 1446163199999 3600000 3600000
FAILED for Africa/Tripoli 1446163200000 3600000 0
FAILED for Africa/Tripoli 1458863999999 3600000 0
FAILED for Africa/Tripoli 1458864000000 3600000 3600000
FAILED for Africa/Tripoli 1477612799999 3600000 3600000
FAILED for Africa/Tripoli 1477612800000 3600000 0
FAILED for Libya 1352505600000 3600000 0
FAILED for Libya 1364515199999 3600000 0
FAILED for Libya 1364515200000 3600000 3600000
FAILED for Libya 1382659199999 3600000 3600000
FAILED for Libya 1382659200000 3600000 0
FAILED for Libya 1395964799999 3600000 0
FAILED for Libya 1395964800000 3600000 3600000
FAILED for Libya 1414713599999 3600000 3600000
FAILED for Libya 1414713600000 3600000 0
FAILED for Libya 1427414399999 3600000 0
FAILED for Libya 1427414400000 3600000 3600000
FAILED for Libya 1446163199999 3600000 3600000
FAILED for Libya 1446163200000 3600000 0
FAILED for Libya 1458863999999 3600000 0
FAILED for Libya 1458864000000 3600000 3600000
FAILED for Libya 1477612799999 3600000 3600000
FAILED for Libya 1477612800000 3600000 0
FAILED for Asia/Damascus 1333058400000 7200000 3600000
FAILED for Asia/Damascus 1364508000000 7200000 3600000
FAILED for Asia/Damascus 1395957600000 7200000 3600000
FAILED for Asia/Damascus 1427407200000 7200000 3600000
FAILED for Asia/Damascus 1458856800000 7200000 3600000
FAILED for Asia/Gaza 1333058400000 7200000 3600000
FAILED for Asia/Gaza 1348178399999 7200000 3600000
FAILED for Asia/Hebron 1325368800000 7200000 0
FAILED for Asia/Hebron 1333058399999 7200000 0
FAILED for Asia/Hebron 1333058400000 7200000 3600000
FAILED for Asia/Hebron 1348178399999 7200000 3600000
FAILED for Asia/Hebron 1348178400000 7200000 0
FAILED for Asia/Jerusalem 1381013999999 7200000 3600000
FAILED for Asia/Jerusalem 1412463599999 7200000 3600000
FAILED for Asia/Jerusalem 1443913199999 7200000 3600000
FAILED for Asia/Jerusalem 1458864000000 7200000 3600000
FAILED for Asia/Jerusalem 1475362800000 7200000 0
FAILED for Asia/Tel_Aviv 1381013999999 7200000 3600000
FAILED for Asia/Tel_Aviv 1412463599999 7200000 3600000
FAILED for Asia/Tel_Aviv 1443913199999 7200000 3600000
FAILED for Asia/Tel_Aviv 1458864000000 7200000 3600000
FAILED for Asia/Tel_Aviv 1475362800000 7200000 0
FAILED for Israel 1381013999999 7200000 3600000
FAILED for Israel 1412463599999 7200000 3600000
FAILED for Israel 1443913199999 7200000 3600000
FAILED for Israel 1458864000000 7200000 3600000
FAILED for Israel 1475362800000 7200000 0
FAILED for Africa/Juba 1325365200000 10800000 0
FAILED for Europe/Kaliningrad 1325365200000 10800000 0
FAILED for Europe/Minsk 1325365200000 10800000 0
FAILED for Europe/Moscow 1325361600000 14400000 0
FAILED for Europe/Samara 1325361600000 14400000 0
FAILED for Europe/Volgograd 1325361600000 14400000 0
FAILED for W-SU 1325361600000 14400000 0
FAILED for Asia/Yekaterinburg 1325354400000 21600000 0
FAILED for Antarctica/Davis 1325358000000 18000000 0
FAILED for Antarctica/Davis 1329854399999 18000000 0
FAILED for Asia/Novokuznetsk 1325350800000 25200000 0
FAILED for Asia/Novosibirsk 1325350800000 25200000 0
FAILED for Asia/Omsk 1325350800000 25200000 0
FAILED for Antarctica/Casey 1325336400000 39600000 0
FAILED for Antarctica/Casey 1329843599999 39600000 0
FAILED for Asia/Krasnoyarsk 1325347200000 28800000 0
FAILED for Asia/Irkutsk 1325343600000 32400000 0
FAILED for Asia/Yakutsk 1325340000000 36000000 0
FAILED for Asia/Sakhalin 1325336400000 39600000 0
FAILED for Asia/Vladivostok 1325336400000 39600000 0
FAILED for Asia/Anadyr 1325332800000 43200000 0
FAILED for Asia/Kamchatka 1325332800000 43200000 0
FAILED for Asia/Magadan 1325332800000 43200000 0
FAILED for Pacific/Fiji 1325329200000 43200000 3600000
FAILED for Pacific/Fiji 1327154399999 43200000 3600000
FAILED for Pacific/Fiji 1350741600000 43200000 3600000
FAILED for Pacific/Fiji 1358603999999 43200000 3600000
FAILED for Pacific/Fiji 1382191200000 43200000 3600000
FAILED for Pacific/Fiji 1390053599999 43200000 3600000
FAILED for Pacific/Fiji 1413640800000 43200000 3600000
FAILED for Pacific/Fiji 1421503199999 43200000 3600000
FAILED for Pacific/Fiji 1445090400000 43200000 3600000
FAILED for Pacific/Fiji 1453557599999 43200000 3600000
FAILED for Pacific/Fiji 1477144800000 43200000 3600000
FAILED for MIT 1325325600000 46800000 3600000
FAILED for MIT 1333202399999 46800000 3600000
FAILED for MIT 1333202400000 46800000 0
FAILED for MIT 1348927199999 46800000 0
FAILED for MIT 1348927200000 46800000 3600000
FAILED for MIT 1365256799999 46800000 3600000
FAILED for MIT 1365256800000 46800000 0
FAILED for MIT 1380376799999 46800000 0
FAILED for MIT 1380376800000 46800000 3600000
FAILED for MIT 1396706399999 46800000 3600000
FAILED for MIT 1396706400000 46800000 0
FAILED for MIT 1411826399999 46800000 0
FAILED for MIT 1411826400000 46800000 3600000
FAILED for MIT 1428155999999 46800000 3600000
FAILED for MIT 1428156000000 46800000 0
FAILED for MIT 1443275999999 46800000 0
FAILED for MIT 1443276000000 46800000 3600000
FAILED for MIT 1459605599999 46800000 3600000
FAILED for MIT 1459605600000 46800000 0
FAILED for MIT 1474725599999 46800000 0
FAILED for MIT 1474725600000 46800000 3600000
FAILED for Pacific/Apia 1325325600000 46800000 3600000
FAILED for Pacific/Apia 1333202399999 46800000 3600000
FAILED for Pacific/Apia 1333202400000 46800000 0
FAILED for Pacific/Apia 1348927199999 46800000 0
FAILED for Pacific/Apia 1348927200000 46800000 3600000
FAILED for Pacific/Apia 1365256799999 46800000 3600000
FAILED for Pacific/Apia 1365256800000 46800000 0
FAILED for Pacific/Apia 1380376799999 46800000 0
FAILED for Pacific/Apia 1380376800000 46800000 3600000
FAILED for Pacific/Apia 1396706399999 46800000 3600000
FAILED for Pacific/Apia 1396706400000 46800000 0
FAILED for Pacific/Apia 1411826399999 46800000 0
FAILED for Pacific/Apia 1411826400000 46800000 3600000
FAILED for Pacific/Apia 1428155999999 46800000 3600000
FAILED for Pacific/Apia 1428156000000 46800000 0
FAILED for Pacific/Apia 1443275999999 46800000 0
FAILED for Pacific/Apia 1443276000000 46800000 3600000
FAILED for Pacific/Apia 1459605599999 46800000 3600000
FAILED for Pacific/Apia 1459605600000 46800000 0
FAILED for Pacific/Apia 1474725599999 46800000 0
FAILED for Pacific/Apia 1474725600000 46800000 3600000
FAILED for Pacific/Fakaofo 1325329200000 46800000 0
##
Bug is in fact present, so this patch is needed
##
(Perhaps) modifying ild_ub1$ for rehotloading of sun/util/calendar/ZoneInfoFile
obj# = 45849
nbytes %d = 64512, 1st read = 64512, 2nd read = -1
96 397776 385632 12144 joxbtflag>>8 = 3
===

PL/SQL procedure successfully completed.

########################################################
Bug is in fact present, so this patch is needed
Proceed by restarting the database and running script
fixTZb
########################################################

PL/SQL procedure successfully completed.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup migrate
ORACLE instance started.

Total System Global Area 4.0899E+10 bytes
Fixed Size                  2168160 bytes
Variable Size            4294970016 bytes
Database Buffers         3.6507E+10 bytes
Redo Buffers               95125504 bytes
Database mounted.
Database opened.
SQL> @?/javavm/admin/fixTZb.sql

Session altered.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


Call completed.

Testing various timezone DST attributes
########################################################
Bug is no longer present.  Patch succeeded.
########################################################

PL/SQL procedure successfully completed.

drop java source fixTZ
drop package fixTZ

PL/SQL procedure successfully completed.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 4.0899E+10 bytes
Fixed Size                  2168160 bytes
Variable Size            4294970016 bytes
Database Buffers         3.6507E+10 bytes
Redo Buffers               95125504 bytes
Database mounted.
Database opened.
SQL>


Всё, DST установлен.


Более коротко делаем так:

Проверить Timezone Version в БД:

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
     FROM DATABASE_PROPERTIES
     WHERE PROPERTY_NAME LIKE 'DST_%'
     ORDER BY PROPERTY_NAME;

SQL> SELECT version FROM v$timezone_file; VERSION ---------- 19

Для установки DST обновления Oracle JVM (Patch 15897884) необходимо:
1) Выполнить скрипт:
SQL> @?/javavm/admin/fixTZa.sql

2) Выполнить:
SQL> shutdown immediate
SQL> startup migrate

3) Выполнить скрипт:
SQL> @?/javavm/admin/fixTZb.sql

4) Выполнить:
SQL> shutdown immediate
SQL> startup