MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/rdbms/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/rdbms/admin/dbmsuadv.sql

Rem
Rem $Header: rdbms/admin/dbmsuadv.sql /main/7 2017/03/24 09:42:26 vinbhat Exp $
Rem
Rem dbmsuadv.sql
Rem
Rem Copyright (c) 2002, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      dbmsuadv.sql - Undo ADVisor
Rem
Rem    DESCRIPTION
Rem      Undo advisor gives users recommendation on setting undo retention
Rem      and sizing undo tablespace.
Rem
Rem    NOTES
Rem      <other useful comments, qualifications, etc.>
Rem
Rem
Rem BEGIN SQL_FILE_METADATA
Rem SQL_SOURCE_FILE: rdbms/admin/dbmsuadv.sql
Rem SQL_SHIPPED_FILE: rdbms/admin/dbmsuadv.sql
Rem SQL_PHASE: DBMSUADV
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE: rdbms/admin/catpdbms.sql
Rem END SQL_FILE_METADATA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    vinbhat     02/24/17 - Bug 24669652: make dbms_undo_adv invokers right
Rem    surman      12/29/13 - 13922626: Update SQL metadata
Rem    surman      03/27/12 - 13615447: Add SQL patching tags
Rem    wyang       05/14/03 - fix comments
Rem    wyang       03/24/03 - change unit
Rem    wyang       02/16/03 - change to invoke by definer
Rem    wyang       01/14/03 - use SWRF for undo advisor
Rem    wyang       01/11/03 - wyang_undousage
Rem    wyang       11/19/02 - Created
Rem

@@?/rdbms/admin/sqlsessstart.sql

Rem ------------------------------------------------------------------------
Rem NAME
Rem  dbms_undo_adv - Undo Advisor
Rem DESCRIPTION
Rem  The package is used to provide advisors for setting undo tablespace
Rem  and set undo_retention parameter.
Rem  It has the following subprograms:
Rem    undo_info - retunes current undo tablespace name, max possible size,
Rem                if it is auto extensible, current undo retention value
Rem                and if the undo tablespace has guaranteed undo retention.
Rem    longest_query - returns the length of the longest query (between 
Rem                starttime and endtime).
Rem    required_retention - returns required undo_retention to support 
Rem                longest query based on undo stats between starttime
Rem                and endtime.
Rem    best_possible_retention - the best possible undo retention current
Rem                undo tablespace can support based on undo stats between
Rem                starttime and endtime
Rem    required_undo_size - returns required undo tablespace size to support 
Rem                undo retention based on undo stats between starttime
Rem                and endtime.
Rem    undo_health - find out the problem in undo tablespace and provide
Rem                recommendation to fix the problem. If no problem found,
Rem                return value is 0. 
Rem    undo_advisor - using advisor framework to find out problem and provide
Rem                recommendations.
Rem    Except for undo_info, all other subprograms have three versions:
Rem    Version 1: subprogram is based on historical information 
Rem               in memory or in SWRF from starttime to endtime.
Rem    Version 2: subprogram is based on historical information
Rem               in memory or in SWRF from sysdate-7 to sysdate.
Rem    Version 3: subprogram is based on historical information
Rem               in SWRF from snapid s1 to snapid s2.
Rem ------------------------------------------------------------------------

CREATE OR REPLACE TYPE dbms_uadv_arr as VARRAY(100) of NUMBER;
/

grant execute on dbms_uadv_arr to dba 
/

CREATE OR REPLACE PACKAGE dbms_undo_adv 
 authid current_user
