MINI MINI MANI MO

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

Rem
Rem $Header: rdbms/admin/utlrvw.sql /main/5 2017/05/28 22:46:12 stanaya Exp $
Rem
Rem utlrvw.sql
Rem
Rem Copyright (c) 2009, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      utlrvw.sql - Recompile all views while still in UPGRADE mode
Rem
Rem    DESCRIPTION
Rem      This script recompiles all views in UPGRADE mode.
Rem
Rem    NOTES
Rem      <other useful comments, qualifications, etc.>
Rem
Rem    BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: rdbms/admin/utlrvw.sql
Rem    SQL_SHIPPED_FILE: rdbms/admin/utlrvw.sql
Rem    SQL_PHASE: UTILITY
Rem    SQL_STARTUP_MODE: NORMAL
Rem    SQL_IGNORABLE_ERRORS: NONE
Rem    END SQL_FILE_METADATA
Rem    
Rem    MODIFIED   (MM/DD/YY)
Rem    sanagara    03/06/12 - Skip invalidation if fix for 6452863 is present
Rem    jaeblee     03/22/11 - Ignore views with $DEPRECATED$ subname
Rem    nlee        04/02/09 - Created
Rem

DEFINE UPGRADE_NUMBER = 8289601 
DEFINE CPU_PATCH_NUMBER = 6452863 
DEFINE UPGRADE_DESC   = 'view invalidation'
SET VERIFY OFF
SET SERVEROUTPUT ON

Rem =======================================================================
Rem Create table registry$history.
Rem Supress error message if table "already exists".
Rem =======================================================================

BEGIN
  EXECUTE IMMEDIATE
    'CREATE TABLE registry$history (
       action_time     DATE,         /* time stamp */
       action          VARCHAR2(30), /* name of action */
       namespace       VARCHAR2(30), /* upgrade namespace */
       version         VARCHAR(30),  /* server version */
       id              NUMBER,       /* Upgrade ID */
       comments        VARCHAR2(255) /* comments */)';
  EXCEPTION
    WHEN OTHERS THEN
      IF sqlcode = -955 THEN
        NULL;
      ELSE 
        RAISE;
      END IF;
END;
/

Rem =======================================================================
Rem Invalidate views.
Rem =======================================================================

DECLARE
  CURSOR invalidate1(objectno NUMBER) IS
    SELECT o.obj#
      FROM obj$ o, user$ u 
        WHERE o.type#=4 AND u.user# = o.owner# AND o.obj# IN 
              (SELECT UNIQUE d_obj# FROM access$ WHERE types=9) AND 
              (o.subname is null or o.subname <> '$DEPRECATED$') AND 
              o.obj# > objectno ORDER BY obj#;

  my_err        NUMBER;
  objnum        NUMBER;
  upgrade_entry NUMBER;

BEGIN
  -- skip invalidation if either 6452863 or 8289601 were previously
  -- applied
  SELECT DISTINCT COUNT(id) INTO upgrade_entry FROM registry$history
    WHERE id = '&&UPGRADE_NUMBER' or id = '&&CPU_PATCH_NUMBER';

  IF upgrade_entry > 0 THEN
    dbms_output.put_line ('** utlrvw.sql script is already applied **');
    RETURN;
  ELSE
    -- check if this db was originally created at version 11.2.0.1
    -- or higher
    SELECT COUNT(*) INTO upgrade_entry
    FROM registry$
    WHERE cid = 'CATPROC'
    AND (org_version >= '11.2.0.1.0' OR
        (org_version IS NULL AND version >= '11.2.0.1.0'));

    IF upgrade_entry > 0 THEN
      dbms_output.put_line ('** utlrvw.sql script is not needed **');
      RETURN;
    END IF;
  END IF;

  objnum := 0;

  OPEN invalidate1(objnum);

  LOOP
    BEGIN
      FETCH invalidate1 INTO objnum;
      EXIT WHEN invalidate1%NOTFOUND;
    EXCEPTION
      WHEN OTHERS THEN
        my_err := SQLCODE;
        IF my_err = -1555 THEN -- snapshot too old, re-execute fetch query
          CLOSE invalidate1;
          OPEN  invalidate1(objnum);
          GOTO continue;
        ELSE
          RAISE;
        END IF;
    END;

    BEGIN
      -- Invalidate the view
      DBMS_UTILITY.INVALIDATE (objnum, 0, 0);
    EXCEPTION
      WHEN OTHERS THEN
      null; -- ignore, and proceed.
    END;

<<continue>>
  null;

  END LOOP;

  CLOSE invalidate1;
END;
/

Rem =======================================================================
Rem Insert values for upgrade into registry.
Rem =======================================================================

INSERT INTO registry$history (action_time, action, id, comments)
  VALUES ( SYSTIMESTAMP, 'VIEW INVALIDATE', &&UPGRADE_NUMBER, '&&UPGRADE_DESC' );

COMMIT;

EXECUTE dbms_session.reset_package;

SET SERVEROUTPUT OFF

OHA YOOOO