MINI MINI MANI MO
Rem
Rem $Header: rdbms/admin/utltz_upg_apply.sql /main/4 2017/09/08 16:58:12 huagli Exp $
Rem
Rem utltz_upg_apply.sql
Rem
Rem Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
Rem
Rem NAME
Rem utltz_upg_apply.sql - TIME ZONE Upgrade Apply Script
Rem (for 11gR2 or higher)
Rem
Rem DESCRIPTION
Rem This script update the database to the highest installed
Rem timezone definitions found by the utltz_upg_check.sql script.
Rem
Rem NOTES
Rem * The utltz_upg_check.sql script must be run before this script.
Rem * This script must be run using SQL*PLUS from the database home.
Rem * This script must be connected AS SYSDBA to run.
Rem * The database need to be 11.2.0.1 or higher.
Rem * The database need to be single instance ( cluster_database = FALSE ).
Rem * The database will be restarted 2 times without asking any confirmation.
Rem * This script takes no arguments.
Rem * This script WILL exit SQL*PLUS when an error is detected
Rem * The dba_recyclebin WILL be purged.
Rem * TZ_VERSION in Registry$database will be updated with new DST version after the DST upgrade.
Rem * The UPG_TZV table will be dropped.
Rem * the script will write a line into the alert.log before restarting the db and when ending succesfully.
Rem
Rem BEGIN SQL_FILE_METADATA
Rem SQL_SOURCE_FILE: rdbms/admin/utltz_upg_apply.sql
Rem SQL_SHIPPED_FILE: rdbms/admin/utltz_upg_apply.sql
Rem SQL_PHASE: UPGRADE
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE:
Rem END SQL_FILE_METADATA
Rem
Rem MODIFIED (MM/DD/YY)
Rem huagli 08/31/17 - 26721930: DB version change
Rem huagli 06/09/17 - 25988996: CDB/PDB RAC check and various cleanup
Rem huagli 04/07/17 - 25856520: handle PDB name correctly
Rem huagli 01/31/17 - renamed to utltz_upg_apply.sql and added to shiphome
Rem gvermeir 08/22/14 - updated to handle CDB/PDB (Multitenant) DST updates
Rem gvermeir 07/10/14 - sync version with upg_tzv_check
Rem gvermeir 05/23/14 - sync version with upg_tzv_check
Rem gvermeir 03/17/14 - logging of time makes more sense in minutes
Rem gvermeir 02/20/14 - added logging to alert.log
Rem gvermeir 12/23/13 - minor changes on error handling
Rem gvermeir 09/20/13 - enhanced error handling
Rem gvermeir 06/12/13 - Enhanced output
Rem gvermeir 05/16/13 - Typos fixed
Rem gvermeir 05/13/13 - Initial internal release
Rem gvermeir 04/23/13 - created
Rem
@@?/rdbms/admin/sqlsessstart.sql
SET TERMOUT OFF
SET SERVEROUTPUT OFF
SET FEEDBACK OFF
-- Get current time to track TZ upgrade time
VARIABLE V_TIME NUMBER
EXEC :V_TIME := DBMS_UTILITY.GET_TIME
-- Set client_info so one can use:
-- SELECT ... FROM v$session WHERE client_info = 'upg_tzv';
EXEC DBMS_APPLICATION_INFO.SET_CLIENT_INFO('upg_tzv');
-- Alter session to avoid performance issues
ALTER SESSION SET NLS_SORT = 'BINARY';
WHENEVER SQLERROR EXIT
SET TERMOUT ON
SET SERVEROUTPUT ON
-- Give some info
EXEC DBMS_OUTPUT.PUT_LINE('INFO: If an ERROR occurs, the script will EXIT SQL*Plus.' );
-- check if DB is READ WRITE
DECLARE
v_checkvar1 VARCHAR2(10 CHAR);
BEGIN
EXECUTE IMMEDIATE 'SELECT open_mode FROM v$database' INTO v_checkvar1;
IF v_checkvar1 != TO_CHAR('READ WRITE') THEN
DBMS_OUTPUT.PUT_LINE('ERROR: This database is in ' || v_checkvar1 ||' mode.');
DBMS_OUTPUT.PUT_LINE('ERROR: Please restart the database in READ WRITE mode ');
RAISE_APPLICATION_ERROR(-20210, 'Stopping script - see previous message ...');
END IF;
END;
/
-- Check if user is SYS
DECLARE
v_checkvar1 VARCHAR2(10 CHAR);
BEGIN
EXECUTE IMMEDIATE 'SELECT SUBSTR(SYS_CONTEXT(''USERENV'',''CURRENT_USER''), 1, 10)
FROM dual'
INTO v_checkvar1;
IF v_checkvar1 = 'SYS' THEN
NULL;
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: Current connection is not a sysdba connection!');
RAISE_APPLICATION_ERROR(-20001, 'Stopping script - see previous message ...');
END IF;
END;
/
-- All pre-checks
DECLARE
V_DBVERSION VARCHAR2(8 CHAR);
V_ISPDB VARCHAR2(3 CHAR);
V_NEWDBTZV NUMBER;
V_OLDDBTZV NUMBER;
V_CHECKNUM1 NUMBER;
V_CHECKVAR1 VARCHAR2(10 CHAR);
V_CHECKVAR2 VARCHAR2(128);
BEGIN
-- Check if utltz_upg_check.sql has been run
BEGIN
EXECUTE IMMEDIATE 'SELECT new_tz_version, ispdb FROM upg_tzv' INTO V_NEWDBTZV, V_ISPDB;
EXCEPTION
WHEN NO_DATA_FOUND THEN -- no rows in UPG_TZV
DBMS_OUTPUT.PUT_LINE('ERROR: UPG_TZV has no rows.');
DBMS_OUTPUT.PUT_LINE('ERROR: You need to run utltz_upg_check.sql BEFORE utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: NO update of the DST version was done!');
RAISE_APPLICATION_ERROR(-20212,'Stopping script - see previous message ...');
WHEN TOO_MANY_ROWS THEN -- more than 1 row in UPG_TZV
DBMS_OUTPUT.PUT_LINE('ERROR: UPG_TZV has more than one row.');
DBMS_OUTPUT.PUT_LINE('ERROR: You need to run utltz_upg_check.sql BEFORE utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: NO update of the DST version was done!');
RAISE_APPLICATION_ERROR(-20213,'Stopping script - see previous message ...');
WHEN OTHERS THEN
IF SQLCODE = -904 THEN -- UPG_TZV exists but no NEW_TZ_VERSION
DBMS_OUTPUT.PUT_LINE('ERROR: UPG_TZV does not exist.');
DBMS_OUTPUT.PUT_LINE('ERROR: You need to run utltz_upg_check.sql BEFORE utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: NO update of the DST version was done!');
RAISE_APPLICATION_ERROR(-20214,'Stopping script - see previous message ...');
END IF;
IF SQLCODE = -942 THEN -- no UPG_TZV table
DBMS_OUTPUT.PUT_LINE('ERROR: UPG_TZV does not exist.');
DBMS_OUTPUT.PUT_LINE('ERROR: You need to run utltz_upg_check.sql BEFORE utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: NO update of the DST version was done!');
RAISE_APPLICATION_ERROR(-20215,'Stopping script - see previous message ...');
END IF;
IF V_NEWDBTZV IS NULL THEN -- NEW_TZ_VERSION is null
DBMS_OUTPUT.PUT_LINE('ERROR: NEW_TZ_VERSION is null.');
DBMS_OUTPUT.PUT_LINE('ERROR: You need to run utltz_upg_check.sql BEFORE utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: NO update of the DST version was done!');
RAISE_APPLICATION_ERROR(-20216,'Stopping script - see previous message ...');
END IF;
END;
-- Check if current DST version is lower than the one found by utltz_upg_check.sql
BEGIN
EXECUTE IMMEDIATE 'SELECT TO_NUMBER(SUBSTR(property_value, 1, 3))
FROM database_properties
WHERE property_name = ''DST_PRIMARY_TT_VERSION'''
INTO V_OLDDBTZV;
IF V_OLDDBTZV < V_NEWDBTZV THEN
DBMS_OUTPUT.PUT_LINE('INFO: The database RDBMS DST version will be updated to DSTv' ||
TO_CHAR(V_NEWDBTZV) ||' .');
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: No newer DST update was detected.');
DBMS_OUTPUT.PUT_LINE('ERROR: You need to run utltz_upg_check.sql BEFORE utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: NO update of the DST version was done!');
RAISE_APPLICATION_ERROR(-20217,'Stopping script - see previous message ...');
END IF;
END;
-- Check if DST_UPGRADE_STATE is NONE
BEGIN
EXECUTE IMMEDIATE 'SELECT SUBSTR(property_value, 1, 10)
FROM database_properties
WHERE property_name = ''DST_UPGRADE_STATE'''
INTO V_CHECKVAR1;
IF V_CHECKVAR1 = TO_CHAR('NONE') THEN
NULL;
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: Current DST_UPGRADE_STATE is '|| V_CHECKVAR1 || ' !');
DBMS_OUTPUT.PUT_LINE('ERROR: DST_UPGRADE_STATE in DATABASE_PROPERTIES need to be NONE ');
DBMS_OUTPUT.PUT_LINE('ERROR: before running utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: See note 977512.1 for 11gR2 or note 1509653.1 for 12c .');
RAISE_APPLICATION_ERROR(-20218,'Stopping script - see previous message ...');
END IF;
END;
-- For PDB, we make sure that PDB is only opened in a single instance
-- For non-CDB case and CDB$ROOT, we make sure there is only one instance
IF V_ISPDB = 'YES' THEN
-- Check if PDB is only opened on a single instance
EXECUTE IMMEDIATE 'SELECT COUNT(*)
FROM gv$pdbs
WHERE name = (SELECT SYS_CONTEXT(''USERENV'',''CON_NAME'') FROM dual) AND
open_mode != ''MOUNTED'''
INTO V_CHECKNUM1;
IF V_CHECKNUM1 = 1 THEN
NULL;
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: This PDB is not started in a single instance!');
DBMS_OUTPUT.PUT_LINE('ERROR: Start this PDB in one single instance only');
DBMS_OUTPUT.PUT_LINE('ERROR: and then re-run utltz_upg_apply.sql.');
RAISE_APPLICATION_ERROR(-20219,'Stopping script - see previous message ...');
END IF;
ELSE
-- Check if DB is single instance, if not, end script
EXECUTE IMMEDIATE 'SELECT UPPER(value)
FROM v$system_parameter
WHERE UPPER(name)=''CLUSTER_DATABASE'''
INTO V_CHECKVAR1;
IF V_CHECKVAR1 = TO_CHAR('FALSE') THEN
NULL;
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: This RAC database is not started in single instance mode!');
DBMS_OUTPUT.PUT_LINE('ERROR: Set cluster_database = false and start as single instance');
DBMS_OUTPUT.PUT_LINE('ERROR: and then re-run utltz_upg_apply.sql.');
DBMS_OUTPUT.PUT_LINE('ERROR: This is required by the startup UPGRADE needed to do the DST update.');
RAISE_APPLICATION_ERROR(-20219,'Stopping script - see previous message ...');
END IF;
END IF;
END;
/
-- Warn if this is runned against CDB$ROOT on Multitenant and if there are open PDB's
DECLARE
V_DBVERSION VARCHAR2(8 CHAR);
V_CHECKNUM1 NUMBER;
V_CHECKVAR1 VARCHAR2(10 CHAR);
V_CHECKVAR2 VARCHAR2(128 CHAR);
BEGIN
BEGIN
EXECUTE IMMEDIATE 'SELECT SUBSTR(version, 1, 4) FROM v$instance'
INTO V_DBVERSION;
END;
BEGIN
IF V_DBVERSION >= '12.1' THEN
EXECUTE IMMEDIATE 'SELECT cdb FROM v$database' INTO V_CHECKVAR1;
IF V_CHECKVAR1 = TO_CHAR('NO') THEN
NULL;
ELSE
DBMS_OUTPUT.PUT_LINE('INFO: This database is a Multitenant database.');
EXECUTE IMMEDIATE 'SELECT SYS_CONTEXT(''USERENV'',''CON_NAME'') FROM dual' INTO V_CHECKVAR2;
IF V_CHECKVAR2 = TO_CHAR('CDB$ROOT') THEN
DBMS_OUTPUT.PUT_LINE('INFO: Current container is CDB$ROOT .');
DBMS_OUTPUT.PUT_LINE('INFO: Updating the RDBMS DST version of the CDB / CDB$ROOT database ');
DBMS_OUTPUT.PUT_LINE('INFO: will NOT update the RDBMS DST version of PDB databases in this CDB.');
EXECUTE IMMEDIATE 'SELECT COUNT(*)
FROM v$pdbs
WHERE name != TO_CHAR(''PDB$SEED'') AND
open_mode != TO_CHAR(''MOUNTED'')'
INTO V_CHECKNUM1;
IF V_CHECKNUM1 = TO_NUMBER('0') THEN
DBMS_OUTPUT.PUT_LINE('INFO: There are no open PDBs .');
ELSE
DBMS_OUTPUT.PUT_LINE('WARNING: There are '|| V_CHECKNUM1 ||' open PDBs .');
DBMS_OUTPUT.PUT_LINE('WARNING: They will be closed when CDB$ROOT is restarted ');
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('INFO: This database is a PDB.');
DBMS_OUTPUT.PUT_LINE('INFO: Current PDB is '||V_CHECKVAR2||' .');
END IF;
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE('WARNING: This script will restart the database 2 times ' );
DBMS_OUTPUT.PUT_LINE('WARNING: WITHOUT asking ANY confirmation.' );
DBMS_OUTPUT.PUT_LINE('WARNING: Hit control-c NOW if this is not intended.' );
END;
-- End block
END;
/
-- sleep for 3 seconds so one can control-C
EXEC DBMS_LOCK.SLEEP( 3 );
-- Say what we do next
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Restarting the database in UPGRADE mode to start the DST upgrade.' );
-- write info to alert.log
DECLARE
V_NEWDBTZV NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT new_tz_version FROM upg_tzv' INTO V_NEWDBTZV;
dbms_system.ksdwrt(2, 'utltz_upg_apply is ready to update to RDBMS DSTv'|| V_NEWDBTZV ||
' and will now restart the database in UPGRADE mode.');
-- End block
END;
/
WHENEVER SQLERROR CONTINUE
-- Startup in upgrade mode
-- keep termout on to show any startup errors
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
-- in a PDB startup upgrade will not work
-- alter pluggable database open upgrade need to be used
-- this will error out with ORA-65000 or ORA-00904 in a non PDB but that's not an issue
-- the only side effect is that restart a PDB 2 times instead of 1 time
SET TERMOUT OFF
SET SERVEROUTPUT OFF
SET FEEDBACK OFF
ALTER pluggable DATABASE CLOSE IMMEDIATE;
ALTER pluggable DATABASE OPEN upgrade;
-- Alter sessions to avoid (performance) issues
ALTER SESSION SET nls_sort = 'BINARY';
ALTER SESSION SET "_with_subquery" = 'MATERIALIZE';
ALTER SESSION SET "_simple_view_merging" = TRUE;
-- Clean up used objects
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE SYS.DST$AFFECTED_TABLES;
TRUNCATE TABLE SYS.DST$ERROR_TABLE;
-- Purging dba_recyclebin
PURGE dba_recyclebin;
WHENEVER SQLERROR EXIT
SET TERMOUT ON
SET SERVEROUTPUT ON
SET FEEDBACK OFF
-- Say what we do next
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Starting the RDBMS DST upgrade. ' );
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Upgrading all SYS owned TSTZ data.' );
EXEC DBMS_OUTPUT.PUT_LINE('INFO: It might take time before any further output is seen ...');
-- Start upgrade block
DECLARE
V_NEWDBTZV NUMBER;
V_OLDDBTZV NUMBER;
V_CHECKVAR1 VARCHAR2(10 CHAR);
V_NUMFAIL NUMBER;
V_ERRCODE NUMBER;
V_ERRMSG VARCHAR2(140 CHAR);
INVALID_TIMEZONE_FILE EXCEPTION;
PRAGMA EXCEPTION_INIT(INVALID_TIMEZONE_FILE, -30094);
WINDOW_ACTIVE EXCEPTION;
PRAGMA EXCEPTION_INIT(WINDOW_ACTIVE, -56920);
NOT_IN_UPGRADE_MODE EXCEPTION;
PRAGMA EXCEPTION_INIT(NOT_IN_UPGRADE_MODE, -56926);
VIRTUAL_COLUMNS EXCEPTION;
PRAGMA EXCEPTION_INIT(VIRTUAL_COLUMNS, -54017);
BEGIN
-- Get V_Newdbtzv value
BEGIN
EXECUTE IMMEDIATE 'SELECT new_tz_version FROM upg_tzv' INTO V_NEWDBTZV;
END;
-- Start DST upgrade using V_Newdbtzv
-- Need catch for ORA-30094, ORA-56920, ORA-56926 and ora-54017
BEGIN
DBMS_DST.BEGIN_UPGRADE(V_NEWDBTZV);
EXCEPTION
WHEN INVALID_TIMEZONE_FILE THEN
DBMS_OUTPUT.PUT_LINE('ERROR: Unable to find newer RDBMS DST patch or files.');
RAISE_APPLICATION_ERROR(-20230,'Stopping script - see previous message ...');
WHEN WINDOW_ACTIVE THEN
DBMS_OUTPUT.PUT_LINE('ERROR: A prepare or upgrade window or an on-demand ');
DBMS_OUTPUT.PUT_LINE('ERROR: or datapump-job loading of a secondary time zone data file is in an active state.');
RAISE_APPLICATION_ERROR(-20231,'Stopping script - see previous message ...');
WHEN NOT_IN_UPGRADE_MODE THEN
DBMS_OUTPUT.PUT_LINE('ERROR: The database is not started in startup UPGRADE mode!');
RAISE_APPLICATION_ERROR(-20232,'Stopping script - see previous message');
WHEN VIRTUAL_COLUMNS THEN
DBMS_OUTPUT.PUT_LINE('ERROR: Virtual columns with TSTZ dataype exist giving ora-54017!');
RAISE_APPLICATION_ERROR(-20233,'Stopping script - see previous message ...');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR: something went wrong during DBMS_DST.BEGIN_UPGRADE.');
V_ERRCODE := SQLCODE;
V_ERRMSG := SUBSTR(SQLERRM,1,140);
DBMS_OUTPUT.PUT_LINE('Error code ' || V_ERRCODE || ': ' || V_ERRMSG);
RAISE_APPLICATION_ERROR(-20234,'Stopping script - see previous message ...');
END;
-- Check if DST_UPGRADE_STATE is UPGRADE
BEGIN
EXECUTE IMMEDIATE 'SELECT SUBSTR(property_value, 1, 10)
FROM database_properties
WHERE property_name = ''DST_UPGRADE_STATE'''
INTO V_CHECKVAR1;
IF V_CHECKVAR1 = TO_CHAR('UPGRADE') THEN
NULL;
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: Current DST_UPGRADE_STATE is '|| V_CHECKVAR1 || ' !');
DBMS_OUTPUT.PUT_LINE('ERROR: DST_UPGRADE_STATE in DATABASE_PROPERTIES need to be UPGRADE ');
DBMS_OUTPUT.PUT_LINE('ERROR: after a DBMS_DST.BEGIN_UPGRADE.');
DBMS_OUTPUT.PUT_LINE('ERROR: See note 1509653.1 for 12c .');
RAISE_APPLICATION_ERROR(-20235,'Stopping script - see previous message ...');
END IF;
END;
-- End block
END;
/
-- Say what we do next
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Restarting the database in NORMAL mode to upgrade non-SYS TSTZ data.' );
-- write info to alert.log
BEGIN
dbms_system.ksdwrt(2, 'utltz_upg_apply updated all SYS TSTZ data and ' ||
'will now restart the database to update all non SYS TSTZ data.');
-- End block
END;
/
WHENEVER SQLERROR CONTINUE
-- Startup normal needed to end upgrade
-- This will also work on a PDB
-- keep termout on to show any startup errors
SHUTDOWN IMMEDIATE
STARTUP
SET TERMOUT OFF
-- Alter sessions to avoid (performance) issues
ALTER SESSION SET nls_sort = 'BINARY';
ALTER SESSION SET "_with_subquery" = 'MATERIALIZE';
ALTER SESSION SET "_simple_view_merging" = TRUE;
WHENEVER SQLERROR EXIT
SET TERMOUT ON
SET SERVEROUTPUT ON
SET FEEDBACK OFF
-- Say what we do next
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Upgrading all non-SYS TSTZ data.' );
EXEC DBMS_OUTPUT.PUT_LINE('INFO: It might take time before any further output is seen ...');
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Do NOT start any application yet that uses TSTZ data!');
-- Begin upgrade user data block
DECLARE
V_NEWDBTZV NUMBER;
V_OLDDBTZV NUMBER;
V_CHECKNUM1 NUMBER;
V_CHECKVAR1 VARCHAR2(10 CHAR);
V_NUMFAIL NUMBER;
BEGIN
-- Upgrade database TSTZ data
BEGIN
DBMS_OUTPUT.PUT_LINE('INFO: Next is a list of all upgraded tables:');
DBMS_DST.UPGRADE_DATABASE(V_NUMFAIL,
PARALLEL => TRUE,
LOG_ERRORS => TRUE,
LOG_ERRORS_TABLE => 'SYS.DST$ERROR_TABLE',
LOG_TRIGGERS_TABLE => 'SYS.DST$TRIGGER_TABLE',
ERROR_ON_OVERLAP_TIME => FALSE,
ERROR_ON_NONEXISTING_TIME => FALSE);
DBMS_OUTPUT.PUT_LINE('INFO: Total failures during update of TSTZ data: '|| V_NUMFAIL|| ' .');
END;
-- If this gives count(*) > 0 then error - go manual
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM SYS.DST$ERROR_TABLE' INTO V_CHECKNUM1 ;
IF V_CHECKNUM1 != TO_NUMBER('0') THEN
DBMS_OUTPUT.PUT_LINE('ERROR: Something cannot be handled automatically !');
DBMS_OUTPUT.PUT_LINE('ERROR: Do an manual update and checks as documented in ');
DBMS_OUTPUT.PUT_LINE('ERROR: of note 977512.1 for 11gR2 or note 1509653.1 for 12c.');
RAISE_APPLICATION_ERROR(-20240,'Stopping script - see previous message ...');
END IF;
END;
-- End upgrade
DBMS_DST.END_UPGRADE(V_NUMFAIL);
-- Check if DST_UPGRADE_STATE is NONE
BEGIN
EXECUTE IMMEDIATE 'SELECT SUBSTR(property_value, 1, 10)
FROM database_properties
WHERE property_name = ''DST_UPGRADE_STATE'''
INTO V_CHECKVAR1;
IF V_CHECKVAR1 = TO_CHAR('NONE') THEN
NULL;
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: Current DST_UPGRADE_STATE is '|| V_CHECKVAR1 || ' !');
DBMS_OUTPUT.PUT_LINE('ERROR: DST_UPGRADE_STATE in DATABASE_PROPERTIES need to be NONE ');
DBMS_OUTPUT.PUT_LINE('ERROR: after a DBMS_DST.END_UPGRADE.');
DBMS_OUTPUT.PUT_LINE('ERROR: See note 977512.1 for 11gR2 or note 1509653.1 for 12c .');
RAISE_APPLICATION_ERROR(-20241,'Stopping script - see previous message ...');
END IF;
END;
-- Check if new TZ value is indeed seen
-- Get new Newdbtzv value and compare
BEGIN
EXECUTE IMMEDIATE 'SELECT new_tz_version FROM upg_tzv' INTO V_NEWDBTZV ;
EXECUTE IMMEDIATE 'SELECT TO_NUMBER(SUBSTR(property_value, 1, 3))
FROM database_properties
WHERE property_name = ''DST_PRIMARY_TT_VERSION'''
INTO V_OLDDBTZV;
IF V_OLDDBTZV = V_NEWDBTZV THEN
DBMS_OUTPUT.PUT_LINE('INFO: Your new Server RDBMS DST version is DSTv' || TO_CHAR(V_NEWDBTZV) ||' .');
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: Your Server timezone version was not updated to DSTv' ||
TO_CHAR(V_NEWDBTZV) || '.');
RAISE_APPLICATION_ERROR(-20243,'Stopping script - see previous message ...');
END IF;
END;
-- Housekeeping
BEGIN
EXECUTE IMMEDIATE 'UPDATE registry$database SET tz_version = :1' USING V_NEWDBTZV;
COMMIT;
EXECUTE IMMEDIATE 'DROP TABLE upg_tzv PURGE';
END;
-- End of block
END;
/
EXEC DBMS_OUTPUT.PUT_LINE('INFO: The RDBMS DST update is successfully finished.');
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Make sure to exit this SQL*Plus session.');
EXEC DBMS_OUTPUT.PUT_LINE('INFO: Do not use it for timezone related selects.');
-- get time elapsed in minutes
EXEC :V_TIME := ROUND((DBMS_UTILITY.GET_TIME - :V_TIME)/100/60)
-- write info to alert.log
DECLARE
V_NEWDBTZV NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT tz_version FROM registry$database' INTO V_NEWDBTZV;
dbms_system.ksdwrt(2, 'utltz_upg_apply sucessfully updated this database to RDBMS DSTv' || V_NEWDBTZV ||
' and took '|| :V_TIME ||' minutes to run.');
END;
/
WHENEVER SQLERROR CONTINUE
SET FEEDBACK ON
-- End of utltz_upg_apply.sql
@?/rdbms/admin/sqlsessend.sql
OHA YOOOO