MINI MINI MANI MO

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

Rem
Rem $Header: rdbms/admin/spup817.sql /main/8 2017/05/28 22:46:11 stanaya Exp $
Rem
Rem spup817.sql
Rem
Rem Copyright (c) 2001, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      spup817.sql -  8.1.7 to 9.0 upgrade script
Rem
Rem    DESCRIPTION
Rem      Upgrades the Statspack schema to the 9.0 schema format
Rem
Rem    USAGE
Rem      Export the Statspack schema before running this upgrade,
Rem      as this is the only way to restore the existing data.
Rem      A downgrade script is not provided.
Rem
Rem      Disable any scripts which use Statspack while the upgrade script
Rem      is running.
Rem
Rem      If you have significant amount of data in the PERFSTAT schema,
Rem      consider altering the session to use a large rollback segment.
Rem
Rem      Ensure there is plenty of free space in the tablespace
Rem      where the schema resides.
Rem
Rem      This script should be run when connected as SYSDBA
Rem
Rem      This upgrade script should only be run once.
Rem
Rem
Rem    BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: rdbms/admin/spup817.sql
Rem    SQL_SHIPPED_FILE: rdbms/admin/spup817.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    kchou       04/20/10 - BUG# 9559470 Possible SQL Injection
Rem    kchou       04/08/10 - Security Fix: 2nd Order SQL Injections: Bug#
Rem                           9559470
Rem    cdialeri    03/02/04 - 3513994: 3473979, 3483751
Rem    cdialeri    04/26/01 - 9.0
Rem    cdialeri    04/21/01 - Split log files
Rem    cdialeri    04/05/01 - Created
Rem

set verify off

/* ------------------------------------------------------------------------- */

prompt
prompt Warning
prompt ~~~~~~~
prompt Converting existing Statspack data to 9.0 format may result in
prompt irregularities when reporting on pre-9.0 snapshot data.
prompt This script is provided for convenience, and is not guaranteed to 
prompt work on all installations.  To ensure you will not lose any existing
prompt Statspack data, export the schema before upgrading.  A downgrade
prompt script is not provided.  Please see spdoc.txt for more details.
prompt
prompt
prompt Usage Recommendations
prompt ~~~~~~~~~~~~~~~~~~~~~
prompt Disable any programs which run Statspack (including any dbms_jobs),
prompt or this upgrade will fail.
prompt
prompt If you have a significant amount of data in the PERFSTAT schema, 
prompt consider using a large rollback segment, and specifying a large
prompt sort_area_size - you will be prompted for both below.
prompt
prompt You will also be prompted for the PERFSTAT password, and for the 
prompt tablespace to create any new PERFSTAT tables/indexes.
prompt
prompt You must be connected as a user with SYSDBA privilege to successfully
prompt run this script.
prompt
accept confirmation prompt "Press return before continuing ";

prompt
prompt Please specify the PERFSTAT password
prompt &&perfstat_password

spool spup817a.lis

prompt
prompt Specify the tablespace to create any new PERFSTAT tables and indexes
prompt Tablespace specified &&tablespace_name
prompt
prompt If you would like to use a large sort_area_size, specify the size in BYTES
prompt (e.g. 1048576), or press return to use the default sort_area_size.
prompt sort_area_size of &&sort_area_size specified
prompt
prompt If you would like to use a large rollback segment, ensure this rollback 
prompt segment is online.  Specify the segment name, or press return to use any
prompt rollback segment.  
prompt Rollback segment &&large_rollback_segment specified
prompt


/* ------------------------------------------------------------------------- */

--
--  Rename statspack views to STATS$V$ from V$

-- Do not drop X_$ views for KCBFWAIT, KSPPSV, KSPPI or KSQST
-- as these may overlap with those in catsnmp.sql. 