IS
  FUNCTION undo_info(table_space_name    OUT VARCHAR2,
                     table_space_size    OUT NUMBER,
                     auto_extend         OUT BOOLEAN,
                     undo_retention      OUT NUMBER,
                     retention_guarantee OUT BOOLEAN) RETURN BOOLEAN; 
  -- This function is used to get information about undo tablespace of the 
  -- current instnace. The output parameters are meaningful only when
  -- return value is TRUE.

  -- Input Parameters:
  --   None.
  
  -- Output Parameters:
  --   table_space_name: Name of the current undo tablespace the instance 
  --                     is using.
  --   table_space_size: If the undo tablespace is fixed-sized, it is
  --                     the size of the undo tablespace in MB. If the 
  --                     tablespace is auto_extensiable, it is the max 
  --                     possible size of the undo tablespace in MB. 
  --   auto_extend: TRUE if the undo tablespace is extensiable. FALSE otherwise.
  --   undo_retention: The value of init.ora parameter "undo_retention".
  --   retention_guarantee: TRUE if undo tablespace has guaranteed retention.
  --                        FALSE otherwise.

  -- RETURN:
  --   TRUE if init.ora parameters undo_managment is auto. 
  --   FALSE otherwise or some information not available. 

  -- EXCEPTIONS:
  --   None. 
  
  FUNCTION undo_autotune(autotune_enabled   OUT BOOLEAN) RETURN BOOLEAN;
  -- This function is used to find out if auto tuning of undo retention
  -- is enabled for the current undo tablespace. The output parameter is 
  -- meaningful only when return value is TRUE.

  -- Input Parameters:
  --   None.

  -- Output Parameters:
  --   autotune_enabled: TRUE if auto tuning of undo retention is enabled
  --                     FALSE otherwise.

  -- RETURN:
  --   TRUE if autotune_enabled output parameter has been set up properly.
  --   FALSE otherwise or some information is not available.

  -- EXCEPTIONS:
  --   None.

  FUNCTION longest_query(starttime IN DATE, endtime IN DATE) RETURN NUMBER;
  FUNCTION longest_query RETURN NUMBER;
  FUNCTION longest_query(s1 IN NUMBER, s2 IN NUMBER) RETURN NUMBER;
  -- This function returns the length of the longest query for a given period.
  -- If the information about the required period is not available, 0 will
  -- be returned.

  -- Input Parameters:
  --   starttime: Start time of the required period.
  --   endtime: End time of the requied period.
  --   s1: Begin snap shot id, if want to get information from SWRF.
  --   s2: End snap shot id, if want to get information from SWRF.

  -- Output Parameters:
  --   None.

  -- Return:
  --   length of the longest query in seconds. 0 if information about required
  --   period not available.

  -- Exceptions:
  --   None.

  FUNCTION required_retention(starttime IN DATE, endtime IN DATE)
  RETURN NUMBER;
  FUNCTION required_retention RETURN NUMBER;
  FUNCTION required_retention(s1 IN NUMBER, s2 IN NUMBER)
  RETURN NUMBER;
  -- This function returns required value for init.ora parameter undo_retention 
  -- in order to prevent snap-shot-too-old error based on historical 
  -- information of given period. 0 will be returned if information about
  -- the given period not available.

  -- Input Parameters:
  --   starttime: Start time of the given period.
  --   endtime: End time of the given period.
  --   s1: Begin snap shot id, if want to get information from SWRF.
  --   s2: End snap shot id, if want to get information from SWRF.

  -- Output Parameters:
  --   None.

  -- Return:
  --   required value for init.ora parameter undo_retention. 0 if information 
  --   about the given period not available.

  -- Exceptions:
  --   None.

  FUNCTION best_possible_retention(starttime IN DATE, endtime IN DATE)
  RETURN NUMBER;
  FUNCTION best_possible_retention RETURN NUMBER;
  FUNCTION best_possible_retention(s1 IN NUMBER, s2 IN NUMBER)
  RETURN NUMBER;
  -- This function returns best possible value for init.ora parameter 
  -- undo_retention in order to maxmize the usage of current undo tablespace 
  -- based on historical information of given period. 0 will be returned if 
  -- information about the given period not available.

  -- Input Parameters:
  --   starttime: Start time of the given period.
  --   endtime: End time of the given period.
  --   s1: Begin snap shot id, if want to get information from SWRF.
  --   s2: End snap shot id, if want to get information from SWRF.

  -- Output Parameters:
  --   None.

  -- Return:
  --   Best possible value for init.ora parameter undo_retention. 0 if 
  --   information about the given period not available.

  -- Exceptions:
  --   None.

  -- Note:
  --   For auto-extensiable undo tablespace, the best possible retention value
  --   is based on the max size the undo tablespace can grow to. You may not 
  --   want your undo tablespace to grow to that size.

  FUNCTION required_undo_size(retention IN NUMBER,
                              starttime IN DATE, endtime IN DATE)
  RETURN NUMBER;
  FUNCTION required_undo_size(retention IN NUMBER) RETURN NUMBER;
  FUNCTION required_undo_size(retention IN NUMBER,
                              s1 IN NUMBER, s2 IN NUMBER)
  RETURN NUMBER;
  -- This function returns the required undo tablespace size in order to
  -- satisfy undo_retention based on historical information of given period. 
  -- 0 will be returned if information about the given period not available.

  -- Input Parameters:
  --   retention: retention value you want to set for init.ora parameter
  --              undo_retention.
  --   starttime: Start time of the given period.
  --   endtime: End time of the given period.
  --   s1: Begin snap shot id, if want to get information from SWRF.
  --   s2: End snap shot id, if want to get information from SWRF.

  -- Output Parameters:
  --   None.

  -- Return:
  --   Required size of undo tablespace in MB. 0 if 
  --   information about the given period not available.

  -- Exceptions:
  --   None.

  FUNCTION required_undo_size(retention IN dbms_uadv_arr,
                              utbsize   IN OUT dbms_uadv_arr,
                              starttime IN DATE, endtime IN DATE)
  RETURN NUMBER;
  FUNCTION required_undo_size(retention IN dbms_uadv_arr,
                              utbsize   IN OUT dbms_uadv_arr)
  RETURN NUMBER;
  FUNCTION required_undo_size(retention IN dbms_uadv_arr,
                              utbsize   IN OUT dbms_uadv_arr,
                              s1 IN NUMBER, s2 IN NUMBER)
  RETURN NUMBER;
  -- This function returns the required undo tablespace size given
  -- undo retention value. 0 will be returned if information about
  -- the given period not available. Both retention and utbsize
  -- are varray type. It is caller's responsibility to initialize
  -- utbsize array. This function simply appends results to utbsize
  -- array.

  -- Input Parameters:
  --   retention: retention value you want to set for init.ora parameter
  --              undo_retention.
  --   starttime: Start time of the given period.
  --   endtime: End time of the given period.
  --   s1: Begin snap shot id, if want to get information from SWRF.
  --   s2: End snap shot id, if want to get information from SWRF.

  -- Output Parameters:
  --   utbsize: Required size of undo tablespace in MB.

  -- Return:
  --   0 if information about the given period not available.

  -- Exceptions:
  --   None.


  FUNCTION undo_health(problem        OUT VARCHAR2,
                       recommendation OUT VARCHAR2,
                       rationale      OUT VARCHAR2,
                       retention      OUT NUMBER,
                       utbsize        OUT NUMBER) RETURN NUMBER; 
  FUNCTION undo_health(starttime      IN  DATE,
                       endtime        IN  DATE,
                       problem        OUT VARCHAR2,
                       recommendation OUT VARCHAR2,
                       rationale      OUT VARCHAR2,
                       retention      OUT NUMBER,
                       utbsize        OUT NUMBER) RETURN NUMBER; 
  FUNCTION undo_health(s1             IN NUMBER,
                       s2             IN NUMBER,
                       problem        OUT VARCHAR2,
                       recommendation OUT VARCHAR2,
                       rationale      OUT VARCHAR2,
                       retention      OUT NUMBER,
                       utbsize        OUT NUMBER) RETURN NUMBER;
  -- This function is used to check if there is any problem with the current
  -- setting of undo_retention and undo tablespace size based on historical
  -- information of a given period. If the return value is 0, no problem is 
  -- found. Otherwise, parameter "problem" and "recommendation" are the 
  -- problem and recommendation on fixing the problem. 

  -- Input Parameters:
  --   starttime: Start time of the given period.
  --   endtime: End time of the given period.
  --   s1: Begin snap shot id, if want to get information from SWRF.
  --   s2: End snap shot id, if want to get information from SWRF.

  -- Output Parameters:
  --   problem: problem of the system. It can be:
  --            "long running query may fail" or "undo tablespace cannot
  --            support undo_retention".
  --   recommendation: recommendation on fixing the problem found.
  --   rationale: rationale for the recommendation.
  --   retention: numerical value of retention if recommendation is to change 
  --              retention.
  --   utbsize: numberical value of undo tablespace size in MB if 
  --            recommendation is to change undo tablespace size.    

  -- Return:
  --   If return value is 0, undo tablespace is OK. 
  --   If return value is 1:    
  --     problem: Undo tablespace cannot support the specified undo_retention
  --           or Undo tablespace cannot support auto tuning undo retention
  --     recommendation: Size undo tablespace to utbsize MB;
  --   If return value is 2:
  --     problem: Long running queries may fail
  --     recommendation: Set undo_retention to retention
  --   If return value is 3:
  --     problem: Undo tablespace cannot support the longest query
  --     recommendation: Set undo_retention to retention and 
  --                     Size undo tablespace to utbsize MB 
  --   If return value is 4:
  --     problem: System does not have an online undo tablespace  
  --     recommendation: Online undo tablespace with size utbsize MB 

  -- Exceptions:
  --   None.

  FUNCTION undo_advisor(starttime IN DATE, endtime IN DATE, instance IN NUMBER)
  RETURN VARCHAR2;
  FUNCTION undo_advisor(instance IN NUMBER) RETURN VARCHAR2;
  FUNCTION undo_advisor(s1 IN NUMBER, s2 IN NUMBER, instance IN NUMBER)
  RETURN VARCHAR2;
  -- This function uses advisor frame work to check if there is any problem
  -- with the current instance. This function should be used when
  -- undo_management is auto.

  -- Input Parameters:
  --   starttime: Start time of the given period.
  --   endtime: End time of the given period.
  --   s1: Begin snap shot id, if want to get information from SWRF.
  --   s2: End snap shot id, if want to get information from SWRF.
  --   instance: For now, please provide the instance id of the current 
  --             instance. 

  -- Output Parameters:
  --   None.

  -- Return:
  --   Problems found in the current instance along with 1 or 2 recommendations
  --   on fixing the problems. For each recommendation, there may be 1 or 2
  --   actions. 

  -- Exceptions:
  --   ORA-13516 SWRF not available
  --   ORA-13618 invalid value for parameter instance
  --   ORA-30014 system is running in non-AUM mode.
  --   ORA-30029 no active undo tablespace.

  FUNCTION rbu_migration(starttime IN DATE, endtime IN DATE) RETURN NUMBER; 
  FUNCTION rbu_migration RETURN NUMBER; 
  -- This functin returns required undo tablespace size if users want to 
  -- migrate from rbu to aum. This function should be called only when
  -- undo management is manual.

  -- Input Parameters:
  --   starttime: Start time of the given period.
  --   endtime: End time of the given period.

  -- Output Parameters:
  --   None.

  -- Return:
  --   Size of undo tablespace in MB.

  -- Exceptions:
  --   None.

