30 Ekim 2016’da yaz saati değişikliği nedeniyle Oracle’ın metalinkte yayınladığı DST patch’leri uygulamıştık. 30 Ekim saat 04:00 sonrası eğer saat tekrar 03:00’e dönmüyorsa, güncellemeniz başarılı olacaktı, nitekim böyle de oldu ancak DST patch’lerini geçmemize gerek yok dediğimiz bazı Oracle db’lerimizin alert.log’larında saat farklılıklarını gördüğümüzden db’leri stop-start ettikten sonra düzelmişti. Eğer ilerde tekrar yaz saati değişikliği söz konusu olursa sizlere faydası olabilir düşüncesiyle paylaşıyorum.
OJVM DSTV28 UPDATE OCT 2016 – TZDATA2016G (Patch) -> p24701882_112040_Generic.zip
DST ->
DBMS_DST_scriptsV1.9.zip
p24701840_112040_AIX64-5L.zip
p24701840_112040_Linux-x86-64.zip
ALTER session SET time_zone='Europe/Istanbul'; SELECT to_timestamp_tz('30-10-2016 02:00:00','DD-MM-YYYY HH24:MI:SS') + NUMTODSINTERVAL(level*5, 'MINUTE') dt FROM dual CONNECT BY level <= 40;
— aşağıdaki gibi olMAMAsı lazım:
30/10/16 03:40:00,000000000 +03:00
30/10/16 03:45:00,000000000 +03:00
30/10/16 03:50:00,000000000 +03:00
30/10/16 03:55:00,000000000 +03:00
30/10/16 03:00:00,000000000 +02:00
30/10/16 03:05:00,000000000 +02:00
30/10/16 03:10:00,000000000 +02:00
30/10/16 03:15:00,000000000 +02:00
30/10/16 03:20:00,000000000 +02:00
30/10/16 03:25:00,000000000 +02:00
30/10/16 03:30:00,000000000 +02:00
— aşağıdaki gibi olması lazım:
30/10/16 03:45:00,000000000 +03:00
30/10/16 03:50:00,000000000 +03:00
30/10/16 03:55:00,000000000 +03:00
30/10/16 04:00:00,000000000 +03:00
30/10/16 04:05:00,000000000 +03:00
— Sisteminizde yama geçişi sonrası timezone versiyonu 28’e yükselmiş olmalı:
SELECT VERSION FROM V$TIMEZONE_FILE; select * from v$timezone_file; -- 2190090.1 zdump -v Europe/Istanbul | grep 2016 -- 412160.1
Example for 11.2.0.4 – the DST patch want to apply is not available for 11.2.0.4:
** Download the 11.2.0.1, 11.2.0.2 or 11.2.0.3 DST Patch for your platform.
** Unzip the RDBMS DST patch
** Copy the 2 *.dat files and the readme_xx.txt from the unzipped patch -patchnr-/files/oracore/zoneinfo directory to the 11.2.0.4 $ORACLE_HOME/oracore/zoneinfo directory
Note: unlike what the readme may say, in 11.2 and up there is no need to shut down or stop the database or other processes seen you are simply adding new files, not replacing used ones.
** Copy the 2 dat files from the patch patchnr-/files/oracore/zoneinfo/big directory to the server $ORACLE_HOME/oracore/zoneinfo/big directory
** Copy the 2 dat files from the patch patchnr-/files/oracore/zoneinfo/little directory to the server $ORACLE_HOME/oracore/zoneinfo/little directory
** Update all databases using this 11.2.0.4 home by:
testdbserver01@oracle cp *.dat $ORACLE_HOME/oracore/zoneinfo testdbserver01@oracle cp *.dat $ORACLE_HOME/oracore/zoneinfo/big testdbserver01@oracle cp *.dat $ORACLE_HOME/oracore/zoneinfo/little testdbserver02@oracle cp *.dat $ORACLE_HOME/oracore/zoneinfo testdbserver02@oracle cp *.dat $ORACLE_HOME/oracore/zoneinfo/big testdbserver02@oracle cp *.dat $ORACLE_HOME/oracore/zoneinfo/little testdbserver01@oracle ls -la total 136 drwxr-xr-x 2 oracle dba 256 Jan 08 2015 . drwxr-xr-x 4 oracle dba 256 Oct 14 15:01 .. -rw-r--r-- 1 oracle dba 6294 Jan 08 2015 countstarTSTZ.sql -rw-r--r-- 1 oracle dba 6909 Jan 08 2015 countstatsTSTZ.sql -rw-r--r-- 1 oracle dba 19502 Aug 22 2014 upg_tzv_apply.sql -rw-r--r-- 1 oracle dba 31010 Aug 22 2014 upg_tzv_check.sql testdbserver01@oracle SQL> @upg_tzv_check.sql; INFO: Starting with RDBMS DST update preparation. INFO: NO actual RDBMS DST update will be done by this script. INFO: If an ERROR occurs the script will EXIT sqlplus. INFO: Doing checks for known issues ... INFO: Database version is 11.2.0.3 . INFO: Database RDBMS DST version is DSTv14 . INFO: No known issues detected. INFO: Now detecting new RDBMS DST version. A prepare window has been successfully started. INFO: Newest RDBMS DST version detected is DSTv28 . INFO: Next step is checking all TSTZ data. INFO: It might take a while before any further output is seen ... A prepare window has been successfully ended. INFO: A newer RDBMS DST version than the one currently used is found. INFO: Note that NO DST update was yet done. INFO: Now run upg_tzv_apply.sql to do the actual RDBMS DST update. INFO: Note that the upg_tzv_apply.sql script will INFO: restart the database 2 times WITHOUT any confirmation or prompt. WARNING: This RAC database is not started in single instance mode. WARNING: Set cluster_database = false and start as single instance WARNING: BEFORE running upg_tzv_apply(_cbd).sql ! WARNING: This is REQUIRED ! SQL> @upg_tzv_apply.sql; INFO: If an ERROR occurs the script will EXIT sqlplus. INFO: The database RDBMS DST version will be updated to DSTv28 . ERROR: This RAC database is not started in single instance mode ! ERROR: Set cluster_database = false and start as single instance ERROR: and then re-run upg_tzv_apply.sql . ERROR: This is required by the startup UPGRADE needed to do the DST update. DECLARE * ERROR at line 1: ORA-20219: Stopping script - see previous message ..... ORA-06512: at line 77 5) Can the RDBMS DST version be updated without downtime? Or in a "rolling" fashion on RAC? Short answer: no. Detailed answer: * ( if needed) For the apply of an RDBMS DST patch itself using Opatch or manually -> no downtime needed even if the readme of the patch may state otherwise. * For the run of upg_tzv_check.sql -> no downtime needed. * For the first part of upg_tzv_apply.sql after the "INFO: Restarting the database in UPGRADE mode to start the DST upgrade." message -> downtime needed and a RAC database need to be in single instance mode (cluster_database = false) , as required by the "startup UPGRADE" . upg_tzv_apply.sql will refuse to run if the database is started with cluster_database = true. * For the second part of upg_tzv_apply.sql after the "INFO: Upgrading all non-SYS TSTZ data." message -> the DBMS_DST.UPGRADE_DATABASE used by upg_tzv_apply.sql will take exclusive locks on the non-SYS tables when they are actually upgraded, so this might provoke issues (deadlocks have been observed) and we strongly suggest to NOT start any applications who use the tables processed until the complete DST update is done. Other applications may already be restarted if needed. -- 1.node: SQL> alter system set cluster_database = false scope=spfile sid='*'; System altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORA-01102: cannot mount database in EXCLUSIVE mode SQL> startup ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 603980016 bytes Database Buffers 1795162112 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. SQL> testdbserver02@oracle . oraenv ORACLE_SID = [TSTDB2] ? TSTDB2 ORACLE_HOME = [/oracle] ? /oracle/app/oracle/product/11.2.0/dbhome_1 The Oracle base remains unchanged with value /oracle/app/oracle testdbserver02@oracle sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 14 15:19:07 2016 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, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> -- 1.node: SQL> @upg_tzv_check.sql; INFO: Starting with RDBMS DST update preparation. INFO: NO actual RDBMS DST update will be done by this script. INFO: If an ERROR occurs the script will EXIT sqlplus. INFO: Doing checks for known issues ... INFO: Database version is 11.2.0.3 . INFO: Database RDBMS DST version is DSTv14 . INFO: No known issues detected. INFO: Now detecting new RDBMS DST version. A prepare window has been successfully started. INFO: Newest RDBMS DST version detected is DSTv28 . INFO: Next step is checking all TSTZ data. INFO: It might take a while before any further output is seen ... A prepare window has been successfully ended. INFO: A newer RDBMS DST version than the one currently used is found. INFO: Note that NO DST update was yet done. INFO: Now run upg_tzv_apply.sql to do the actual RDBMS DST update. INFO: Note that the upg_tzv_apply.sql script will INFO: restart the database 2 times WITHOUT any confirmation or prompt. SQL> @upg_tzv_apply.sql; INFO: If an ERROR occurs the script will EXIT sqlplus. INFO: The database RDBMS DST version will be updated to DSTv28 . WARNING: This script will restart the database 2 times WARNING: WITHOUT asking ANY confirmation. WARNING: Hit control-c NOW if this is not intended. INFO: Restarting the database in UPGRADE mode to start the DST upgrade. Database closed. Database dismounted. ORACLE instance shut down. ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 603980016 bytes Database Buffers 1795162112 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. INFO: Starting the RDBMS DST upgrade. INFO: Upgrading all SYS owned TSTZ data. INFO: It might take time before any further output is seen ... An upgrade window has been successfully started. INFO: Restarting the database in NORMAL mode to upgrade non-SYS TSTZ data. Database closed. Database dismounted. ORACLE instance shut down. ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 603980016 bytes Database Buffers 1795162112 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. INFO: Upgrading all non-SYS TSTZ data. INFO: It might take time before any further output is seen ... INFO: Do NOT start any application yet that uses TSTZ data! INFO: Next is a list of all upgraded tables: 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 INFO: Total failures during update of TSTZ data: 0 . An upgrade window has been successfully ended. INFO: Your new Server RDBMS DST version is DSTv28 . INFO: The RDBMS DST update is successfully finished. INFO: Make sure to exit this sqlplus session. INFO: Do not use it for timezone related selects. SQL> --1.node: SQL> alter system set cluster_database = true scope=spfile sid='*'; System altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> --2.node: testdbserver02@oracle sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 14 15:28:31 2016 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 620757232 bytes Database Buffers 1778384896 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. SQL> -- 1.node: SQL> startup ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 603980016 bytes Database Buffers 1795162112 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. SQL> SQL> SELECT VERSION FROM V$TIMEZONE_FILE; VERSION ---------- 28 SQL> SELECT to_timestamp_tz('30-10-2016 02:00:00','DD-MM-YYYY HH24:MI:SS') 2 + NUMTODSINTERVAL(level*30, 'MINUTE') dt 3 FROM dual 4 CONNECT BY level <= 10; DT --------------------------------------------------------------------------- 30-OCT-16 02.30.00.000000000 AM +03:00 30-OCT-16 03.00.00.000000000 AM +03:00 30-OCT-16 03.30.00.000000000 AM +03:00 30-OCT-16 04.00.00.000000000 AM +03:00 30-OCT-16 04.30.00.000000000 AM +03:00 30-OCT-16 05.00.00.000000000 AM +03:00 30-OCT-16 05.30.00.000000000 AM +03:00 30-OCT-16 06.00.00.000000000 AM +03:00 30-OCT-16 06.30.00.000000000 AM +03:00 30-OCT-16 07.00.00.000000000 AM +03:00 10 rows selected. SQL> testdbserver01@root </> date Fri Oct 14 17:26:17 +03 2016 testdbserver01@root </> date 10300359 Sun Oct 30 03:59:33 +03 2016 testdbserver01@root </> date Sun Oct 30 03:59:51 +03 2016 testdbserver01@root </> date Sun Oct 30 03:59:58 +03 2016 testdbserver01@root </> date Sun Oct 30 04:00:01 +03 2016 testdbserver01@root </> date Sun Oct 30 04:00:03 +03 2016 testdbserver01@root </> date 10141728 Fri Oct 14 17:28:33 +03 2016 testdbserver01@root </>
################## OJVM patch ####################
— Applying the DSTv28 update for the Oracle Database (Doc ID 2190090.1)
— https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=40360176028216&id=2190090.1&_adf.ctrl-state=17d9edp4b8_50#aref_section321
— 7) The OJVM DSTv28 patch 24701882
— readme: https://updates.oracle.com/Orion/Services/download?type=readme&aru=20697858
select owner, status, count(*) from all_objects where object_type like '%JAVA%' group by owner, status;
select * from all_objects where object_type like '%JAVA%' and owner not in ('SYS','EXFSYS','ORDSYS','MDSYS');
testdbserver01@oracle unzip p24701882_112030_Generic.zip testdbserver01@oracle ./post -apply ksh: ./post: 0403-006 Execute permission denied. testdbserver01@oracle ls post testdbserver01@oracle ls -al total 8 drwxr-xr-x 2 oracle dba 256 Oct 21 21:36 . drwxr-xr-x 3 oracle dba 256 Oct 21 21:36 .. -rw-r--r-- 1 oracle dba 3575 Oct 21 21:36 post testdbserver01@oracle chmod +x post testdbserver01@oracle ls -al total 8 drwxr-xr-x 2 oracle dba 256 Oct 21 21:36 . drwxr-xr-x 3 oracle dba 256 Oct 21 21:36 .. -rwxr-xr-x 1 oracle dba 3575 Oct 21 21:36 post testdbserver01@oracle ./post -apply testdbserver01@oracle opatch apply Oracle Interim Patch Installer version 11.2.0.3.5 Copyright (c) 2013, Oracle Corporation. All rights reserved. Oracle Home : /oracle/app/oracle/product/11.2.0/dbhome_1 Central Inventory : /oracle/app/oraInventory from : /oracle/app/oracle/product/11.2.0/dbhome_1/oraInst.loc OPatch version : 11.2.0.3.5 OUI version : 11.2.0.3.0 Log file location : /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/24701882_Oct_27_2016_18_27_41/apply2016-10-27_18-27-41PM_1.log Applying interim patch '24701882' to OH '/oracle/app/oracle/product/11.2.0/dbhome_1' Verifying environment and performing prerequisite checks... All checks passed. Provide your email address to be informed of security issues, install and initiate Oracle Configuration Manager. Easier for you if you use your My Oracle Support Email address/User Name. Visit http://www.oracle.com/support/policies.html for details. Email address/User Name: You have not provided an email address for notification of security issues. Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: y Backing up files... Patching component oracle.javavm.server, 11.2.0.3.0... Verifying the update... Patching in all-node mode. Updating nodes 'testdbserver02' Apply-related files are: FP = "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_files.txt" DP = "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_dirs.txt" MP = "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/make_cmds.txt" RC = "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/remote_cmds.txt" Instantiating the file "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_files.txt.instantiated" by replacing $ORACLE_HOME in "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_files.txt" with actual path. Propagating files to remote nodes... Instantiating the file "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_dirs.txt.instantiated" by replacing $ORACLE_HOME in "/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_dirs.txt" with actual path. Propagating directories to remote nodes... Patch 24701882 successfully applied Log file location: /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/24701882_Oct_27_2016_18_27_41/apply2016-10-27_18-27-41PM_1.log OPatch succeeded. testdbserver01@oracle testdbserver01@oracle testdbserver01@oracle cd ORACLE_HOME/javavm/admin/fixTZa ksh: ORACLE_HOME/javavm/admin/fixTZa: not found. testdbserver01@oracle cd $ORACLE_HOME/javavm/admin/fixTZa ksh: /oracle/app/oracle/product/11.2.0/dbhome_1/javavm/admin/fixTZa: not found. testdbserver01@oracle cd $ORACLE_HOME/javavm/admin/ testdbserver01@oracle ls -la total 181592 drwxr-xr-x 2 oracle dba 256 Oct 27 18:28 . drwxr-xr-x 8 oracle dba 256 Aug 21 2015 .. -rw-r--r-- 1 oracle dba 92185501 Aug 26 2011 classes.bin -rw-r--r-- 1 oracle dba 373518 Oct 21 21:36 fixTZa.sql -rw-r--r-- 1 oracle dba 4406 Oct 21 21:36 fixTZb.sql -rw-r--r-- 1 oracle dba 395767 Aug 26 2011 libjtcjt.so testdbserver01@oracle sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 27 18:30:06 2016 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, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> @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/Metlakatla 1451638800000 -32400000 0 ... FAILED for Pacific/Fakaofo 1451559600000 46800000 0 ## Bug is in fact present, so this patch is needed ## (Perhaps) modifying ild_ub1$ for rehotloading of sun/util/calendar/ZoneInfoFile obj# = 45647 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> ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile; System altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup migrate ORA-01102: cannot mount database in EXCLUSIVE mode --2.node'da; testdbserver02@oracle . oraenv ORACLE_SID = [TSTDB2] ? TSTDB2 ORACLE_HOME = [/oracle] ? /oracle/app/oracle/product/11.2.0/dbhome_1 The Oracle base remains unchanged with value /oracle/app/oracle testdbserver02@oracle sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 27 19:00:59 2016 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, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. --1.node'da SQL> startup migrate ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 637534448 bytes Database Buffers 1761607680 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. SQL> @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> ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile; System altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 637534448 bytes Database Buffers 1761607680 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. SQL> --2.node'da: SQL> startup ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2223888 bytes Variable Size 620757232 bytes Database Buffers 1778384896 bytes Redo Buffers 20459520 bytes Database mounted. Database opened. SQL>
Referans: Applying the DSTv28 update for the Oracle Database (Doc ID 2190090.1)