-- drop view           X_$KCBFWAIT;
-- drop public synonym  X$KCBFWAIT;
-- drop view           X_$KSPPSV;
-- drop public synonym  X$KSPPSV;
-- drop view           X_$KSPPI;
-- drop public synonym  X$KSPPI;
-- drop view           X_$KSQST;
-- drop public synonym  X$KSQST;

-- Create views, grants, public synonyms
-- Do not recreate ksqst (replaced by enqueue_stat)

drop view             STATS$X_$KCBFWAIT;
create view           STATS$X_$KCBFWAIT as select * from        X$KCBFWAIT;
grant select on       STATS$X_$KCBFWAIT to PERFSTAT;
drop public synonym    STATS$X$KCBFWAIT;
create public synonym  STATS$X$KCBFWAIT for              STATS$X_$KCBFWAIT;
drop view             STATS$X_$KSPPSV ;
create view           STATS$X_$KSPPSV   as select * from        X$KSPPSV;
grant select on       STATS$X_$KSPPSV   to PERFSTAT;
drop public synonym    STATS$X$KSPPSV;
create public synonym  STATS$X$KSPPSV   for              STATS$X_$KSPPSV;
drop view             STATS$X_$KSPPI;
create view           STATS$X_$KSPPI    as select * from        X$KSPPI;
grant select on       STATS$X_$KSPPI    to PERFSTAT;
drop public synonym    STATS$X$KSPPI;
create public synonym  STATS$X$KSPPI    for              STATS$X_$KSPPI;


/* ------------------------------------------------------------------------- */

--
-- Recreate FILESTAT TEMPSTATXS views to include new columns


-- FILESTAT

-- drop public synonym  V$FILESTATXS;
-- drop view           V_$FILESTATXS;

drop view   STATS$V_$FILESTATXS;
create view STATS$V_$FILESTATXS as
select ts.name      tsname
     , df.name	    filename
     , fs.phyrds
     , fs.phywrts
     , fs.readtim
     , fs.writetim
     , fs.singleblkrds
     , fs.phyblkrd
     , fs.phyblkwrt
     , fs.singleblkrdtim
     , fw.count     wait_count
     , fw.time      time
  from x$kcbfwait   fw
     , v$filestat   fs
     , v$tablespace ts
     , v$datafile   df
 where ts.ts#    = df.ts#
   and fs.file#  = df.file#
   and fw.indx+1 = df.file#;

drop public synonym    STATS$V$FILESTATXS;
create public synonym  STATS$V$FILESTATXS for STATS$V_$FILESTATXS;
grant select on       STATS$V_$FILESTATXS to PERFSTAT;


-- TEMPSTAT

-- drop public synonym  V$TEMPSTATXS;
-- drop view           V_$TEMPSTATXS;