END;
/
show errors;

CREATE OR REPLACE PUBLIC SYNONYM dbms_undo_adv for sys.dbms_undo_adv
/
GRANT EXECUTE ON dbms_undo_adv TO dba;
/

Rem  -----------------------------------------------------------------------
Rem  The following two procedures are for testing purposes only. 
Rem  -----------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE load_undo_stat(qlen IN NUMBER, ubks IN NUMBER)
IS
  loadsql varchar2(1024);
  val     number;
  cid     number;
  rows    integer;
BEGIN
  val := ubks * 100000 + qlen + 100;
  loadsql := 'alter system set "_undo_debug_usage" = ' || val;
  dbms_output.put_line(loadsql);
  cid := dbms_sql.open_cursor;
  dbms_sql.parse(cid, loadsql, dbms_sql.native);
  rows := dbms_sql.execute(cid);
  dbms_sql.close_cursor(cid);
END load_undo_stat;
/

grant execute on load_undo_stat to dba 
/
  
CREATE OR REPLACE PROCEDURE reset_undo_stat
IS
  resetsql varchar2(1024);
  val     number;
  cid     number;
  rows    integer;
BEGIN
  val := 2;
  resetsql := 'alter system set "_undo_debug_usage" = ' || val;
  cid := dbms_sql.open_cursor;
  dbms_sql.parse(cid, resetsql, dbms_sql.native);
  rows := dbms_sql.execute(cid);
  dbms_sql.close_cursor(cid);
END reset_undo_stat;
/

grant execute on reset_undo_stat to dba 
/

Rem -----------------------------------------------------------------------

CREATE OR REPLACE LIBRARY DBMS_UNDOADV_LIB TRUSTED AS STATIC
/


@?/rdbms/admin/sqlsessend.sql

OHA YOOOO