drop view   STATS$V_$TEMPSTATXS;
create view STATS$V_$TEMPSTATXS as
select ts.name      tsname
     , tf.name	    filename
     , tm.phyrds
     , tm.phywrts
     , tm.readtim
     , tm.writetim
     , tm.singleblkrds
     , tm.phyblkrd
     , tm.phyblkwrt
     , tm.singleblkrdtim
     , fw.count     wait_count
     , fw.time      time
  from x$kcbfwait   fw
     , v$tempstat   tm
     , v$tablespace ts
     , v$tempfile   tf
 where ts.ts#     = tf.ts#
   and tm.file#   = tf.file#
   and fw.indx+1  = (tf.file# + (select value from v$parameter where name='db_files'));

drop public synonym    STATS$V$TEMPSTATXS;
create public synonym  STATS$V$TEMPSTATXS for STATS$V_$TEMPSTATXS;
grant select on       STATS$V_$TEMPSTATXS to PERFSTAT;


/* ------------------------------------------------------------------------- */

--
-- Add new columns to SQLXS

-- drop public synonym  V$SQLXS;
-- drop view           V_$SQLXS;

drop view   STATS$V_$SQLXS;
create view STATS$V_$SQLXS as 
select max(sql_text)        sql_text
     , sum(sharable_mem)    sharable_mem
     , sum(sorts)           sorts
     , min(module)          module
     , sum(loaded_versions) loaded_versions
     , sum(executions)      executions
     , sum(loads)           loads
     , sum(invalidations)   invalidations
     , sum(parse_calls)     parse_calls
     , sum(disk_reads)      disk_reads
     , sum(buffer_gets)     buffer_gets
     , sum(rows_processed)  rows_processed
     , max(command_type)    command_type
     , address              address
     , hash_value           hash_value
     , count(1)             version_count
     , sum(cpu_time)        cpu_time
     , sum(elapsed_time)    elapsed_time
     , max(outline_sid)     outline_sid
     , max(outline_category) outline_category
     , max(is_obsolete)     is_obsolete
  from v$sql
 group by hash_value, address;

drop public synonym   STATS$V$SQLXS;
create public synonym STATS$V$SQLXS for STATS$V_$SQLXS; 
grant select on      STATS$V_$SQLXS to PERFSTAT;


/* ------------------------------------------------------------------------- */

--
--  Grant PERFSTAT select on new V$ views

grant select on V_$ENQUEUE_STAT   to PERFSTAT;
grant select on V_$RESOURCE_LIMIT to PERFSTAT;
grant select on V_$DLM_MISC       to PERFSTAT;
grant select on V_$UNDOSTAT       to PERFSTAT;
grant select on V_$SQL_PLAN       to PERFSTAT;
grant select on V_$DB_CACHE_ADVICE   to PERFSTAT;
grant select on V_$PGASTAT           to PERFSTAT;
grant select on V_$INSTANCE_RECOVERY to PERFSTAT;


/* ------------------------------------------------------------------------- */

prompt Note:
prompt Please check remainder of upgrade log file, which is continued in
prompt the file spup817b.lis

spool off
connect perfstat/&&perfstat_password

spool spup817b.lis

show user

alter session set sort_area_size = &&sort_area_size;


/* ------------------------------------------------------------------------- */

--
-- Add support for buffer cache advisory

create table          STATS$DB_CACHE_ADVICE
(snap_id              number(6)       not null
,dbid                 number          not null
,instance_number      number          not null
,id                   number          not null
,name                 varchar2(20)    not null
,block_size           number          not null
,buffers_for_estimate number          not null
,advice_status        varchar2(3)
,size_for_estimate    number
,estd_physical_read_factor number
,estd_physical_reads  number
,constraint STATS$DB_CACHE_ADVICE_PK primary key 
     (snap_id, dbid, instance_number, id, buffers_for_estimate)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
,constraint STATS$DB_CACHE_ADVICE_FK foreign key 
     (snap_id, dbid, instance_number)
    references STATS$SNAPSHOT on delete cascade
) tablespace &&tablespace_name
  storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;
 
create public synonym  STATS$DB_CACHE_ADVICE  for STATS$DB_CACHE_ADVICE;


/* ------------------------------------------------------------------------- */

--
-- Add support for instance recovery stats

create table          STATS$INSTANCE_RECOVERY
(snap_id                          number(6)        not null
,dbid                             number           not null
,instance_number                  number           not null
,recovery_estimated_ios           number
,actual_redo_blks                 number
,target_redo_blks                 number
,log_file_size_redo_blks          number
,log_chkpt_timeout_redo_blks      number
,log_chkpt_interval_redo_blks     number
,fast_start_io_target_redo_blks   number
,target_mttr                      number
,estimated_mttr                   number
,ckpt_block_writes                number
,constraint STATS$INSTANCE_RECOVERY_PK primary key 
    (snap_id, dbid, instance_number)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
,constraint STATS$INSTANCE_RECOVERY_FK foreign key 
    (snap_id, dbid, instance_number)
    references STATS$SNAPSHOT on delete cascade
) tablespace &&tablespace_name
  storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;

create public synonym  STATS$INSTANCE_RECOVERY  for STATS$INSTANCE_RECOVERY;


/* ------------------------------------------------------------------------- */

--
-- Add corresponding columns to stats$ filestat and tempstat tables

alter table STATS$FILESTATXS add 
(singleblkrds         number
,singleblkrdtim       number
);

alter table STATS$TEMPSTATXS add 
(singleblkrds         number
,singleblkrdtim       number
);

/* ------------------------------------------------------------------------- */

--
-- Add wait_time to latch tables

alter table STATS$LATCH add 
(wait_time            number
);

alter table STATS$LATCH_CHILDREN add 
(wait_time            number
);

alter table STATS$LATCH_PARENT add 
(wait_time            number
);


/* ------------------------------------------------------------------------- */

--
-- Add support for multiple sized buffer pools

alter table STATS$BUFFER_POOL_STATISTICS add
(block_size              number
);

-- Update the existing rows

set transaction use rollback segment &&large_rollback_segment;

update stats$buffer_pool_statistics bps set
  block_size = (select value
                  from stats$parameter p
                 where p.name            = 'db_block_size'
                   and p.dbid            = bps.dbid
                   and p.instance_number = bps.instance_number
                   and rownum < 2
               )
 where block_size is null;

commit;


/* ------------------------------------------------------------------------- */

--
-- Create new Enqueue statistics table

create table          STATS$ENQUEUE_STAT
(snap_id              number(6)        not null
,dbid                 number           not null
,instance_number      number           not null
,eq_type              varchar2(2)      not null
,total_req#           number
,total_wait#          number
,succ_req#            number
,failed_req#          number
,cum_wait_time        number 
,constraint STATS$ENQUEUE_STAT_PK primary key 
    (snap_id, dbid, instance_number, eq_type)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
,constraint STATS$ENQUEUE_STAT_FK foreign key (snap_id, dbid, instance_number)
    references STATS$SNAPSHOT on delete cascade
)tablespace &&tablespace_name
  storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;

create public synonym  STATS$ENQUEUE_STAT  for STATS$ENQUEUE_STAT;


-- Copy over the existing data into the new structure
-- The data does not correspond exactly 1-1, but it is close enough
-- for the conversion.

set transaction use rollback segment &&large_rollback_segment;

insert into stats$enqueue_stat
     ( snap_id
     , dbid
     , instance_number
     , eq_type
     , total_req#
     , total_wait#
     )
select snap_id
     , dbid
     , instance_number
     , name
     , gets
     , waits
  from stats$enqueuestat;

commit;

drop public synonym STATS$ENQUEUESTAT;
drop table          STATS$ENQUEUESTAT;


/* ------------------------------------------------------------------------- */

--
-- Recreate primary key for stats$sql_summary

alter table STATS$SQL_SUMMARY drop primary key drop index;

alter table STATS$SQL_SUMMARY add constraint STATS$SQL_SUMMARY_PK primary key
 (snap_id, dbid, instance_number, hash_value, text_subset)
 using index
   tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0);

--
-- Add new columns

alter table STATS$SQL_SUMMARY add
(command_type         number
,cpu_time             number
,elapsed_time         number
,outline_sid          number
,outline_category     varchar2(64) 
);


/* ------------------------------------------------------------------------- */

--
-- Add support for resource limits

create table          STATS$RESOURCE_LIMIT
(snap_id              number(6)        not null
,dbid                 number           not null
,instance_number      number           not null
,resource_name        varchar2(30)     not null
,current_utilization  number
,max_utilization      number
,initial_allocation   varchar2(10)
,limit_value          varchar2(10)
,constraint STATS$RESOURCE_LIMIT_PK primary key
    (snap_id, dbid, instance_number, resource_name)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
,constraint STATS$RESOURCE_LIMIT_FK foreign key
    (snap_id, dbid, instance_number)
   references STATS$SNAPSHOT on delete cascade
)tablespace &&tablespace_name
storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;

create public synonym  STATS$RESOURCE_LIMIT  for STATS$RESOURCE_LIMIT;


/* ------------------------------------------------------------------------- */

--
-- Add support for OPS specific statistics

create table STATS$DLM_MISC
(snap_id              number(6)       not null
,dbid                 number          not null
,instance_number      number          not null
,statistic#           number          not null
,name                 varchar2(38)
,value                number
,constraint STATS$DLM_MISC_PK primary key
    (snap_id, dbid, instance_number, statistic#)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
,constraint STATS$DLM_MISC_FK foreign key
    (snap_id, dbid, instance_number)
    references STATS$SNAPSHOT on delete cascade
) tablespace &&tablespace_name
  storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;

create public synonym  STATS$DLM_MISC  for STATS$DLM_MISC;


/* ------------------------------------------------------------------------- */

--
-- Add support for automatic undo management

create table STATS$UNDOSTAT
(begin_time           date            not null
,end_time             date            not null
,dbid                 number          not null
,instance_number      number          not null
,snap_id              number(6)       not null
,undotsn              number          not null
,undoblks             number
,txncount             number
,maxquerylen          number
,maxconcurrency       number
,unxpstealcnt         number
,unxpblkrelcnt        number
,unxpblkreucnt        number
,expstealcnt          number
,expblkrelcnt         number
,expblkreucnt         number
,ssolderrcnt          number
,nospaceerrcnt        number
,constraint STATS$UNDOSTAT_PK primary key
    (begin_time, end_time, dbid, instance_number)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
) tablespace &&tablespace_name
  storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;

create public synonym  STATS$UNDOSTAT  for STATS$UNDOSTAT;


/* ------------------------------------------------------------------------- */

--
--  Add support for capturing SQL Plans (sql_plan and sql_plan_usage)


-- SQL_PLAN_USAGE

create table STATS$SQL_PLAN_USAGE
(hash_value           number          not null
,text_subset          varchar2(31)    not null
,plan_hash_value      number          not null
,snap_id              number          not null
,cost                 number
,address              raw(8)
,optimizer            varchar2(20)
,constraint STATS$SQL_PLAN_USAGE_PK primary key
    (hash_value, text_subset, plan_hash_value, cost)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
) tablespace &&tablespace_name
  storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;

create index STATS$SQL_PLAN_USAGE_I1 on STATS$SQL_PLAN_USAGE (snap_id)
  tablespace &&tablespace_name storage (initial 1m next 1m pctincrease 0);

create public synonym  STATS$SQL_PLAN_USAGE  for STATS$SQL_PLAN_USAGE;


-- SQL_PLAN

create table STATS$SQL_PLAN
(plan_hash_value      number          not null
,id                   number          not null
,operation            varchar2(30)
,options              varchar2(30)
,object_node          varchar2(10)
,object#              number
,object_owner         varchar2(30)
,object_name          varchar2(30)
,optimizer            varchar2(20)
,parent_id            number
,depth                number
,position             number
,cost                 number
,cardinality          number
,bytes                number
,other_tag            varchar2(35)
,partition_start      varchar2(5)
,partition_stop       varchar2(5)
,partition_id         number
,other                varchar2(4000)
,distribution         varchar2(20)
,cpu_cost             number
,io_cost              number
,temp_space           number
,snap_id              number
,constraint STATS$SQL_PLAN_PK primary key
    (plan_hash_value, id)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
) tablespace &&tablespace_name
  storage (initial 5m next 5m pctincrease 0) pctfree 5 pctused 40;

create public synonym  STATS$SQL_PLAN  for STATS$SQL_PLAN;


/* ------------------------------------------------------------------------- */

--
--  Support for automatic PGA memory management

create table STATS$PGASTAT
(snap_id              number(6)       not null
,dbid                 number          not null
,instance_number      number          not null
,name                 varchar2(64)    not null
,value                number
,constraint STATS$SQL_PGASTAT_PK primary key
    (snap_id, dbid, instance_number, name)
 using index tablespace &&tablespace_name
   storage (initial 1m next 1m pctincrease 0)
,constraint STATS$SQL_PGASTAT_FK foreign key
     (snap_id, dbid, instance_number)
     references STATS$SNAPSHOT on delete cascade
) tablespace &&tablespace_name
  storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40;

create public synonym  STATS$PGASTAT  for STATS$PGASTAT;


/* ------------------------------------------------------------------------- */

--
-- Add support for the new snap level

alter table STATS$STATSPACK_PARAMETER drop constraint
  STATS$STATSPACK_LVL_CK;
alter table STATS$STATSPACK_PARAMETER add  constraint 
  STATS$STATSPACK_LVL_CK check (snap_level in (0, 5, 6, 10));

alter table STATS$SNAPSHOT drop constraint
  STATS$SNAPSHOT_LVL_CK;
alter table STATS$SNAPSHOT add  constraint 
  STATS$SNAPSHOT_LVL_CK check (snap_level in (0, 5, 6, 10));


/* ------------------------------------------------------------------------- */

--
-- Add support for microsecond Event timing

alter table STATS$SYSTEM_EVENT add
 (time_waited_micro    number);

alter table STATS$SESSION_EVENT add
 (time_waited_micro    number);

alter table STATS$BG_EVENT_SUMMARY add
 (time_waited_micro    number);

set transaction use rollback segment &&large_rollback_segment;

update STATS$SYSTEM_EVENT set
       time_waited_micro = time_waited * 10000
     , time_waited       = null
 where time_waited_micro is null;

update STATS$SESSION_EVENT set
       time_waited_micro = time_waited * 10000
     , time_waited       = null
 where time_waited_micro is null;

update STATS$BG_EVENT_SUMMARY set
       time_waited_micro = time_waited * 10000
     , time_waited       = null
 where time_waited_micro is null;

commit;

alter table STATS$SYSTEM_EVENT     drop column time_waited;
alter table STATS$SESSION_EVENT    drop column time_waited;
alter table STATS$BG_EVENT_SUMMARY drop column time_waited;


/* ------------------------------------------------------------------------- */

--
-- Add any new idle events, and Statspack Levels

insert into STATS$IDLE_EVENT (event) values ('slave wait');
commit;
insert into STATS$IDLE_EVENT (event) values ('i/o slave wait');
commit;
insert into STATS$IDLE_EVENT (event) values ('jobq slave wait');
commit;
insert into STATS$IDLE_EVENT (event) values ('null event');
commit;

insert into STATS$LEVEL_DESCRIPTION (snap_level, description)
  values (6,  'This level includes capturing SQL plan and SQL plan usage information for high resource usage SQL Statements, along with all data captured by lower levels');

commit;


/* ------------------------------------------------------------------------- */

--
--  Revoke select privileges on statspack objects granted to PUBLIC

declare
sqlstr varchar2(128);
begin
  for tbnam in (select atp.table_name
                  from all_tab_privs atp
                     , all_tables    at
                 where atp.privilege    = 'SELECT' 
                   and atp.table_schema = 'PERFSTAT'
                   and atp.grantee      = 'PUBLIC'
                   and at.table_name    = atp.table_name
                   and at.owner         = atp.table_schema
                   and at.dropped       = 'NO')
  loop
    -- XXX kchou 4/20/2010 BUG# 9559470 POSSIBLE SQL INJECTION
    -- sqlstr := 'revoke select on perfstat.'||tbnam.table_name||' from public';
    sqlstr := 
      'revoke select on perfstat.' || dbms_assert.enquote_name(tbnam.table_name, FALSE) || ' FROM PUBLIC';
    execute immediate sqlstr;
  end loop;
end;
/

prompt Note:
prompt Please check the log file of the package recreation, which is 
prompt in the file spcpkg.lis

spool off


/* ------------------------------------------------------------------------- */

--
-- Upgrade the package
@@spcpkg


--  End of Upgrade script

OHA YOOOO