Thursday, January 15, 2026

e-- | DATABASE : Oracle | -- | FILE : DB_healthcheck_lhr_v6.0.6_RO.sql | -- | CLASS : Database Administration | -- | PURPOSE : This SQL script provides a detailed report (in HTML format) on | -- | all database metrics including installed options, storage, | -- | performance data, AND security. | -- | VERSION : This script was designed for Oracle Database 12c. | -- | Although this script will also work with Oracle Database 10g | -- | Release 1, several sections will error out FROM missing tables | -- | or columns. | -- | USAGE : | -- | | -- | sqlplus /@DB_IP/SERVICE_NAME @DB_healthcheck_lhr_v6.0.6_RO.sql | -- | | -- | TESTING : This script has been successfully tested on the following | -- | platforms: | -- | | -- | Linux : Oracle Database 12c | -- | Solaris : Oracle Database 12c | -- | Windows : Oracle Database 12c | -- | AIX : Oracle Database 12c | -- | | -- | NOTE : AS with any code, ensure to test this script in a development | -- | environment before attempting to run it in production. | -- +----------------------------------------------------------------------------+ prompt Note1: Session Info for this Check set line 9999 col CREATED format a20 col DATABASE_ROLE format a20 col LOG_MODE format a13 col OPEN_MODE format a20 col VERSION format a10 col sessionid format a20 BREAK ON REPORT ON CON_ID ON INST_ID ON OWNER ON INSTANCE_NUMBER ON INSTANCE_NAME ON PNAME ON ts_name ON pdbname ON bs_key ON ROLE ON SNAP_ID ON snap_date SELECT d.INST_ID, d.DBID, d.NAME, d.DATABASE_ROLE, TO_CHAR(d.CREATED, 'yyyy-mm-dd HH24:mi:ss') CREATED, d.LOG_MODE, d.OPEN_MODE, (SELECT b.VERSION FROM v$instance b WHERE ROWNUM = 1) VERSION, (SELECT a.SID || ',' || b.SERIAL# || ',' || c.SPID FROM v$mystat a, v$session b, v$process c WHERE a.SID = b.SID AND b.PADDR = c.ADDR AND ROWNUM = 1) sessionid FROM gv$database d; prompt Note2: Recycle Bin Status for this Check col owner format a15 SELECT a.CON_ID, nvl(a.owner, 'SUM') owner, round(SUM(a.space * (SELECT value FROM v$parameter WHERE name = 'db_block_size')) / 1024 / 1024, 2) recyb_size_M, count(1) recyb_cnt FROM cdb_recyclebin a GROUP BY a.CON_ID, ROLLUP(a.owner); prompt prompt +------------------------------------------------------------------------------------------------------------+ prompt | Oracle Database health Check script | prompt |------------------------------------------------------------------------------------------------------------+ prompt prompt Description: prompt Used to checkOracle 11gDatabase Indicators,Includes main DB parameters、Main Object Status、Storage Config、Database Performance(AWR、ASH、ADDM)、RMANBackup Status etc.。 -- A schema for test: --ALTER USER MDSYS IDENTIFIED BY MDSYS; --ALTER USER MDSYS ACCOUNT UNLOCK; --GRANT DBA TO MDSYS; --GRANT SELECT ANY DICTIONARY TO MDSYS; --CREATE OR REPLACE VIEW BH AS SELECT * FROM SYS.X$BH; --CREATE OR REPLACE PUBLIC SYNONYM X$BH FOR BH; --GRANT EXECUTE ON DBMS_WORKLOAD_REPOSITORY TO MDSYS; --GRANT SELECT ON MGMT$ALERT_CURRENT TO MDSYS; --GRANT SELECT ON MGMT$ALERT_CURRENT TO MDSYS; --GRANT EXECUTE ON DBMS_SYSTEM TO MDSYS; prompt prompt +----------------------------------------------------------------------------+ prompt Health check script execution lasts several minutes,Varies with database size。 prompt Start Execution...... prompt +----------------------------------------------------------------------------+ prompt -- +----------------------------------------------------------------------------+ -- | SCRIPT SETTINGS | -- +----------------------------------------------------------------------------+ set termout off set echo off set feedback off set heading off set verify off set wrap on set trimspool on set serveroutput on set escape on set sqlblanklines on set ARRAYSIZE 500 set pagesize 50000 set linesize 32767 set numwidth 18 set long 2000000000 LONGCHUNKSIZE 100000 clear buffer computes columns alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:mi:ss'; SET APPINFO 'DB_HEALTHCHECK_LHR' --RecordSQLPLUS Error Log set termout off set errorlogging on set errorlogging on TABLE SPERRORLOG identifier LHR_DB_HEALTHCHECK delete from sperrorlog where identifier='LHR_DB_HEALTHCHECK'; COMMIT; prompt host echo '-----Oracle Database Check STRAT,Starting Collect Data Dictionary Information----' prompt Please Wait...... host echo start.....Set Env Variables、ConfightmlHeader.... -------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------- -- +----------------------------------------------------------------------------+ -- | GATHER DATABASE REPORT INFORMATION | -- +----------------------------------------------------------------------------+ COLUMN tdate NEW_VALUE _date NOPRINT COLUMN time NEW_VALUE _time NOPRINT COLUMN date_time NEW_VALUE _date_time NOPRINT COLUMN spool_time NEW_VALUE _spool_time NOPRINT COLUMN date_time_timezone NEW_VALUE _date_time_timezone NOPRINT COLUMN v_current_user NEW_VALUE _v_current_user NOPRINT SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') tdate, TO_CHAR(SYSDATE, 'HH24:MI:SS') time, TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') date_time, TO_CHAR(systimestamp, 'YYYY-MM-DD (') || TRIM(TO_CHAR(systimestamp, 'Day')) || TO_CHAR(systimestamp, ') HH24:MI:SS AM') || TO_CHAR(systimestamp, ' "timezone" TZR') date_time_timezone, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') spool_time, user v_current_user FROM dual; COLUMN dbVERSION NEW_VALUE _dbVERSION NOPRINT COLUMN dbVERSION1 NEW_VALUE _dbVERSION1 NOPRINT COLUMN host_name NEW_VALUE _host_name NOPRINT COLUMN instance_name1 NEW_VALUE _instance_name NOPRINT COLUMN instance_number NEW_VALUE _instance_number NOPRINT COLUMN thread_number NEW_VALUE _thread_number NOPRINT SELECT b.VERSION dbVERSION, host_name host_name, instance_name instance_name1, instance_number instance_number, thread# thread_number, substr(b.VERSION,1,instr(b.VERSION,'.')-1) dbVERSION1 FROM v$instance b; COLUMN startup_time NEW_VALUE _startup_time NOPRINT SELECT CASE np.value WHEN 'TRUE' then listagg('【INST_ID ' || d.INST_ID || ':' || TO_CHAR(startup_time, 'YYYY-MM-DD HH24:MI:SS') || '】 ',',') within group(order by INST_ID) else listagg(TO_CHAR(startup_time, 'YYYY-MM-DD HH24:MI:SS'),',') within group(order by INST_ID) || ' ' end AS startup_time FROM gv$instance d, v$parameter np WHERE np.NAME = 'cluster_database' GROUP BY np.value; COLUMN dbname1 NEW_VALUE _dbname1 NOPRINT COLUMN dbid NEW_VALUE _dbid NOPRINT COLUMN dbname NEW_VALUE _dbname NOPRINT COLUMN reporttitle NEW_VALUE _reporttitle NOPRINT COLUMN platform_name NEW_VALUE _platform_name NOPRINT COLUMN FORCE_LOGGING NEW_VALUE _FORCE_LOGGING NOPRINT COLUMN FLASHBACK_ON NEW_VALUE _FLASHBACK_ON NOPRINT COLUMN platform_id NEW_VALUE _platform_id NOPRINT COLUMN creation_date NEW_VALUE _creation_date NOPRINT COLUMN log_mode NEW_VALUE _log_mode NOPRINT COLUMN DB_ROLE NEW_VALUE _DB_ROLE NOPRINT SELECT DECODE((SELECT b.parallel FROM v$instance b), 'YES', (d.NAME || '_' || (SELECT b.INSTANCE_NUMBER FROM v$instance b)), 'NO', d.NAME) dbname1, name dbname, dbid dbid, 'DB_healthcheck_by_lhr_' || name || '_' ||DECODE((SELECT b.parallel FROM v$instance b), 'YES', (SELECT b.INSTANCE_NUMBER FROM v$instance b)|| '_', 'NO', '') || (SELECT b.VERSION FROM v$instance b) || '_' ||TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') reporttitle, platform_name platform_name, d.FORCE_LOGGING, d.FLASHBACK_ON, platform_id platform_id , TO_CHAR(CREATED, 'YYYY-MM-DD HH24:MI:SS') creation_date , (case when log_mode ='NOARCHIVELOG' then log_mode else log_mode||','||(SELECT a.DESTINATION FROM v$archive_dest a where a.DESTINATION IS NOT NULL and rownum<=1) end) log_mode, D.DATABASE_ROLE DB_ROLE FROM v$database d; COLUMN hostinfo NEW_VALUE _hostinfo NOPRINT SELECT listagg(hostinfo,',') within group(order by hostinfo) hostinfo FROM (SELECT CASE (SELECT b.parallel FROM v$instance b) WHEN 'NO' then ' CPUs:' || SUM(CPUs) || ' Cores:' || SUM(Cores) || ' Sockets:' || SUM(Sockets) || ' Memory:' || SUM(Memory) || 'G' WHEN 'YES' then '【' || 'Inst_id ' || instance_number || ': CPUs:' || SUM(CPUs) || ' Cores:' || SUM(Cores) || ' Sockets:' || SUM(Sockets) || ' Memory:' || SUM(Memory) || 'G】' end hostinfo FROM (SELECT o.snap_id, o.dbid, o.instance_number, DECODE(o.stat_name, 'NUM_CPUS', o.value) CPUs, DECODE(o.stat_name, 'NUM_CPU_CORES', o.value) Cores, DECODE(o.stat_name, 'NUM_CPU_SOCKETS', o.value) Sockets, DECODE(o.stat_name, 'PHYSICAL_MEMORY_BYTES', trunc(o.value / 1024 / 1024 / 1024, 2)) Memory FROM dba_hist_osstat o WHERE o.stat_name IN ('NUM_CPUS', 'NUM_CPU_CORES', 'NUM_CPU_SOCKETS', 'PHYSICAL_MEMORY_BYTES')) WHERE (instance_number, snap_id) in (SELECT t.instance_number, max(t.snap_id) snap_id FROM DBA_HIST_SNAPSHOT t GROUP BY t.instance_number) GROUP BY instance_number); COLUMN global_name NEW_VALUE _global_name NOPRINT SELECT global_name global_name FROM global_name; COLUMN blocksize NEW_VALUE _blocksize NOPRINT SELECT value blocksize FROM v$parameter WHERE name='db_block_size'; COLUMN characterset NEW_VALUE _characterset NOPRINT SELECT value$ characterset FROM sys.props$ WHERE name='NLS_CHARACTERSET'; --SELECT userenv('language') characterset FROM dual; COLUMN timezone NEW_VALUE _timezone NOPRINT SELECT d.version timezone FROM v$timezone_file d ; --SELECT NAME,VALUE$ FROM sys.PROPS$ WHERE NAME='DST_PRIMARY_TT_VERSION'; --SELECT d.* FROM v$timezone_file d; COLUMN pdb NEW_VALUE _pdbs NOPRINT SELECT CASE WHEN COUNT(1) > 0 THEN 'CDB,PDBHas' || COUNT(1) || 'Item,Are:'||listagg(a.NAME,',') within group(order by a.CON_ID) ELSE 'NonCDB' END pdb FROM v$pdbs a; COLUMN DGINFO NEW_VALUE _DGINFO NOPRINT COLUMN DGINFO2 NEW_VALUE _DGINFO2 NOPRINT SELECT case WHEN d.VALUE is null then 'NO' else d.VALUE end DGINFO, case WHEN d.VALUE is null then 'This DB not configuredDGEnvrnmnt' else d.VALUE end DGINFO2 FROM v$parameter d WHERE d.NAME = 'log_archive_config'; COLUMN instance_name_all NEW_VALUE _instance_name_all NOPRINT SELECT listagg(instance_name,',') within group(order by instance_name) instance_name_all FROM gv$instance g; COLUMN cluster_database NEW_VALUE _cluster_database NOPRINT SELECT value cluster_database FROM v$parameter WHERE name='cluster_database'; COLUMN cluster_database_instances NEW_VALUE _cluster_database_instances NOPRINT SELECT value cluster_database_instances FROM v$parameter WHERE name='cluster_database_instances'; COLUMN rac_database NEW_VALUE _rac_database NOPRINT SELECT (SELECT value cluster_database FROM v$parameter WHERE name = 'cluster_database') || ' : ' || (SELECT value cluster_database_instances FROM v$parameter WHERE name = 'cluster_database_instances') rac_database FROM DUAL; ---pdbs COLUMN snap_id NEW_VALUE _snap_id NOPRINT COLUMN snap_id1 NEW_VALUE _snap_id1 NOPRINT SELECT 1 snap_id, 2 snap_id1 FROM dual; SELECT snap_id ,snap_id1 FROM (SELECT d.snap_id, lead(d.snap_id) over(partition by d.startup_time ORDER BY snap_id) snap_id1 FROM dba_hist_snapshot d,v$instance nd WHERE d.instance_number = nd.INSTANCE_NUMBER ORDER BY d.snap_id desc) t WHERE snap_id1 IS NOT NULL AND ROWNUM = 1; COLUMN ash_snap_id NEW_VALUE _ash_snap_id NOPRINT COLUMN ash_snap_id1 NEW_VALUE _ash_snap_id1 NOPRINT SELECT 1 ash_snap_id, 2 ash_snap_id1 FROM dual; SELECT snap_id ash_snap_id,snap_id1 ash_snap_id1 FROM (SELECT d.snap_id, lead(d.snap_id) over(partition by d.startup_time ORDER BY snap_id) snap_id1 FROM dba_hist_ash_snapshot d, v$instance nd WHERE d.instance_number = nd.INSTANCE_NUMBER ORDER BY d.snap_id desc) t WHERE snap_id1 IS NOT NULL AND ROWNUM = 1; COLUMN v_SID NEW_VALUE _v_SID NOPRINT COLUMN v_SERIAL# NEW_VALUE _v_SERIAL NOPRINT COLUMN v_SPID NEW_VALUE _v_SPID NOPRINT COLUMN v_sessionid NEW_VALUE _v_sessionid NOPRINT SELECT a.SID v_SID, b.SERIAL# v_SERIAL#, c.SPID v_SPID, 'INST_ID:'||b.INST_ID||',【'||a.SID||','||b.SERIAL# ||','||c.SPID||'】' v_sessionid FROM v$mystat a, gv$session b , v$process c WHERE a.SID = b.SID and b.PADDR=c.ADDR AND ROWNUM = 1; COLUMN lie_v_tmpsize NEW_VALUE v_tmpsize NOPRINT COLUMN lie_v_undosize NEW_VALUE v_undosize NOPRINT COLUMN lie_v_plan_cost NEW_VALUE v_plan_cost NOPRINT COLUMN lie_v_PLAN_CARDINALITY NEW_VALUE v_PLAN_CARDINALITY NOPRINT COLUMN lie_V_ELAPSED_TIME NEW_VALUE V_ELAPSED_TIME NOPRINT COLUMN lie_v_EXECUTIONS NEW_VALUE v_EXECUTIONS NOPRINT --SELECT 50000485760 lie_v_tmpsize, --bytes 10485760=10M -- 50000485760 lie_v_undosize, --bytes -- 500485760 lie_v_plan_cost, --cost Cost -- 514600000 lie_v_PLAN_CARDINALITY, --Est Rows -- 18000000000 lie_V_ELAPSED_TIME, ---Execution Time,e.g. exec time set5Hour,Then: 5h*60*60*1000000 -- 10000 lie_v_EXECUTIONS --Executions -- FROM dual; SELECT round(SUM(bytes) / 2) lie_v_tmpsize FROM v$tempfile d WHERE d.STATUS = 'ONLINE'; SELECT round(SUM(BYTES) / 2) lie_v_undosize FROM dba_data_files d, dba_tablespaces DT WHERE DT.TABLESPACE_NAME = D.TABLESPACE_NAME AND DT.CONTENTS = 'UNDO' and dt.STATUS = 'ONLINE' GROUP BY D.TABLESPACE_NAME; SELECT round(max(a.COST) * 0.8) lie_v_plan_cost, round(max(a.CARDINALITY) * 0.8) lie_v_PLAN_CARDINALITY FROM gv$sql_plan a where a.OPERATION <> 'MERGE JOIN' AND a.OPTIONS <> 'CARTESIAN'; SELECT round(max(a.ELAPSED_TIME / (DECODE(a.EXECUTIONS, 0, 1, a.EXECUTIONS))) * 0.8)/1000000 LIE_V_ELAPSED_TIME, round(max(a.EXECUTIONS) * 0.8) lie_v_EXECUTIONS FROM GV$SQL a WHERE not exists (SELECT /*+use_hash(a,aa) leading(aa)*/ 1 FROM gv$sql_plan aa WHERE a.SQL_ID = aa.SQL_ID AND aa.INST_ID = a.INST_ID AND aa.OPERATION = 'MERGE JOIN' AND aa.OPTIONS = 'CARTESIAN'); COLUMN nls_language NEW_VALUE _nls_language NOPRINT SELECT d.VALUE nls_language FROM v$parameter d WHERE d.NAME='nls_language'; COLUMN ALERTLOG_PATH NEW_VALUE _ALERTLOG_PATH NOPRINT COLUMN v_osflag NEW_VALUE _v_osflag NOPRINT SELECT 'alert_' || INSTANCE_NAME || '.log' ALERTLOG_NAME, (SELECT CASE WHEN D.PLATFORM_NAME LIKE '%Microsoft%' THEN CHR(92) ELSE CHR(47) END PLATFORM FROM V$DATABASE D) v_osflag, d.value||(SELECT CASE WHEN D.PLATFORM_NAME LIKE '%Microsoft%' THEN CHR(92) ELSE CHR(47) END PLATFORM FROM V$DATABASE D) || 'alert_' || INSTANCE_NAME || '.log' ALERTLOG_PATH FROM v$instance T,V$DIAG_INFO D WHERE D.NAME = 'Diag Trace'; --SELECT substr(d.VALUE, -6, 1) v_osflag -- FROM v$parameter d -- WHERE d.NAME = 'background_dump_dest'; COLUMN sqlid NEW_VALUE _sqlid NOPRINT SELECT '''NULL''' sqlid FROM dual; SELECT '''' || nvl(sql_id,'null') || '''' sqlid FROM (SELECT d.sql_id FROM dba_hist_sqlstat d WHERE d.snap_id = &_snap_id1 AND d.sql_id IS NOT NULL ORDER BY d.snap_id, d.elapsed_time_total desc) WHERE ROWNUM <= 1; COLUMN sqlid1 NEW_VALUE _sqlid1 NOPRINT SELECT '''NULL''' sqlid1 FROM dual; SELECT '''' || nvl(sql_id, 'NULL') || '''' sqlid1 FROM (SELECT d.SQL_ID FROM gv$sql_monitor d WHERE d.sql_id IS NOT NULL ORDER BY D.ELAPSED_TIME desc) WHERE ROWNUM <= 1; COLUMN GGS_GGSUSER_ROLE NEW_VALUE _GGS_GGSUSER_ROLE NOPRINT SELECT 'NULL' GGS_GGSUSER_ROLE FROM dual; SELECT case WHEN SUM(count_gg) > 0 then 'YES' ELSE 'NO' END AS GGS_GGSUSER_ROLE FROM (SELECT count(D.ROLE) count_gg FROM cdb_roles d WHERE d.ROLE = 'GGS_GGSUSER_ROLE' UNION ALL SELECT count(*) FROM cdb_users d WHERE d.username = 'GOLDENGATE'); COLUMN DATABASE_SIZE NEW_VALUE _DATABASE_SIZE NOPRINT WITH wt1 AS (SELECT ts.con_id, ts.TABLESPACE_NAME, df.all_bytes, DECODE(df.TYPE, 'D', nvl(fs.FREESIZ, 0), 'T', df.all_bytes - nvl(fs.FREESIZ, 0)) FREESIZ, df.MAXSIZ FROM cdb_tablespaces ts, (SELECT d.con_id, 'D' TYPE, TABLESPACE_NAME, COUNT(*) ts_df_count, SUM(BYTES) all_bytes, SUM(DECODE(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZ FROM cdb_data_files d GROUP BY d.con_id, TABLESPACE_NAME UNION ALL SELECT d.con_id, 'T', TABLESPACE_NAME, COUNT(*) ts_df_count, SUM(BYTES) all_bytes, SUM(DECODE(MAXBYTES, 0, BYTES, MAXBYTES)) FROM cdb_temp_files d GROUP BY d.con_id, TABLESPACE_NAME) df, (SELECT d.con_id, TABLESPACE_NAME, SUM(BYTES) FREESIZ FROM cdb_free_space d GROUP BY d.con_id, TABLESPACE_NAME UNION ALL SELECT d.con_id, tablespace_name, SUM(d.BLOCK_SIZE * a.BLOCKS) bytes FROM gv$sort_usage a, cdb_tablespaces d WHERE a.tablespace = d.tablespace_name and a.con_id = d.con_id GROUP BY d.con_id, tablespace_name) fs WHERE ts.TABLESPACE_NAME = df.TABLESPACE_NAME AND ts.TABLESPACE_NAME = fs.TABLESPACE_NAME(+) and ts.con_id = Df.con_id and ts.con_id = fs.con_id(+)) SELECT 'All TS Info:【ts_size:' || round(SUM(t.all_bytes) / 1024 / 1024 / 1024, 2) || 'G , Used_Size:' || round(SUM(t.all_bytes - t.FREESIZ) / 1024 / 1024 / 1024, 2) || 'G , Used_per:' || round(SUM(t.all_bytes - t.FREESIZ) * 100 / SUM(t.all_bytes), 2) || '% , MAX_Size:' || round(SUM(MAXSIZ) / 1024 / 1024 / 1024) || 'G】' DATABASE_SIZE FROM wt1 t; COLUMN recyclebin1 NEW_VALUE _recyclebin1 NOPRINT SELECT '''NULL''' recyclebin1 FROM dual; SELECT 'Status:' || a.VALUE || ',Occupied Space:' || (SELECT round(SUM(a.space * (SELECT value FROM v$parameter WHERE name = 'db_block_size')) / 1024 / 1024, 2) || 'M,Total' || count(1) || 'Objects' FROM cdb_recyclebin a) recyclebin1 FROM v$parameter a WHERE a.NAME = 'recyclebin'; COLUMN TS_DELETE NEW_VALUE _TS_DELETE NOPRINT SELECT listagg(all_bytes, ',') within group(order by all_bytes) TS_DELETE FROM (WITH wt1 AS (SELECT ts.TABLESPACE_NAME, sum(df.all_bytes) all_bytes, sum(DECODE(df.TYPE, 'D', nvl(fs.FREESIZ, 0), 'T', df.all_bytes - nvl(fs.FREESIZ, 0))) FREESIZ, sum(df.MAXSIZ) MAXSIZ FROM cdb_tablespaces ts, (SELECT d.con_id, 'D' TYPE, TABLESPACE_NAME, COUNT(*) ts_df_count, SUM(BYTES) all_bytes, SUM(DECODE(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZ FROM cdb_data_files d WHERE D.tablespace_name IN ('SYSTEM', 'SYSAUX') OR D.tablespace_name like 'UNDO%' GROUP BY d.con_id, TABLESPACE_NAME UNION ALL SELECT d.con_id, 'T', TABLESPACE_NAME, COUNT(*) ts_df_count, SUM(BYTES) all_bytes, SUM(DECODE(MAXBYTES, 0, BYTES, MAXBYTES)) FROM cdb_temp_files d GROUP BY d.con_id, TABLESPACE_NAME) df, (SELECT d.con_id, TABLESPACE_NAME, SUM(BYTES) FREESIZ FROM cdb_free_space D WHERE D.tablespace_name IN ('SYSTEM', 'SYSAUX') OR D.tablespace_name like 'UNDO%' GROUP BY d.con_id, TABLESPACE_NAME UNION ALL SELECT d.con_id, tablespace_name, SUM(d.BLOCK_SIZE * a.BLOCKS) bytes FROM gv$sort_usage a, cdb_tablespaces d WHERE a.tablespace = d.tablespace_name and a.con_id = d.con_id GROUP BY d.con_id, tablespace_name) fs WHERE ts.TABLESPACE_NAME = df.TABLESPACE_NAME AND ts.TABLESPACE_NAME = fs.TABLESPACE_NAME(+) and ts.con_id = Df.con_id and ts.con_id = fs.con_id(+) group by ts.TABLESPACE_NAME) SELECT tablespace_name || ':' || round((all_bytes - freesiz) / 1024 / 1024 / 1024) || '/' || round(all_bytes / 1024 / 1024 / 1024) all_bytes FROM wt1 d ORDER BY tablespace_name) V; -------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------- -- +----------------------------------------------------------------------------+ -- | GATHER DATABASE REPORT INFORMATION | -- +----------------------------------------------------------------------------+ set heading on set markup html on spool on preformat off entmap on - head ' - &_dbname1 Check Report - ' - body 'BGCOLOR="#C0C0C0"' SET MARKUP html TABLE 'border="1" summary="Script output" cellspacing="0px" style="border-collapse:collapse;" ' spool &_reporttitle..html set markup html on ENTMAP OFF -- +----------------------------------------------------------------------------+ -- +----------------------------------------------------------------------------+ -- | - REPORT HEADER - | -- +----------------------------------------------------------------------------+ prompt
define reportHeader="
&_dbname Database Health Check Report
" prompt prompt &reportHeader prompt
prompt
prompt prompt [Go to Bottom] prompt
prompt Directory prompt
prompt - - - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt
(One)Check Service Overview
Database Overall Summary Database Basic InfoDatabase Overall Status、DG、OGG、Version、PSU、Host Status、Database Load Status、DB Properties etc.Database Size Resource Usage Components & Features LibraryLibraries
Parameter File All Initialization Parameters Key Initialization Parameters Hidden ParameterDefault values of general system hidden parameters cannot be modifiedspfileFile Content Statistics LevelStat Level
Tablespace Status Tablespace Status InfoIncludes historical growth of tablespacesFlashback Space Usage Temp Tablespace Usage UndoTablespace Usage Undo Segment、Temp Segment Extension
Datafile Status Control FileControl Files
ASMDisk Monitor ASMDisk Usage ASMDisk Group Usage ASMDisk Group Parameter Config ASMInstance
JOBStatus Job Run Status DatabasejobError MsgErrors in Last Week
prompt - - - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - prompt - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt
(Two)Check Service Details
RMANInfo RMANBackup Status RMANConfig Status RMANAll BackupsRMANAll Backups OverviewRMANAll Backup DetailsRMANAll Backup Details,Exclude Archive InfoControl File Backup
spfileFile Backup RMANArchive File Backup Database FlashbackFlashback Technologies
Archive Info Archive Log Settings Archive Log Generation Archive Log Usage Ratio Near7Daily Log Switch Frequency Analysis Daily Log Switch Volume
Log Group Size
SGAInfo SGAUsage Status SGAConfig Info SGARecomm. Config SGADynamic Components PGA TARGET Recomm. Config
FileIOInfo FileIOAnalyze FileIOTime Analysis Full Table Scan Status Sort Status
SQLMonitor Logical ReadsTOP10OfSQL Physical ReadsTOP10OfSQL Execution TimeTOP10OfSQL ExecutionsTOP10OfSQL Parse CountTOP10OfSQL
VersionTOP10OfSQLStatementSQL ordered by Version CountMemoryTOP10OfSQLStatementForshared memorySorted by usage,RecordedSQLOccupylibrary cachesize ofTOP SQLDISK_SORTSevereSQL FromASHQuery ViewSQL GarbageSQLOfRUNNING_11G
GarbageSQLOfRUNNING_10G LASTIn SnapshotSQLStatus LASTLongest execution time in snapshotSQLIn the latest snapshot,Get the one with longest execution timeSQLLongest Exec TimeSQLAtgv$sql_monitorIn,Sorted by time10RecordsLongest Execution TimeSQLReportAtGV$SQL_MONITORIn,Get the one with longest execution timeSQL
Unused Bind VariablesSQLStatementFind SQL not using bind variablesSQLStatement
Flashback Archive Flashback Archive Config Tables with Flashback Archive enabled Flashback Archive Space
DGLibrary DGDB Config Status DGDB Run Status PrimaryDGProcessIncludes primary and standby processesPrimarystandbyLogIncludes Primary and StandbystandbyLog(SRL)Standby Log Apply StatusStandby log apply status and apply process error alerts
prompt - - - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt
(Three)Database Security
Database User Database User List OwnsDBAUsers with Role OwnsSYSUsers with Role Role Overview Users with default system passwords
Total User Size Users with login errors (Last Week) UserPROFILE
Users in SYSTEM Tablespace SYSTEMUsers with default tablespace SYSTEMUsers with temp tablespace Objects in SYSTEM Tablespace
Database Audit Audit Parameter Config Audit Table Status DBAll audit records in
prompt - - - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - prompt
(Four)Database Objects
Segment Status Object Summary Segment Summary Largest Size10Segments Most Extended10Segments LOBSegment
Objects unable to extend Extends over1/2Objects reaching max extents Undo SegmentUndo SegmentTablespace Owner
Table Status Tables with row chaining/migration Exceed10WTables without PK Tables with High Water Mark but no data
Partition Table Status Table Size >10GBNo PartitionTable >10GBTables unpartitionedTop N Partitions10Objects Partition Count >100Tables
Invalid Object Invalid Objects Invalid Normal Indexes Invalid Partition Indexes Invalid Triggers
Index Status Index Count Exceeds5Tables Large Table No Index Composite index overlaps with single-column index Bitmap and Function Indexes FK without IndexMissing index on FK causes deadlocks
Large Indexes Never UsedGreater Than1MIndexes not used during the snapshot periodIndex columns >3Number of columns in composite index is generally3Item,Exceed3need to check rationality Index Height >3Index Height >3Need to consider rebuilding index whenIndex statistics are staleIndex statistics are stale
Parallelism Tables with Parallelism Indexes with Parallelism
Other Objects Alert LogInclude: Latest2000lines of alert log、Latest10ItemoraAlert Log Records、Estimated Alert Log SizeDatabase Directory Recycle Bin Status Database Link(db_link) External Table
All Triggers SequencecacheLess Than20Generally increase it to1000Around,Sequence default20Too SmallMaterialized View typetypeData PumpData Pump
prompt - - - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt
(Five)Database Performance Analysis
AWR AWRStatistics AWRParameter Config Status Database Server Host Info AWRIn Viewload profile Hot Block
The LatestAWRReport
ASH ASHSnapshot Status The LatestASHReport
ADDM The LatestADDM
Statistics Are statistics collected automatically Tables requiring stats collectionTables that have never had statistics collected or1Tables without statistics collected in monthsTemp tables with statistics collectedNot recommended to collect stats for temp tablesTables or Indexes with locked statsQuery which tables or indexes have locked statistics
Session Session Overview Session Status List(Current) HistoryACTIVESession Count Longest Login Time10Sessions Exceed10Sessions unresponsive for hours
Sessions with most commits CPUSessions with longest wait/CPU
Lock ViewLOCKLock Status Check who is locking who Cursor Usage Parallel Process Completion
Memory Usage Query Shared Memory Usage PGAProcess consuming most Hit Ratio
Other Wait EventInclude Current、History、Bysnap_idGroup by etc.OLAPOnline Analytical Processing - (OLAP)Networking
prompt - - - - - - - - - prompt
(Six)Health Check Results
Health Check Results Health Check ResultsBecause this script check is too detailed,So this part will filter the health check report,Filter out problematic partsErrors generated during health check script executionThis part is not part of the health check report content,Only for executor to debug script,Individual errors are normal
prompt
prompt
prompt
-- +====================================================================================================================+ -- | -- | <<<<< Database Health Check Overview >>>>> | -- | | -- +====================================================================================================================+ host echo start...Database Health Check Overview. . prompt prompt
Database Health Check Overview
prompt

host echo " Database Overall Summary. . ." prompt prompt Database Overall Summary


prompt

-- +----------------------------------------------------------------------------+ -- | - DATABASE OVERVIEW - | -- +----------------------------------------------------------------------------+ prompt prompt Database Basic Info


prompt - - - - - - - - - - - - - - - - -
Health Check Report Filename&_reporttitle..html
Check Time&_date_time_timezone
Current Check User&_v_current_user
Current Check Session&_v_sessionid
Database Server Configuration&_hostinfo
OS Information&_platform_name / &_platform_id
Database Name&_dbname
Database Global Name&_global_name
Current Instance&_instance_name
All Instance Names&_instance_name_all
Database Version&_dbversion
DatabaseID(DBID)&_dbid
WhetherRACCluster and Node Count&_rac_database
WhetherCDBAnd ItsPDBCount&_pdbs
Database Creation Time&_creation_date
Instance Startup Time&_startup_time
prompt - - - - - - - - - - - - -
Database Archive Mode&_log_mode
Database Flashback Status&_FLASHBACK_ON
Database Character Set&_characterset
Database Block Size&_blocksize
Force Logging&_FORCE_LOGGING
Database Role&_DB_ROLE
Is ThereDG&_DGINFO
Is ThereOGG&_GGS_GGSUSER_ROLE
db time zone&_timezone
Recycle Bin Status&_recyclebin1
Special Tablespace Status(G)&_TS_DELETE
Database Size&_DATABASE_SIZE
prompt prompt ● Database System Version Info
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN banner FORMAT a300 HEADING 'Database System Version Info' SELECT banner FROM v$version; prompt prompt ● Database SystemPSUInfo
CLEAR COLUMNS COMPUTES SET DEFINE OFF col action_time for a30 col action for a10 col namespace for a10 col version for a10 col bundle_series for a10 col comments for a30 SELECT d.con_id, to_char(d.action_time, 'YYYY-MM-DD HH24:MI:SS') action_time, d.action, d.namespace, d.id, --d.bundle_series, d.comments FROM CDB_REGISTRY_HISTORY d order by d.con_id, d.action_time; prompt prompt ● Private NIC Info
CLEAR COLUMNS COMPUTES SET DEFINE OFF col IS_PUBLIC for a10 SELECT * FROM gv$cluster_interconnects D; prompt prompt ● Database Instance Status
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a75 HEADING 'Database Instance Name' ENTMAP OFF COLUMN instance_number_print FORMAT a75 HEADING 'DB Instance Number' ENTMAP OFF COLUMN thread_number_print HEADING 'Thread No' ENTMAP OFF COLUMN host_name_print FORMAT a75 HEADING 'Hostname' ENTMAP OFF COLUMN version HEADING 'Database Version' ENTMAP OFF COLUMN START_TIME FORMAT a75 HEADING 'Instance Startup Time' ENTMAP OFF COLUMN uptime HEADING 'Run Time(Day)' ENTMAP OFF COLUMN parallel FORMAT a75 HEADING 'RACMode' ENTMAP OFF COLUMN instance_status FORMAT a75 HEADING 'Instance Status' ENTMAP OFF COLUMN database_status FORMAT a75 HEADING 'Database Status' ENTMAP OFF COLUMN logins FORMAT a75 HEADING 'Is Loggable' ENTMAP OFF COLUMN archiver FORMAT a75 HEADING 'Is Archivable' ENTMAP OFF SELECT '
' || INSTANCE_NAME || '
' INSTANCE_NAME_PRINT, '
' || INSTANCE_NUMBER || '
' INSTANCE_NUMBER_PRINT, '
' || THREAD# || '
' THREAD_NUMBER_PRINT, '
' || HOST_NAME || '
' HOST_NAME_PRINT, '
' || VERSION || '
' VERSION, '
' || TO_CHAR(STARTUP_TIME, 'yyyy-mm-dd HH24:MI:SS') || '
' START_TIME, ROUND(TO_CHAR(SYSDATE - STARTUP_TIME), 2) UPTIME, '
' || PARALLEL || '
' PARALLEL, '
' || STATUS || '
' INSTANCE_STATUS, '
' || LOGINS || '
' LOGINS, DECODE(ARCHIVER, 'FAILED', '
' || ARCHIVER || '
', '
' || ARCHIVER || '
') ARCHIVER FROM GV$INSTANCE ORDER BY INSTANCE_NUMBER; prompt prompt ● Database Summary
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN name FORMAT a125 HEADING '    DB_NAME    ' ENTMAP OFF COLUMN dbid HEADING 'DB_ID' ENTMAP OFF COLUMN db_unique_name HEADING 'DB_Unique_Name' ENTMAP OFF COLUMN creation_date FORMAT a140 HEADING '       CREATION_DATE       ' ENTMAP OFF COLUMN platform_name_print FORMAT a140 HEADING '        PLATFORM_NAME        ' ENTMAP OFF COLUMN current_scn HEADING 'CurrentSCN' ENTMAP OFF COLUMN log_mode HEADING 'Log Mode' ENTMAP OFF COLUMN open_mode FORMAT a180 HEADING '           OPEN_MODE           ' ENTMAP OFF COLUMN force_logging FORMAT a140 HEADING '      FORCE_LOGGING      ' ENTMAP OFF COLUMN flashback_on HEADING 'WhetherFlashback?' ENTMAP OFF COLUMN controlfile_type HEADING 'Control File Type' ENTMAP OFF COLUMN SUPPLEMENTAL_LOG_DATA_MIN FORMAT a25 HEADING 'SUPPLEMENTAL|LOG_DATA_MIN' ENTMAP OFF COLUMN SUPPLEMENTAL_LOG_DATA_PK FORMAT a25 HEADING 'SUPPLEMENTAL|LOG_DATA_PK' ENTMAP OFF COLUMN SUPPLEMENTAL_LOG_DATA_MIN FORMAT a25 HEADING 'SUPPLEMENTAL|LOG_DATA_MIN' ENTMAP OFF COLUMN last_open_incarnation# FORMAT a50 HEADING 'LAST_OPEN|INCARNATION#' ENTMAP OFF COLUMN DATABASE_ROLE FORMAT a140 HEADING '        DATABASE_ROLE        ' ENTMAP OFF SELECT d.INST_ID, '
' || NAME || '
' NAME, '
' || dbid || '
' dbid, '
' || db_unique_name || '
' db_unique_name, '
' || TO_CHAR(CREATED, 'yyyy-mm-dd HH24:MI:SS') || '
' creation_date, '
' || platform_name || '
' platform_name_print, '
' || current_scn || '
' current_scn, '
' || log_mode || '
' log_mode, '
' || open_mode || '
' open_mode, '
' || force_logging || '
' force_logging, '
' || flashback_on || '
' flashback_on, '
' || controlfile_type || '
' controlfile_type, '
' || last_open_incarnation# || '
' last_open_incarnation#, d.DATABASE_ROLE, d.SUPPLEMENTAL_LOG_DATA_MIN, d.SUPPLEMENTAL_LOG_DATA_PK FROM gv$database d; prompt
[Back to Contents]

prompt prompt ● PDBStatus


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT a.CON_ID, a.name, a.OPEN_MODE, a.RESTRICTED, a.DBID, a.GUID, a.CREATE_SCN, --a.APPLICATION_ROOT, --a.APPLICATION_PDB, --a.APPLICATION_SEED, --a.APPLICATION_ROOT_CON_ID, --to_char(a.CREATION_TIME, 'YYYY-MM-DD HH24:MI:SS') CREATION_TIME, to_char(a.OPEN_TIME, 'YYYY-MM-DD HH24:MI:SS') OPEN_TIME, round(a.TOTAL_SIZE/1024/1024) TOTAL_SIZE_M FROM v$containers a; /* SELECT a.con_id, a.name, a.open_mode, a.restricted, a.dbid, a.guid, to_char(a.OPEN_TIME,'YYYY-MM-DD HH24:MI:SS') OPEN_TIME, a.CREATE_SCN, a.TOTAL_SIZE FROM v$pdbs a; SELECT a.con_id, a.name, a.open_mode, a.restricted, a.dbid, a.guid, to_char(a.OPEN_TIME,'YYYY-MM-DD HH24:MI:SS') OPEN_TIME a.CREATE_SCN, a.CREATION_TIME, a.TOTAL_SIZE, a.LOCAL_UNDO FROM v$pdbs a; */ prompt
[Back to Contents]

prompt prompt ● Database Server Host Info


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN end_interval_time FORMAT a160 HEADING '        End_Interval_Time        ' ENTMAP OFF COLUMN begin_interval_time FORMAT a140 HEADING '       Begin_Interval_Time       ' ENTMAP OFF COLUMN STARTUP_TIME FORMAT a160 HEADING '        STARTUP_TIME        ' ENTMAP OFF COLUMN PLATFORM_NAME FORMAT a100 HEADING '         PLATFORM_NAME         ' ENTMAP OFF SET DEFINE ON SELECT SNAP_ID, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME, DB_NAME, DBID, INSTANCE_NAME, INSTANCE_NUMBER, STARTUP_TIME, RELEASE, RAC, HOST_NAME, PLATFORM_NAME, CPUS, CORES, SOCKETS, MEMORY_G, ELAPSED_TIME, DB_TIME FROM (SELECT S.SNAP_ID, TO_CHAR(S.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') BEGIN_INTERVAL_TIME, TO_CHAR(S.END_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') END_INTERVAL_TIME, DB_NAME, S.DBID, INSTANCE_NAME, S.INSTANCE_NUMBER, TO_CHAR(S.STARTUP_TIME, 'YYYY-MM-DD hh24:MI:SS') STARTUP_TIME, VERSION RELEASE, PARALLEL RAC, HOST_NAME, DI.PLATFORM_NAME, V.CPUS CPUS, V.CORES, V.SOCKETS, V.MEMORY MEMORY_G, ROUND(EXTRACT(DAY FROM S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) * 1440 + EXTRACT(HOUR FROM S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) * 60 + EXTRACT(MINUTE FROM S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) + EXTRACT(SECOND FROM S.END_INTERVAL_TIME - S.BEGIN_INTERVAL_TIME) / 60, 2) ELAPSED_TIME, ROUND((E.VALUE - B.VALUE) / 1000000 / 60, 2) DB_TIME, DENSE_RANK() OVER(PARTITION BY S.INSTANCE_NUMBER ORDER BY S.SNAP_ID DESC) AS DRANK FROM DBA_HIST_SNAPSHOT S LEFT JOIN (SELECT SNAP_ID, DBID, INSTANCE_NUMBER, SUM(CPUS) CPUS, SUM(CORES) CORES, SUM(SOCKETS) SOCKETS, SUM(MEMORY) MEMORY FROM (SELECT O.SNAP_ID, O.DBID, O.INSTANCE_NUMBER, DECODE(O.STAT_NAME, 'NUM_CPUS', O.VALUE) CPUS, DECODE(O.STAT_NAME, 'NUM_CPU_CORES', O.VALUE) CORES, DECODE(O.STAT_NAME, 'NUM_CPU_SOCKETS', O.VALUE) SOCKETS, DECODE(O.STAT_NAME, 'PHYSICAL_MEMORY_BYTES', TRUNC(O.VALUE / 1024 / 1024 / 1024, 2)) MEMORY FROM DBA_HIST_OSSTAT O WHERE O.STAT_NAME IN ('NUM_CPUS', 'NUM_CPU_CORES', 'NUM_CPU_SOCKETS', 'PHYSICAL_MEMORY_BYTES')) GROUP BY SNAP_ID, DBID, INSTANCE_NUMBER) V ON (S.SNAP_ID = V.SNAP_ID AND S.DBID = S.DBID AND S.INSTANCE_NUMBER = V.INSTANCE_NUMBER) LEFT OUTER JOIN DBA_HIST_DATABASE_INSTANCE DI ON (S.INSTANCE_NUMBER = DI.INSTANCE_NUMBER AND S.STARTUP_TIME = DI.STARTUP_TIME AND S.DBID = DI.DBID) LEFT OUTER JOIN DBA_HIST_SYS_TIME_MODEL E ON (E.SNAP_ID = S.SNAP_ID AND E.INSTANCE_NUMBER = S.INSTANCE_NUMBER AND E.STAT_NAME = 'DB time') LEFT OUTER JOIN DBA_HIST_SYS_TIME_MODEL B ON (B.SNAP_ID + 1 = S.SNAP_ID AND E.STAT_ID = B.STAT_ID AND E.INSTANCE_NUMBER = B.INSTANCE_NUMBER)) WHERE DRANK <= 10 ORDER BY INSTANCE_NUMBER, SNAP_ID DESC; prompt
[Back to Contents] [Next Item]
prompt prompt ● Database Load Status
CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON prompt
[Ref:AWRIn Viewload profile]

prompt

[Back to Contents] [Next Item]
prompt prompt ● Database Properties
CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT D.CON_ID, D.PROPERTY_NAME, D.PROPERTY_VALUE, D.DESCRIPTION FROM cdb_properties D ORDER BY D.CON_ID; prompt
[Back to Contents]

prompt prompt Database Size


prompt NOTE: Can also refer to tablespace section [Tablespace Info] CLEAR COLUMNS COMPUTES SET DEFINE OFF prompt ● ts_datafile_physical_size_GIndicates actual physical size of all tablespace files,i.e. Tablespace Size(ExcludingtempTablespace) prompt ● ts_tempfile_physical_size_GIndicates actual size occupied by all temp tablespace files prompt ● ts_datafile_used_size_GIndicates usage size of all tablespaces,Actual datafile usage size,RMANUncompressed Backup Size(If using compressionas compressedBackup can reduce space by at least half) select A.CON_ID, A.ts_datafile_physical_size_G, B.ts_tempfile_physical_size_G, C.ts_datafile_used_size_G FROM (select A.CON_ID, round(sum(bytes) / 1024 / 1024 / 1024, 2) ts_datafile_physical_size_G from CDB_data_files A GROUP BY A.CON_ID) A, (select A.CON_ID, round(sum(bytes) / 1024 / 1024 / 1024, 2) ts_tempfile_physical_size_G from CDB_temp_files A GROUP BY A.CON_ID) B, (select A.CON_ID, round(sum(bytes) / 1024 / 1024 / 1024, 2) ts_datafile_used_size_G from CDB_segments A GROUP BY A.CON_ID) C WHERE A.CON_ID = B.CON_ID AND A.CON_ID = C.CON_ID ORDER BY con_id; --COLUMN sum3 FORMAT 999,999,999,999,999 HEADING 'dmpFull Backup Approx(G)' --COLUMN sum1 FORMAT 999,999,999,999,999 HEADING 'RMANFull Backup Approx(G)' --COLUMN sum2 FORMAT 999,999,999,999,999 HEADING 'Datafile Capacity(G)' --SELECT '
' || c.sum3|| '
' sum3,a.sum1 sum1,b.sum2 sum2 FROM (SELECT ceil(SUM(BYTES)/1024/1024/1024) sum1 FROM DBA_segments) a,(SELECT ceil(sum(bytes)/1024/1024/1024) sum2 FROM v$datafile) b,(SELECT ceil(sum(bytes)/1024/1024/1024) sum3 FROM dba_extents WHERE segment_type NOT LIKE 'INDEX%' AND segment_type not in('ROLLBACK','CACHE','LOBINDEX','TYPE2 UNDO')) c ; prompt
[Back to Contents]
prompt
prompt prompt Current Client Info
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT sys_context('USERENV', 'ACTION') ACTION, sys_context('USERENV', 'AUTHENTICATED_IDENTITY') AUTHENTICATED_IDENTITY, --sys_context('USERENV', 'AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, sys_context('USERENV', 'AUTHENTICATION_METHOD') AUTHENTICATION_METHOD, sys_context('USERENV', 'CURRENT_EDITION_NAME') CURRENT_EDITION_NAME, sys_context('USERENV', 'CURRENT_SCHEMA') CURRENT_SCHEMA, sys_context('USERENV', 'CURRENT_USER') CURRENT_USER, sys_context('USERENV', 'DATABASE_ROLE') DATABASE_ROLE, sys_context('USERENV', 'DB_NAME') DB_NAME, sys_context('USERENV', 'DB_UNIQUE_NAME') DB_UNIQUE_NAME, sys_context('USERENV', 'HOST') HOST, -- userenv('terminal') sys_context('USERENV', 'IDENTIFICATION_TYPE') IDENTIFICATION_TYPE, sys_context('USERENV', 'INSTANCE') INSTANCE, --userenv('INSTANCE') sys_context('USERENV', 'INSTANCE_NAME') INSTANCE_NAME, sys_context('USERENV', 'IP_ADDRESS') IP_ADDRESS, --ora_client_ip_address sys_context('USERENV', 'ISDBA') ISDBA, --userenv('ISDBA') sys_context('USERENV', 'LANG') LANG, --userenv('LANG') sys_context('USERENV', 'LANGUAGE') LANGUAGE, --userenv('LANGUAGE'), sys_context('USERENV', 'MODULE') MODULE, sys_context('USERENV', 'NETWORK_PROTOCOL') NETWORK_PROTOCOL, sys_context('USERENV', 'NLS_CALENDAR') NLS_CALENDAR, sys_context('USERENV', 'NLS_CURRENCY') NLS_CURRENCY, sys_context('USERENV', 'NLS_DATE_FORMAT') NLS_DATE_FORMAT, sys_context('USERENV', 'NLS_DATE_LANGUAGE') NLS_DATE_LANGUAGE, sys_context('USERENV', 'NLS_SORT') NLS_SORT, sys_context('USERENV', 'NLS_TERRITORY') NLS_TERRITORY, sys_context('USERENV', 'OS_USER') OS_USER, sys_context('USERENV', 'SERVER_HOST') SERVER_HOST, sys_context('USERENV', 'SERVICE_NAME') SERVICE_NAME, sys_context('USERENV', 'SESSION_EDITION_ID') SESSION_EDITION_ID, sys_context('USERENV', 'SESSION_EDITION_NAME') SESSION_EDITION_NAME, sys_context('USERENV', 'SESSION_USER') SESSION_USER, --ora_login_user sys_context('USERENV', 'SESSIONID') SESSIONID, -- userenv('SESSIONID') , v$session.audsid sys_context('USERENV', 'SID') SID, sys_context('USERENV', 'TERMINAL') TERMINAL --userenv('terminal') FROM dual; prompt
[Back to Contents]
prompt
prompt prompt Resource Usage
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN RESOURCE_NAME FORMAT a75 HEADING 'Resource Name' ENTMAP OFF COLUMN CURRENT_UTILIZATION FORMAT 999,999,999,999,999 HEADING 'Current Value' ENTMAP OFF COLUMN MAX_UTILIZATION FORMAT 999,999,999,999,999 HEADING 'Max Value' ENTMAP OFF COLUMN INITIAL_ALLOCATION FORMAT 999,999,999,999,999 HEADING 'Initial Value' ENTMAP OFF COLUMN LIMIT_VALUE FORMAT 999,999,999,999,999 HEADING 'Limit Value' ENTMAP OFF SELECT a.con_id, a.inst_id, a.resource_name, a.current_utilization, a.max_utilization, a.initial_allocation, a.limit_value FROM gv$resource_limit a order by a.con_id, a.inst_id, a.resource_name; prompt
[Back to Contents]
prompt
-------------------------------------------------------------------- prompt prompt Components & Features
-- +----------------------------------------------------------------------------+ -- | - OPTIONS - | -- +----------------------------------------------------------------------------+ prompt prompt ● Options
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN parameter HEADING 'Option Name' ENTMAP OFF COLUMN value HEADING 'Installed?' ENTMAP OFF SELECT a.inst_id, DECODE(value, 'FALSE', '' || parameter || '', '' || parameter || '') parameter, DECODE(value, 'FALSE', '
' || value || '
', '
' || value || '
') value FROM gv$option a ORDER BY a.inst_id, parameter; --prompt
[Back to Contents]

prompt -- +----------------------------------------------------------------------------+ -- | - DATABASE REGISTRY - | -- +----------------------------------------------------------------------------+ prompt prompt ● Database Registry


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN comp_id FORMAT a75 HEADING 'Component ID' ENTMAP OFF COLUMN comp_name FORMAT a75 HEADING 'Component Name' ENTMAP OFF COLUMN version HEADING 'Version' ENTMAP OFF COLUMN status FORMAT a75 HEADING 'Status' ENTMAP OFF COLUMN modified FORMAT a75 HEADING 'Modified' ENTMAP OFF COLUMN control HEADING 'Control' ENTMAP OFF COLUMN schema HEADING 'Schema' ENTMAP OFF COLUMN procedure HEADING 'Procedure' ENTMAP OFF SELECT d.CON_ID, '' || comp_id || '' comp_id, '
' || comp_name || '
' comp_name, version, DECODE(status, 'VALID', '
' || status || '
', 'INVALID', '
' || status || '
', '
' || status || '
') status, '
' || modified || '
' modified, control, schema, procedure FROM cdb_registry d ORDER BY d.CON_ID, comp_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - FEATURE USAGE STATISTICS - | -- +----------------------------------------------------------------------------+ prompt prompt ● Feature Usage Statistics[Next Item]


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN feature_name FORMAT a115 HEADING 'Feature|Name' COLUMN version FORMAT a75 HEADING 'Version' COLUMN detected_usages FORMAT a75 HEADING 'Detected|Usages' COLUMN total_samples FORMAT a75 HEADING 'Total|Samples' COLUMN currently_used FORMAT a60 HEADING 'Currently|Used' COLUMN first_usage_date FORMAT a95 HEADING 'First Usage|Date' COLUMN last_usage_date FORMAT a95 HEADING 'Last Usage|Date' COLUMN last_sample_date FORMAT a95 HEADING 'Last Sample|Date' COLUMN next_sample_date FORMAT a95 HEADING 'Next Sample|Date' SELECT d.CON_ID, '
' || name || '
' feature_name, DECODE(detected_usages, 0, version, '' || version || '') version, DECODE(detected_usages, 0, '
' || NVL(TO_CHAR(detected_usages), '
') || '
', '
' || NVL(TO_CHAR(detected_usages), '
') || '
') detected_usages, DECODE(detected_usages, 0, '
' || NVL(TO_CHAR(total_samples), '
') || '
', '
' || NVL(TO_CHAR(total_samples), '
') || '
') total_samples, DECODE(detected_usages, 0, '
' || NVL(currently_used, '
') || '
', '
' || NVL(currently_used, '
') || '
') currently_used, DECODE(detected_usages, 0, '
' || NVL(TO_CHAR(first_usage_date, 'yyyY-MM-DD HH24:MI:SS'), '
') || '
', '
' || NVL(TO_CHAR(first_usage_date, 'yyyY-MM-DD HH24:MI:SS'), '
') || '
') first_usage_date, DECODE(detected_usages, 0, '
' || NVL(TO_CHAR(last_usage_date, 'yyyY-MM-DD HH24:MI:SS'), '
') || '
', '
' || NVL(TO_CHAR(last_usage_date, 'yyyY-MM-DD HH24:MI:SS'), '
') || '
') last_usage_date, DECODE(detected_usages, 0, '
' || NVL(TO_CHAR(last_sample_date, 'yyyY-MM-DD HH24:MI:SS'), '
') || '
', '
' || NVL(TO_CHAR(last_sample_date, 'yyyY-MM-DD HH24:MI:SS'), '
') || '
') last_sample_date, DECODE(detected_usages, 0, '
' || NVL(TO_CHAR((last_sample_date + SAMPLE_INTERVAL / 60 / 60 / 24), 'yyyY-MM-DD HH24:MI:SS'), '
') || '
', '
' || NVL(TO_CHAR((last_sample_date + SAMPLE_INTERVAL / 60 / 60 / 24), 'yyyY-MM-DD HH24:MI:SS'), '
') || '
') next_sample_date FROM cdb_feature_usage_statistics d ORDER BY d.CON_ID, name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - HIGH WATER MARK STATISTICS - | -- +----------------------------------------------------------------------------+ prompt prompt ● High Water Mark Statistics


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN statistic_name FORMAT a115 HEADING 'Statistic Name' COLUMN version FORMAT a62 HEADING 'Version' COLUMN highwater FORMAT 9,999,999,999,999,999 HEADING 'Highwater' COLUMN last_value FORMAT 9,999,999,999,999,999 HEADING 'Last Value' COLUMN description FORMAT a120 HEADING 'Description' SELECT d.CON_ID, '
' || name || '
' statistic_name, '
' || version || '
' version, highwater highwater, last_value last_value, description description FROM cdb_high_water_mark_statistics d ORDER BY d.CON_ID, name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - LIBRARIES - | -- +----------------------------------------------------------------------------+ prompt prompt Libraries[Next Item]


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN library_name FORMAT a75 HEADING 'Library Name' ENTMAP OFF COLUMN file_spec HEADING 'File Spec' ENTMAP OFF COLUMN dynamic FORMAT a75 HEADING 'Dynamic?' ENTMAP OFF COLUMN status FORMAT a75 HEADING 'Status' ENTMAP OFF SELECT D.CON_ID, '
' || owner || '
' owner, '' || library_name || '' library_name, file_spec file_spec, '
' || dynamic || '
' dynamic, DECODE(status, 'VALID', '
' || status || '
', '
' || status || '
') status FROM CDB_libraries D ORDER BY D.CON_ID, owner, library_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - INITIALIZATION PARAMETERS - | -- +----------------------------------------------------------------------------+ prompt prompt Parameter File


prompt

prompt prompt All Initialization Parameters [Next Item]


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN spfile HEADING 'SPFILE Usage' SELECT case WHEN d.VALUE IS NOT NULL then 'This database ' || 'IS' || ' using an SPFILE.' else 'This database ' || 'IS NOT' || ' using an SPFILE.' end AS sspfile FROM v$parameter d WHERE d.NAME = 'spfile'; COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP OFF COLUMN instance_name_print FORMAT a45 HEADING 'Instance_Name' ENTMAP OFF COLUMN value FORMAT a75 HEADING 'Value' ENTMAP OFF COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP OFF COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP OFF COLUMN ISDEPRECATED FORMAT a75 HEADING 'ISDEPRECATED' ENTMAP OFF COLUMN DESCRIPTION FORMAT a200 HEADING 'DESCRIPTION                ' ENTMAP OFF SELECT P.CON_ID,DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.name, 0, 512) || '', '' || SUBSTR(p.name, 0, 512) || '') pname, DECODE(p.isdefault, 'FALSE', '' || i.instance_name || '', i.instance_name) instance_name_print, DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.value, 0, 512) || '', SUBSTR(p.value, 0, 512)) value, p.DISPLAY_VALUE, DECODE(p.isdefault, 'FALSE', '
' || p.isdefault || '
', '
' || p.isdefault || '
') isdefault, DECODE(p.isdefault, 'FALSE', '
' || p.issys_modifiable || '
', '
' || p.issys_modifiable || '
') issys_modifiable, p.ISDEPRECATED, p.DESCRIPTION FROM gv$parameter p, gv$instance i WHERE p.inst_id = i.inst_id ORDER BY p.name, i.instance_name; prompt
[Back to Contents] [Previous Item]

prompt prompt PDBParameter


prompt PDBparameters stored in CDB Of PDB_SPFILE$ in dictionary table con_id Diff,So, PDB Of PDB_SPFILE$ Table is empty,Can also queryV$SYSTEM_PARAMETERGet CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP OFF COLUMN instance_name_print FORMAT a45 HEADING 'Instance_Name' ENTMAP OFF COLUMN value FORMAT a75 HEADING 'Value' ENTMAP OFF COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP OFF COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP OFF COLUMN ISDEPRECATED FORMAT a75 HEADING 'ISDEPRECATED' ENTMAP OFF COLUMN DESCRIPTION FORMAT a200 HEADING 'DESCRIPTION                ' ENTMAP OFF SET DEFINE ON select a.pdb_uid , b.NAME , a.name , a.value$ from pdb_spfile$ a , v$pdbs b where a.pdb_uid = b.CON_UID order by b.NAME ; prompt
[Back to Contents]

prompt
prompt prompt Key Initialization Parameters


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN pname FORMAT a75 HEADING 'Param Name' ENTMAP OFF COLUMN instance_name_print FORMAT a45 HEADING 'Instance Name' ENTMAP OFF COLUMN value FORMAT a75 HEADING 'Param Value' ENTMAP OFF SELECT P.CON_ID,DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.name, 0, 512) || '', '' || SUBSTR(p.name, 0, 512) || '') pname, DECODE(p.isdefault, 'FALSE', '' || i.instance_name || '', i.instance_name) instance_name_print, DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.value, 0, 512) || '', SUBSTR(p.value, 0, 512)) value FROM gv$parameter p, gv$instance i WHERE p.inst_id = i.inst_id AND p.name in ('shared_pool_size','open_cursors','processes','job_queue_processes','sga_max_size','log_archive_dest_1', 'sessions','spfile','cpu_count','sga_target','db_cache_size','shared_pool_size','large_pool_size','java_pool_size','log_buffer','pga_aggregate_target','sort_area_size','db_block_size','optimizer_mode','cursor_sharing','open_cursors','optimizer_index_cost_adj','optimizer_index_caching','db_file_multiblock_read_count','hash_join_enabled','thread','instance_number','instance_name','local_listener','compatible','commit_point_strength','dblink_encrypt_login','distributed_lock_timeout','distributed_recovery_connection_hold_time','distributed_transactions','global_names','job_queue_interval','job_queue_processes','max_transaction_branches','open_links','open_links_per_instance','parallel_automatic_tuning','parallel_max_servers','parallel_min_servers','parallel_server_idle_time','processes','remote_dependencies_mode','replication_dependency_tracking','shared_pool_size','utl_file_dir','db_create_file_dest') ORDER BY p.name, i.instance_name; prompt
[Back to Contents]
prompt prompt Hidden Parameter


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP OFF COLUMN instance_name_print FORMAT a45 HEADING 'Instance_Name' ENTMAP OFF COLUMN value FORMAT a75 HEADING 'Value' ENTMAP OFF COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP OFF COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP OFF COLUMN ISDEPRECATED FORMAT a75 HEADING 'ISDEPRECATED' ENTMAP OFF COLUMN DESCRIPTION FORMAT a200 HEADING 'DESCRIPTION                ' ENTMAP OFF SET DEFINE ON SELECT P.CON_ID, DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.name, 0, 512) || '', '' || SUBSTR(p.name, 0, 512) || '') pname, DECODE(p.isdefault, 'FALSE', '' || i.instance_name || '', i.instance_name) instance_name_print, DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.value, 0, 512) || '', SUBSTR(p.value, 0, 512)) value, p.DISPLAY_VALUE, DECODE(p.isdefault, 'FALSE', '
' || p.isdefault || '
', '
' || p.isdefault || '
') isdefault, DECODE(p.isdefault, 'FALSE', '
' || p.issys_modifiable || '
', '
' || p.issys_modifiable || '
') issys_modifiable, p.ISDEPRECATED, p.DESCRIPTION FROM gv$parameter p, gv$instance i WHERE p.inst_id = i.inst_id AND p.NAME like '=_%' escape '=' ORDER BY p.name, i.instance_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - STATISTICS LEVEL - | -- +----------------------------------------------------------------------------+ prompt prompt Statistics Level


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a20 HEADING 'Instance_Name' ENTMAP OFF COLUMN statistics_name FORMAT a50 HEADING 'Statistics Name' ENTMAP OFF COLUMN session_status FORMAT a20 HEADING 'Session Status' ENTMAP OFF COLUMN system_status FORMAT a20 HEADING 'System Status' ENTMAP OFF COLUMN activation_level FORMAT a20 HEADING 'Activation Level' ENTMAP OFF COLUMN statistics_view_name FORMAT a100 HEADING '    Statistics View Name    ' ENTMAP OFF COLUMN session_settable FORMAT a20 HEADING 'Session Settable?' ENTMAP OFF SET DEFINE ON SELECT '
' || i.instance_name || '
' instance_name_print , '
' || s.statistics_name || '
' statistics_name ,DESCRIPTION , DECODE( s.session_status , 'ENABLED' , '
' || s.session_status || '
' , '
' || s.session_status || '
') session_status , DECODE( s.system_status , 'ENABLED' , '
' || s.system_status || '
' , '
' || s.system_status || '
') system_status , (CASE s.activation_level WHEN 'TYPICAL' THEN '
' || s.activation_level || '
' WHEN 'ALL' THEN '
' || s.activation_level || '
' WHEN 'BASIC' THEN '
' || s.activation_level || '
' ELSE '
' || s.activation_level || '
' END) activation_level , s.statistics_view_name statistics_view_name , '
' || s.session_settable || '
' session_settable FROM gv$statistics_level s , gv$instance i WHERE s.inst_id = i.inst_id ORDER BY i.instance_name , s.statistics_name; prompt
[Back to Contents]

-------------------------------------------------------------------- host echo " Tablespace Status. . ." prompt prompt Tablespace Status


prompt

prompt prompt Tablespace Status


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN status HEADING 'Status' ENTMAP OFF COLUMN name HEADING 'Tablespace Name' ENTMAP OFF COLUMN type FORMAT a12 HEADING 'Tablespace Type' ENTMAP OFF COLUMN extent_mgt FORMAT a12 HEADING 'Extent Mgt Type' ENTMAP OFF COLUMN segment_mgt FORMAT a12 HEADING 'Segment Mgt Type' ENTMAP OFF COLUMN ts_size FORMAT 999,999,999,999,999 HEADING 'Tablespace Size(MB)' ENTMAP OFF COLUMN free FORMAT 999,999,999,999,999 HEADING 'Free(MB)' ENTMAP OFF COLUMN used FORMAT 999,999,999,999,999 HEADING 'Usage(MB)' ENTMAP OFF COLUMN pct_used HEADING 'Pct. Used' ENTMAP OFF COLUMN BIGFILE FORMAT a10 HEADING 'BIGFILE' ENTMAP OFF COMPUTE SUM label 'Total:' OF ts_size used free ON report SELECT CON_ID, PDBNAME, TS#, TS_NAME, TS_SIZE_M, FREE_SIZE_M, USED_SIZE_M, USED_PER, MAX_SIZE_G, USED_PER_MAX, BLOCK_SIZE, LOGGING, TS_DF_COUNT FROM (WITH wt1 AS (SELECT ts.CON_ID, (SELECT np.NAME FROM V$CONTAINERS np WHERE np.CON_ID = tS.con_id) PDBNAME, (SELECT A.TS# FROM V$TABLESPACE A WHERE A.NAME = UPPER(tS.TABLESPACE_NAME) AND a.CON_ID = tS.con_id) TS#, ts.TABLESPACE_NAME, df.all_bytes, decode(df.TYPE, 'D', nvl(fs.FREESIZ, 0), 'T', df.all_bytes - nvl(fs.FREESIZ, 0)) FREESIZ, df.MAXSIZ, ts.BLOCK_SIZE, ts.LOGGING, ts.FORCE_LOGGING, ts.CONTENTS, ts.EXTENT_MANAGEMENT, ts.SEGMENT_SPACE_MANAGEMENT, ts.RETENTION, ts.DEF_TAB_COMPRESSION, df.ts_df_count FROM cdb_tablespaces ts, (SELECT d.CON_ID, 'D' TYPE, TABLESPACE_NAME, COUNT(*) ts_df_count, SUM(BYTES) all_bytes, SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZ FROM cdb_data_files d GROUP BY d.CON_ID, TABLESPACE_NAME UNION ALL SELECT d.CON_ID, 'T', TABLESPACE_NAME, COUNT(*) ts_df_count, SUM(BYTES) all_bytes, SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES)) FROM cdb_temp_files d GROUP BY d.CON_ID, TABLESPACE_NAME) df, (SELECT d.CON_ID, TABLESPACE_NAME, SUM(BYTES) FREESIZ FROM cdb_free_space d GROUP BY d.CON_ID, TABLESPACE_NAME UNION ALL SELECT d.CON_ID, tablespace_name, SUM(d.BLOCK_SIZE * a.BLOCKS) bytes FROM gv$sort_usage a, cdb_tablespaces d WHERE a.tablespace = d.tablespace_name AND a.CON_ID = d.CON_ID GROUP BY d.CON_ID, tablespace_name) fs WHERE ts.TABLESPACE_NAME = df.TABLESPACE_NAME AND ts.CON_ID = df.CON_ID AND ts.TABLESPACE_NAME = fs.TABLESPACE_NAME(+) AND ts.CON_ID = fs.CON_ID(+)) SELECT T.CON_ID, (CASE WHEN T.PDBNAME = LAG(T.PDBNAME, 1) OVER(PARTITION BY T.PDBNAME ORDER BY TS#) THEN NULL ELSE T.PDBNAME END) PDBNAME, TS#, t.TABLESPACE_NAME TS_Name, round(t.all_bytes / 1024 / 1024) ts_size_M, round(t.freesiz / 1024 / 1024) Free_Size_M, round((t.all_bytes - t.FREESIZ) / 1024 / 1024) Used_Size_M, round((t.all_bytes - t.FREESIZ) * 100 / t.all_bytes, 3) Used_per, round(MAXSIZ / 1024 / 1024 / 1024, 3) MAX_Size_g, round(decode(MAXSIZ, 0, to_number(NULL), (t.all_bytes - FREESIZ)) * 100 / MAXSIZ, 3) USED_per_MAX, round(t.BLOCK_SIZE) BLOCK_SIZE, t.LOGGING, t.ts_df_count FROM wt1 t UNION ALL SELECT DISTINCT T.CON_ID, '' PDBNAME, to_number('') TS#, 'ALL TS:' TS_Name, round(SUM(t.all_bytes) / 1024 / 1024, 3) ts_size_M, round(SUM(t.freesiz) / 1024 / 1024) Free_Size_m, round(SUM(t.all_bytes - t.FREESIZ) / 1024 / 1024) Used_Size_M, round(SUM(t.all_bytes - t.FREESIZ) * 100 / SUM(t.all_bytes), 3) Used_per, round(SUM(MAXSIZ) / 1024 / 1024 / 1024) MAX_Size, to_number('') "USED,% of MAX Size", to_number('') BLOCK_SIZE, '' LOGGING, to_number('') ts_df_count FROM wt1 t GROUP BY rollup(CON_ID,PDBNAME) ) ORDER BY CON_ID,TS# ; prompt ● SYSAUXTablespace Usage Details
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT D.CON_ID, OCCUPANT_NAME, OCCUPANT_DESC, SCHEMA_NAME, MOVE_PROCEDURE, MOVE_PROCEDURE_DESC, SPACE_USAGE_KBYTES SPACE_USAGE_KB, ROUND(SPACE_USAGE_KBYTES / 1024 / 1024, 2) SPACE_USAGE_G FROM V$SYSAUX_OCCUPANTS D ORDER BY D.CON_ID, D.SPACE_USAGE_KBYTES DESC; prompt
[Back to Contents]
-- +----------------------------------------------------------------------------+ -- | - DATABASE GROWTH - | -- +----------------------------------------------------------------------------+ prompt prompt Tablespace Daily Growth(Database Growth)
prompt NOTE: Can check viewcdb_hist_seg_statAndcdb_hist_seg_stat_objAnalyze incremental status of DB objects in detail CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT a.snap_id, a.con_id, e.name pdbname, c.tablespace_name ts_name, to_char(to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss'), 'yyyy-mm-dd hh24:mi') rtime, round(a.tablespace_size * c.block_size / 1024 / 1024, 2) ts_size_mb, round(a.tablespace_usedsize * c.block_size / 1024 / 1024, 2) ts_used_mb, round((a.tablespace_size - a.tablespace_usedsize) * c.block_size / 1024 / 1024, 2) ts_free_mb, round(a.tablespace_usedsize / a.tablespace_size * 100, 2) pct_used FROM cdb_hist_tbspc_space_usage a, (SELECT tablespace_id, nb.con_id, substr(rtime, 1, 10) rtime, max(snap_id) snap_id FROM cdb_hist_tbspc_space_usage nb group by tablespace_id, nb.con_id,substr(rtime, 1, 10)) b, cdb_tablespaces c, v$tablespace d, V$CONTAINERS e where a.snap_id = b.snap_id and a.tablespace_id = b.tablespace_id and a.con_id=b.con_id and a.con_id=c.con_id and a.con_id=d.con_id and a.con_id=e.con_id and a.tablespace_id=d.TS# and d.NAME=c.tablespace_name and to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss') >=sysdate-30 order by a.CON_ID,a.tablespace_id,to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss') desc; prompt
[Back to Contents]
prompt prompt Database Flashback Space Usage
prompt ● Database Flashback Space Overall Usage
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT NAME, round(space_limit / 1024 / 1024 / 1024, 3) "LIMIT_GB", round(space_used / 1024 / 1024 / 1024, 3) "USED_GB", round(space_used / space_limit * 100, 3) "USED%", round(space_reclaimable / 1024 / 1024 / 1024, 3) "RECLAIM_GB", number_of_files FROM v$recovery_file_dest v WHERE v.SPACE_LIMIT<>0; prompt
[Back to Contents]
prompt prompt ● Database Flashback Space Usage Details
CLEAR COLUMNS COMPUTES SET DEFINE OFF ---- BREAK ON report --COMPUTE SUM label 'Total:' OF USED_GB percent_space_used percent_space_reclaimable RECLAIM_GB number_of_files ON report SELECT nvl(frau.file_type,'Total:') file_type, sum(round(frau.percent_space_used / 100 * rfd.space_limit / 1024 / 1024 / 1024,3)) USED_GB, sum(frau.percent_space_used) percent_space_used, sum(frau.percent_space_reclaimable) percent_space_reclaimable, sum(round(frau.percent_space_reclaimable / 100 * rfd.space_limit / 1024 / 1024 / 1024,3)) RECLAIM_GB, sum(frau.number_of_files) number_of_files FROM v$flash_recovery_area_usage frau, v$recovery_file_dest rfd GROUP BY ROLLUP(file_type) ; prompt
[Back to Contents]
prompt prompt Temp Tablespace Usage
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT D.CON_ID, d.tablespace_name "Name", TO_CHAR(NVL(a.bytes / 1024 / 1024, 0), '99,999,990.900') "Size (M)", TO_CHAR(NVL(t.hwm, 0) / 1024 / 1024, '99999999.999') "HWM (M)", TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), '990.00') "HWM % ", TO_CHAR(NVL(t.bytes / 1024 / 1024, 0), '99999999.999') "Using (M)", TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Using %" FROM CDB_tablespaces d, (SELECT A.CON_ID, tablespace_name, sum(bytes) bytes FROM CDB_temp_files A GROUP BY A.CON_ID, tablespace_name) a, (SELECT A.CON_ID, tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes FROM v$temp_extent_pool A GROUP BY A.CON_ID, tablespace_name) t WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = t.tablespace_name(+) AND D.CON_ID=A.CON_ID(+) AND D.CON_ID=T.CON_ID(+) AND d.extent_management = 'LOCAL' AND d.contents = 'TEMPORARY'; prompt
[Back to Contents]

prompt prompt UndoTablespace Usage


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT r.name Undo Seg Name, rssize/1024/1024/1024 "RSSize(G)", s.sid, s.serial#, s.username Username, s.status, s.sql_hash_value, s.SQL_ADDRESS, s.MACHINE, s.MODULE, substr(s.program, 1, 78) Operation Program, r.usn, hwmsize/1024/1024/1024,shrinks ,xacts FROM sys.v_$session s,sys.v_$transaction t,sys.v_$rollname r, v$rollstat rs WHERE t.addr = s.taddr AND t.xidusn = r.usn AND r.usn=rs.USN ORDER BY rssize desc; prompt
[Back to Contents]

prompt prompt Observe Undo Segments,Temp Segment Extension


prompt NOTE: UndoAndTempTablespace is not recommended to be set to auto-extend prompt prompt ● Undo Segment
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN autoextensible FORMAT a100 HEADING 'autoextensible' ENTMAP OFF COLUMN online_status FORMAT a15 HEADING 'online_status' ENTMAP OFF SELECT t.con_id, t.FILE_ID, t.file_name, t.tablespace_name, (t.bytes) Undo_TS_SIZE, (DECODE(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZE, DECODE(t.autoextensible, 'YES', '
' || t.autoextensible || '
', t.autoextensible) autoextensible, round((t.INCREMENT_BY * 8 * 1024) / 1024 / 1024, 3) INCREMENT_BY_M, t.online_status, 'alter database datafile ' || t.FILE_ID || ' autoextend off' exec_sql FROM cdb_data_files t WHERE tablespace_name like '%UNDO%' order by t.CON_ID; prompt ● Temp Segment
COLUMN autoextensible FORMAT a100 HEADING 'autoextensible' ENTMAP OFF SELECT t.CON_ID, t.FILE_ID, t.file_name, t.TABLESPACE_NAME, (t.bytes) Temp_TS_SIZE, (DECODE(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZE, t.status, DECODE(t.autoextensible, 'YES', '
' || t.autoextensible || '
', t.autoextensible) autoextensible, round((t.INCREMENT_BY * 8 * 1024) / 1024 / 1024, 3) INCREMENT_BY_M, 'alter database tempfile ' || t.FILE_ID || ' autoextend off' exec_sql FROM cdb_temp_files t order by t.CON_ID; prompt
[Back to Contents]

prompt
-- +============================================================================+ -- | | -- | <<<<< STORAGE >>>>> | -- | | -- +============================================================================+ -- +----------------------------------------------------------------------------+ -- | - DATA FILES - | -- +----------------------------------------------------------------------------+ prompt prompt Datafile Status


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN AUTOEXTENSIBLE format a15 HEADING 'AUTOEXTENSIBLE' ENTMAP OFF COLUMN CREATION_TIME FORMAT a140 HEADING '        CREATION_TIME        ' ENTMAP OFF COLUMN MAXBYTES FORMAT 999,999,999,999,999 HEADING 'MAXBYTES' ENTMAP OFF SET DEFINE ON SELECT FILE_ID, CON_ID, (CASE WHEN T.PDBNAME = LAG(T.PDBNAME, 1) OVER(PARTITION BY T.PDBNAME ORDER BY TS#) THEN NULL ELSE T.PDBNAME END) PDBNAME, TS#, TABLESPACE_NAME, TS_SIZE_M, FILE_NAME, FILE_SIZE_M, FILE_MAX_SIZE_G, AUTOEXTENSIBLE, INCREMENT_M, AUTOEXTEND_RATIO, CREATION_TIME, INCREMENT_BY_BLOCK, BYTES, BLOCKS, MAXBYTES, MAXBLOCKS, USER_BYTES, USER_BLOCKS FROM (SELECT D.FILE_ID, D.CON_ID, (SELECT NP.NAME FROM V$CONTAINERS NP WHERE NP.CON_ID = D.CON_ID) PDBNAME, (SELECT A.TS# FROM V$TABLESPACE A WHERE A.NAME = UPPER(D.TABLESPACE_NAME) AND A.CON_ID = D.CON_ID) TS#, D.TABLESPACE_NAME, (SELECT ROUND(SUM(NB.BYTES) / 1024 / 1024, 2) FROM CDB_DATA_FILES NB WHERE NB.TABLESPACE_NAME = D.TABLESPACE_NAME AND NB.CON_ID = D.CON_ID) TS_SIZE_M, D.FILE_NAME, ROUND(D.BYTES / 1024 / 1024, 2) FILE_SIZE_M, ROUND(D.MAXBYTES / 1024 / 1024 / 1024, 2) FILE_MAX_SIZE_G, D.AUTOEXTENSIBLE, ROUND(D.INCREMENT_BY * 8 * 1024 / 1024 / 1024, 2) INCREMENT_M, ROUND(D.BYTES * 100 / DECODE(D.MAXBYTES, 0, BYTES, D.MAXBYTES), 2) AUTOEXTEND_RATIO, (SELECT B.CREATION_TIME FROM SYS.V_$DATAFILE B WHERE B.FILE# = D.FILE_ID AND B.CON_ID = D.CON_ID) CREATION_TIME, D.INCREMENT_BY INCREMENT_BY_BLOCK, D.BYTES, D.BLOCKS, D.MAXBYTES, D.MAXBLOCKS, D.USER_BYTES, D.USER_BLOCKS FROM CDB_DATA_FILES D UNION ALL SELECT D.FILE_ID, D.CON_ID, (SELECT NP.NAME FROM V$CONTAINERS NP WHERE NP.CON_ID = D.CON_ID) PDBNAME, (SELECT A.TS# FROM V$TABLESPACE A WHERE A.NAME = UPPER(D.TABLESPACE_NAME) AND A.CON_ID = D.CON_ID) TS#, D.TABLESPACE_NAME, (SELECT ROUND(SUM(NB.BYTES) / 1024 / 1024, 2) FROM V$TEMPFILE NB WHERE NB.NAME = D.FILE_NAME AND NB.CON_ID = D.CON_ID) TS_SIZE, D.FILE_NAME, ROUND(D.BYTES / 1024 / 1024, 2) FILE_SIZE_M, ROUND(D.MAXBYTES / 1024 / 1024 / 1024, 2) FILE_MAX_SIZE_G, D.AUTOEXTENSIBLE, ROUND(D.INCREMENT_BY * 8 * 1024 / 1024 / 1024, 2) INCREMENT_M, ROUND(D.BYTES * 100 / DECODE(D.MAXBYTES, 0, BYTES, D.MAXBYTES), 2) AUTOEXTEND_RATIO, (SELECT B.CREATION_TIME FROM SYS.V_$DATAFILE B WHERE B.FILE# = D.FILE_ID AND B.CON_ID = D.CON_ID) CREATION_TIME, D.INCREMENT_BY INCREMENT_BY_BLOCK, D.BYTES, D.BLOCKS, D.MAXBYTES, D.MAXBLOCKS, D.USER_BYTES, D.USER_BLOCKS FROM CDB_TEMP_FILES D) T ORDER BY CON_ID,TS#,FILE_ID; prompt
[Back to Contents]

------------------------------------------------------------------------------------------------------------------------------------------------ prompt prompt ● Control File(Control Files)


-- +----------------------------------------------------------------------------+ -- | - CONTROL FILES - | -- +----------------------------------------------------------------------------+ prompt prompt ● Control Files
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN name HEADING 'Controlfile Name' ENTMAP OFF COLUMN status FORMAT a75 HEADING 'Status' ENTMAP OFF COLUMN file_size FORMAT a75 HEADING 'File Size' ENTMAP OFF SELECT C.NAME NAME, DECODE(C.STATUS, NULL, '
VALID
', '
' || C.STATUS || '
') STATUS, '
' || TO_CHAR(BLOCK_SIZE * FILE_SIZE_BLKS, '999,999,999,999') || '
' FILE_SIZE FROM V$CONTROLFILE C ORDER BY C.NAME; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - CONTROL FILE RECORDS - | -- +----------------------------------------------------------------------------+ prompt prompt Control File Records


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN type FORMAT a95 HEADING 'Record Section Type' ENTMAP OFF COLUMN record_size FORMAT 999,999 HEADING 'Record Size|(in bytes)' ENTMAP OFF COLUMN records_total FORMAT 999,999 HEADING 'Records Allocated' ENTMAP OFF COLUMN bytes_alloc FORMAT 999,999,999 HEADING 'Bytes Allocated' ENTMAP OFF COLUMN records_used FORMAT 999,999 HEADING 'Records Used' ENTMAP OFF COLUMN bytes_used FORMAT 999,999,999 HEADING 'Bytes Used' ENTMAP OFF COLUMN pct_used FORMAT B999 HEADING '% Used' ENTMAP OFF COLUMN first_index HEADING 'First Index' ENTMAP OFF COLUMN last_index HEADING 'Last Index' ENTMAP OFF COLUMN last_recid HEADING 'Last RecID' ENTMAP OFF COMPUTE sum LABEL 'Total: ' of record_size records_total bytes_alloc records_used bytes_used ON report COMPUTE avg LABEL 'Average: ' of pct_used ON report SELECT '
' || type || '
' type , record_size record_size , records_total records_total , (records_total * record_size) bytes_alloc , records_used records_used , (records_used * record_size) bytes_used , NVL(records_used/records_total * 100, 0) pct_used , first_index first_index , last_index last_index , last_recid last_recid FROM v$controlfile_record_section ORDER BY type; prompt
[Back to Contents]

-------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------- host echo " ASMDisk Monitor. . ." prompt prompt ASMDisk Monitor


prompt

prompt prompt ASMDisk Usage


CLEAR COLUMNS COMPUTES SET DEFINE OFF --COMPUTE SUM label 'Total:' OF TOTAL_MB FREE_MB ON report SELECT a.con_id, a.inst_id , a.GROUP_NUMBER, a.DISK_NUMBER, a.NAME, a.path, a.STATE, a.MOUNT_STATUS, a.TOTAL_MB, a.FREE_MB, a.CREATE_DATE, a.MOUNT_DATE, a.LIBRARY --, --a.OS_MB FROM gV$ASM_DISK a ORDER BY a.con_id,a.inst_id, a.GROUP_NUMBER, a.DISK_NUMBER; prompt
[Back to Contents]

prompt prompt ASMDisk Group Usage


CLEAR COLUMNS COMPUTES SET DEFINE OFF --COMPUTE SUM label 'Total:' OF TOTAL_MB FREE_MB ON report SELECT di.CON_ID, di.inst_id, di.GROUP_NUMBER, di.NAME, di.BLOCK_SIZE, di.STATE, di.TYPE, di.TOTAL_MB, di.FREE_MB, di.COMPATIBILITY, --di.VOTING_FILES, di.OFFLINE_DISKS FROM gv$asm_diskgroup di ORDER BY di.con_id, di.inst_id, di.GROUP_NUMBER; prompt
[Back to Contents]

prompt prompt ASMDisk Group Parameter Config[Next Item]


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM gv$ASM_ATTRIBUTE d WHERE d.NAME NOT LIKE 'template.%' ORDER BY d.con_id,d.inst_id, d.GROUP_NUMBER,d.NAME ; prompt
[Back to Contents]

prompt prompt ASMInstance


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM gv$asm_client; prompt
[Back to Contents]

------------------------------------------------------------------------------------------------------------------------------------------------ host echo " JOBStatus. . ." prompt prompt JOBStatus


prompt

prompt prompt Job Run Status


prompt ● cdb_jobs
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN job_id FORMAT a75 HEADING 'JobID' ENTMAP OFF COLUMN username FORMAT a75 HEADING 'User' ENTMAP OFF COLUMN what FORMAT a100 HEADING 'Job Content' ENTMAP OFF COLUMN next_date FORMAT a140 HEADING '       Next Run Time       ' ENTMAP OFF COLUMN interval FORMAT a100 HEADING '        Interval        ' ENTMAP OFF COLUMN last_date FORMAT a140 HEADING '       Last Run Time       ' ENTMAP OFF COLUMN failures FORMAT a75 HEADING 'Failures' ENTMAP OFF COLUMN broken FORMAT a75 HEADING 'Is Broken?' ENTMAP OFF SET DEFINE ON SELECT d.CON_ID, DECODE(broken, 'Y', '
' || job || '
', '
' || job || '
') job_id, DECODE(broken, 'Y', '' || log_user || '', log_user) username, DECODE(broken, 'Y', '' || what || '', what) what, DECODE(broken, 'Y', '
' || NVL(TO_CHAR(next_date, 'yyyy-mm-dd HH24:MI:SS'), '
') || '
', '
' || NVL(TO_CHAR(next_date, 'yyyy-mm-dd HH24:MI:SS'), '
') || '
') next_date, DECODE(broken, 'Y', '' || interval || '', interval) interval, DECODE(broken, 'Y', '
' || NVL(TO_CHAR(last_date, 'yyyy-mm-dd HH24:MI:SS'), '
') || '
', '
' || NVL(TO_CHAR(last_date, 'yyyy-mm-dd HH24:MI:SS'), '
') || '
') last_date, DECODE(broken, 'Y', '
' || NVL(failures, 0) || '
', '
' || NVL(failures, 0) || '
') failures, DECODE(broken, 'Y', '
' || broken || '
', '
' || broken || '
') broken FROM cdb_jobs d ORDER BY d.CON_ID, d.broken, d.JOB; prompt prompt ● cdb_scheduler_jobs
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN is_running FORMAT a10 HEADING 'is_running' ENTMAP OFF COLUMN REPEAT_INTERVAL FORMAT a140 HEADING '        REPEAT_INTERVAL        ' ENTMAP OFF COLUMN start_date FORMAT a140 HEADING '          START_DATE          ' ENTMAP OFF COLUMN end_date FORMAT a140 HEADING '          END_DATE          ' ENTMAP OFF COLUMN NEXT_RUN_DATE FORMAT a140 HEADING '          NEXT_RUN_DATE          ' ENTMAP OFF COLUMN last_start_date FORMAT a140 HEADING '        LAST_START_DATE        ' ENTMAP OFF COLUMN LAST_RUN_DURATION FORMAT a140 HEADING '       LAST_RUN_DURATION       ' ENTMAP OFF COLUMN comments FORMAT a180 HEADING '            job_comments            ' ENTMAP OFF SET DEFINE ON SELECT j.CON_ID, j.JOB_CREATOR, j.OWNER, j.job_name, j.state job_STATE, DECODE(J.STATE, 'RUNNING', 'Y', 'N') is_running, j.job_type, j.job_action, j.JOB_STYLE, j.PROGRAM_OWNER, j.PROGRAM_NAME, j.schedule_type, j.repeat_interval, TO_CHAR(j.start_date, 'YYYY-MM-DD HH24:mi:ss') start_date, TO_CHAR(j.end_date, 'YYYY-MM-DD HH24:mi:ss') end_date, TO_CHAR(J.NEXT_RUN_DATE, 'YYYY-MM-DD HH24:mi:ss') NEXT_RUN_DATE, TO_CHAR(J.last_start_date, 'YYYY-MM-DD HH24:mi:ss') last_start_date, (J.LAST_RUN_DURATION) LAST_RUN_DURATION, j.run_count, j.NUMBER_OF_ARGUMENTS, j.ENABLED, j.AUTO_DROP, j.max_run_duration, j.max_failures, j.max_runs, j.LOGGING_LEVEL, j.SYSTEM is_systemjob, j.comments, RJ.running_instance, RJ.cpu_used, B.username, B.SID, B.SERIAL#, (SELECT nb.spid FROM gv$process nb WHERE nb.ADDR = b.SADDR and nb.inst_id=b.inst_id and nb.con_id=b.con_id) spid, b.STATUS, B.COMMAND, B.LOGON_TIME, B.OSUSER FROM cdb_scheduler_jobs j LEFT OUTER JOIN cdb_scheduler_running_jobs rj ON (j.JOB_NAME = rj.JOB_NAME and j.CON_ID = rj.CON_ID) LEFT OUTER JOIN gv$session b ON (rj.session_id = b.SID AND rj.RUNNING_INSTANCE = b.INST_ID and j.CON_ID = b.con_id) ORDER BY j.CON_ID, b.INST_ID, j.STATE, j.owner, j.JOB_NAME; prompt
[Back to Contents]
prompt
prompt prompt DatabasejobError Msg [Next Item]
prompt NOTE: Check Last Week,EveryjobGet Latest3Errors CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN LOG_DATE FORMAT a240 HEADING '          LOG_DATE          ' ENTMAP OFF COLUMN detail_ADDITIONAL_INFO FORMAT a200 HEADING '          DETAIL_ADDITIONAL_INFO          ' COLUMN log_ADDITIONAL_INFO FORMAT a200 HEADING '          LOG_ADDITIONAL_INFO          ' ENTMAP OFF COLUMN run_duration FORMAT a200 HEADING '          run_duration          ' COLUMN ACTUAL_START_DATE FORMAT a240 HEADING '          ACTUAL_START_DATE          ' ENTMAP OFF SET DEFINE ON SELECT * FROM (SELECT n.CON_ID, n.OWNER, n.log_id, n.job_name, n.job_class, TO_CHAR(n.log_date, 'YYYY-MM-DD HH24:mi:ss') LOG_DATE, n.OPERATION, n.status, jrd.error#, jrd.run_duration, TO_CHAR(jrd.ACTUAL_START_DATE, 'YYYY-MM-DD HH24:mi:ss') ACTUAL_START_DATE, jrd.INSTANCE_ID, jrd.SESSION_ID, jrd.SLAVE_PID, n.additional_info log_ADDITIONAL_INFO, jrd.ADDITIONAL_INFO detail_ADDITIONAL_INFO, DENSE_RANK() over(partition by n.OWNER, n.JOB_NAME ORDER BY n.LOG_ID desc) rank_order FROM cdb_scheduler_job_log N, cdb_scheduler_job_run_details jrd WHERE n.log_id = jrd.log_id(+) and n.CON_ID = jrd.CON_ID(+) AND n.STATUS <> 'SUCCEEDED' and n.job_name not like 'ORA$AT_OS_OPT_SY%' AND n.log_date >= sysdate - 7 ORDER BY n.log_date DESC) WHERE rank_order <= 3; prompt
[Back to Contents]
-- +====================================================================================================================+ -- | -- | <<<<< Database Health Check Details >>>>> | -- | | -- +====================================================================================================================+ host echo start...Database Health Check Details. . prompt

prompt prompt

Database Health Check Details
prompt

-- +============================================================================+ -- | | -- | <<<<< BACKUPS >>>>> | -- | | -- +============================================================================+ host echo " RMANInfo. . ." prompt prompt RMANInfo


prompt

prompt prompt RMANBackup Status


prompt ● Last 20 RMAN backup jobs CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN backup_name FORMAT a130 HEADING 'Backup Name' ENTMAP OFF COLUMN START_TIME FORMAT a75 HEADING 'Start Time' ENTMAP OFF COLUMN elapsed_time FORMAT a75 HEADING 'Elapsed Time' ENTMAP OFF COLUMN status HEADING 'Status' ENTMAP OFF COLUMN input_type HEADING 'Input Type' ENTMAP OFF COLUMN output_device_type HEADING 'Output Device' ENTMAP OFF COLUMN input_size HEADING 'Input Size' ENTMAP OFF COLUMN output_size HEADING 'Output Size' ENTMAP OFF COLUMN INPUT_BYTES_PER_SEC HEADING 'Write/secIO' ENTMAP OFF COLUMN output_rate_per_sec HEADING 'Read/secIO' ENTMAP OFF SELECT '
' || r.command_id || '
' backup_name, '
' || TO_CHAR(r.START_TIME, 'yyyy-mm-dd HH24:MI:SS') || '
' START_TIME, '
' || r.time_taken_display || '
' elapsed_time, ELAPSED_SECONDS, DECODE(r.status, 'COMPLETED', '
' || r.status || '
', 'RUNNING', '
' || r.status || '
', 'FAILED', '
' || r.status || '
', '
' || r.status || '
') status, r.input_type input_type, r.output_device_type output_device_type, '
' || r.input_bytes_display || '
' input_size, '
' || r.output_bytes_display || '
' output_size, '
' || r.INPUT_BYTES_PER_SEC_DISPLAY || '
' INPUT_BYTES_PER_SEC, '
' || r.output_bytes_per_sec_display || '
' output_rate_per_sec FROM (SELECT command_id, START_TIME, time_taken_display, ELAPSED_SECONDS, status, input_type, output_device_type, input_bytes_display, INPUT_BYTES_PER_SEC_DISPLAY, output_bytes_display, output_bytes_per_sec_display FROM v$rman_backup_job_details a ORDER BY START_TIME DESC) r WHERE ROWNUM <= 20; prompt ● RMANBackup Efficiency prompt ● Observe type Col Is 'aggregate' Of EPS Col Value,If EPS column value is far less than backup hardware IO rate,Should look for issues in backup processes CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT device_type device, TYPE, filename, to_char(open_time, 'yyyy-mm-dd hh24:mi:ss') open_time, to_char(close_time, 'yyyy-mm-dd hh24:mi:ss') close_time, elapsed_time elapse, round(effective_bytes_per_second / 1024 / 1024, 2) EPS_M FROM v$backup_async_io a where a.TYPE = 'AGGREGATE' and a.OPEN_TIME between sysdate - 1 and sysdate and a.EFFECTIVE_BYTES_PER_SECOND IS NOT NULL order by a.OPEN_TIME desc, a.SID, a.SERIAL; prompt
[Back to Contents]
-- +----------------------------------------------------------------------------+ -- | - RMAN CONFIGURATION - | -- +----------------------------------------------------------------------------+ prompt prompt RMAN Config
prompt ● All non-default RMAN configuration settings CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN name FORMAT a130 HEADING 'Name' ENTMAP OFF COLUMN value HEADING 'Value' ENTMAP OFF SELECT '
' || name || '
' name, value FROM v$rman_configuration ORDER BY name; prompt
[Back to Contents]

prompt prompt RMANAll Backups[Next Item]


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN BACKUP_TYPE FORMAT a80 HEADING '     BACKUP_TYPE     ' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN END_TIME FORMAT a140 HEADING '          END_TIME          ' ENTMAP OFF COLUMN KEEP_UNTIL FORMAT a140 HEADING '        KEEP_UNTIL        ' ENTMAP OFF COLUMN INCREMENTAL_LEVEL HEADING 'INCREMENTAL|LEVEL' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON SELECT BS_key, BP_key, BACKUP_TYPE, INCREMENTAL_LEVEL, START_TIME START_TIME, END_TIME, ELAPSED_TIME, piece_name, bs_size, DEVICE_TYPE, TAG, CONTROLFILE_INCLUDED, bs_status, bs_compressed, KEEP, KEEP_UNTIL, KEEP_OPTIONS, sum(case WHEN datafileNAME IS NOT NULL then 1 else 0 end) datafiles, sum(case WHEN SEQUENCE# IS NOT NULL then 1 else 0 end) archivelog, sum(case WHEN DB_UNIQUE_NAME IS NOT NULL then 1 else 0 end) spfile, sum(case WHEN cf_CHECKPOINT_CHANGE# IS NOT NULL then 1 else 0 end) controlfile FROM (SELECT a.RECID BS_key, c.RECID BP_key, case WHEN a.backup_type = 'L' then '
Archived Redo Logs
' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then '
Datafile Full Backup
' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then '
Incremental Backup
' end backup_type, case WHEN a.backup_type = 'L' then 'Archived Redo Logs' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then 'Datafile Full Backup' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then 'Incremental Backup' end backup_type1, a.INCREMENTAL_LEVEL, round(aa.bs_bytes/1024/1024, 2) bs_size, TO_CHAR(a.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME, TO_CHAR(a.COMPLETION_TIME, 'YYYY-MM-DD HH24:MI:SS') END_TIME, (round(a.ELAPSED_SECONDS)) ELAPSED_TIME, c.HANDLE piece_name, c.DEVICE_TYPE, c.TAG, aa.bs_status, aa.bs_compressed, a.CONTROLFILE_INCLUDED, a.KEEP, a.KEEP_UNTIL, a.KEEP_OPTIONS, ------ data file -------- b.FILE#, b.INCREMENTAL_LEVEL df_INCREMENTAL_LEVEL, (SELECT nb.NAME FROM v$datafile nb WHERE nb.FILE# = b.FILE#) datafileNAME, b.USED_CHANGE_TRACKING, b.CHECKPOINT_CHANGE#||'' df_CHECKPOINT_CHANGE#, b.CHECKPOINT_TIME df_CHECKPOINT_TIME, ------ archive log file -------- d.THREAD#, d.SEQUENCE#, d.RESETLOGS_CHANGE#, d.FIRST_CHANGE#, d.FIRST_TIME, d.NEXT_CHANGE#, d.NEXT_TIME, ------ spfile -------- e.MODIFICATION_TIME, e.DB_UNIQUE_NAME, ------ control file -------- f.CREATION_TIME, f.CHECKPOINT_CHANGE#||'' cf_CHECKPOINT_CHANGE#, f.CHECKPOINT_TIME cf_CHECKPOINT_TIME, f.FILESIZE_DISPLAY FROM v$backup_set a LEFT OUTER JOIN v$backup_files aa on (aa.bs_key = a.RECID AND aa.file_type = 'PIECE') LEFT OUTER JOIN v$backup_datafile b ON (a.SET_STAMP = b.SET_STAMP AND a.SET_COUNT = b.SET_COUNT) LEFT OUTER JOIN v$backup_piece c ON (a.SET_STAMP = c.SET_STAMP AND a.SET_COUNT = c.SET_COUNT) LEFT OUTER JOIN V$backup_Archivelog_Details D ON (d.BTYPE_KEY = a.RECID) LEFT OUTER JOIN v$backup_spfile e ON (a.SET_STAMP = e.SET_STAMP AND a.SET_COUNT = e.SET_COUNT) LEFT OUTER JOIN v$backup_controlfile_details f ON (f.BTYPE_KEY = a.RECID) WHERE a.START_TIME>=SYSDATE - 15 ORDER BY a.RECID, a.RECID, b.FILE#, d.THREAD#, d.SEQUENCE#) v GROUP BY BS_key, BP_key, BACKUP_TYPE, INCREMENTAL_LEVEL, START_TIME, END_TIME, ELAPSED_TIME, piece_name, bs_size, DEVICE_TYPE, TAG, CONTROLFILE_INCLUDED, bs_status, bs_compressed, KEEP, KEEP_UNTIL, KEEP_OPTIONS ORDER BY BS_key, BP_key; prompt
[Back to Contents]

prompt prompt RMANAll Backup Details[Next Item]


prompt NOTE: Exclude Archive Info CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN BACKUP_TYPE FORMAT a80 HEADING '     BACKUP_TYPE     ' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN END_TIME FORMAT a140 HEADING '          END_TIME          ' ENTMAP OFF COLUMN INCREMENTAL_LEVEL HEADING 'INCREMENTAL|LEVEL' ENTMAP OFF COLUMN FIRST_TIME FORMAT a240 HEADING '          FIRST_TIME          ' ENTMAP OFF COLUMN NEXT_TIME FORMAT a240 HEADING '          NEXT_TIME          ' ENTMAP OFF COLUMN CREATION_TIME FORMAT a140 HEADING '        CREATION_TIME        ' ENTMAP OFF COLUMN df_CHECKPOINT_CHANGE# FORMAT a50 HEADING 'DF_CHECKPOINT_CHANGE#' ENTMAP OFF COLUMN KEEP_UNTIL FORMAT a140 HEADING '        KEEP_UNTIL        ' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON SELECT DISTINCT * FROM (SELECT BS_KEY, BP_KEY, BACKUP_TYPE, INCREMENTAL_LEVEL, BS_SIZE, START_TIME, END_TIME, ELAPSED_TIME, PIECE_NAME, DEVICE_TYPE, TAG, BS_STATUS, BS_COMPRESSED, CONTROLFILE_INCLUDED, KEEP, KEEP_UNTIL, KEEP_OPTIONS, FILE#, DF_INCREMENTAL_LEVEL, DATAFILENAME, USED_CHANGE_TRACKING, DF_CHECKPOINT_CHANGE#, DF_CHECKPOINT_TIME, THREAD#, SEQUENCE#, RESETLOGS_CHANGE#, FIRST_CHANGE#, FIRST_TIME, NEXT_CHANGE#, NEXT_TIME, MODIFICATION_TIME, DB_UNIQUE_NAME, CREATION_TIME, CF_CHECKPOINT_CHANGE#, CF_CHECKPOINT_TIME, FILESIZE_DISPLAY, DENSE_RANK() OVER(PARTITION BY BACKUP_TYPE ORDER BY START_TIME DESC) RANK_ORDER FROM (SELECT a.RECID BS_key, c.RECID BP_key, case WHEN a.backup_type = 'L' then '
Archived Redo Logs
' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then '
Datafile Full Backup
' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then '
Incremental Backup
' end backup_type, case WHEN a.backup_type = 'L' then 'Archived Redo Logs' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then 'Datafile Full Backup' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then 'Incremental Backup' end backup_type1, a.INCREMENTAL_LEVEL, round(aa.bs_bytes/1024/1024, 2) bs_size, TO_CHAR(a.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME, TO_CHAR(a.COMPLETION_TIME, 'YYYY-MM-DD HH24:MI:SS') END_TIME, (round(a.ELAPSED_SECONDS)) ELAPSED_TIME, c.HANDLE piece_name, c.DEVICE_TYPE, c.TAG, aa.bs_status, aa.bs_compressed, a.CONTROLFILE_INCLUDED, a.KEEP, a.KEEP_UNTIL, a.KEEP_OPTIONS, ------ data file -------- b.FILE#, b.INCREMENTAL_LEVEL df_INCREMENTAL_LEVEL, (SELECT nb.NAME FROM v$datafile nb WHERE nb.FILE# = b.FILE#) datafileNAME, b.USED_CHANGE_TRACKING, b.CHECKPOINT_CHANGE#||'' df_CHECKPOINT_CHANGE#, b.CHECKPOINT_TIME df_CHECKPOINT_TIME, ------ archive log file -------- d.THREAD#, d.SEQUENCE#, d.RESETLOGS_CHANGE#, d.FIRST_CHANGE#, d.FIRST_TIME, d.NEXT_CHANGE#, d.NEXT_TIME, ------ spfile -------- e.MODIFICATION_TIME, e.DB_UNIQUE_NAME, ------ control file -------- f.CREATION_TIME, f.CHECKPOINT_CHANGE#||'' cf_CHECKPOINT_CHANGE#, f.CHECKPOINT_TIME cf_CHECKPOINT_TIME, f.FILESIZE_DISPLAY FROM v$backup_set a LEFT OUTER JOIN v$backup_files aa on (aa.bs_key = a.RECID AND aa.file_type = 'PIECE') LEFT OUTER JOIN v$backup_datafile b ON (a.SET_STAMP = b.SET_STAMP AND a.SET_COUNT = b.SET_COUNT) LEFT OUTER JOIN v$backup_piece c ON (a.SET_STAMP = c.SET_STAMP AND a.SET_COUNT = c.SET_COUNT) LEFT OUTER JOIN V$backup_Archivelog_Details D ON (d.BTYPE_KEY = a.RECID) LEFT OUTER JOIN v$backup_spfile e ON (a.SET_STAMP = e.SET_STAMP AND a.SET_COUNT = e.SET_COUNT) LEFT OUTER JOIN v$backup_controlfile_details f ON (f.BTYPE_KEY = a.RECID) WHERE a.START_TIME>=SYSDATE - 15 AND A.BACKUP_TYPE<>'L' ORDER BY a.RECID, a.RECID, b.FILE#, d.THREAD#, d.SEQUENCE#)) A WHERE A.RANK_ORDER <= 10 ORDER BY A.BS_KEY, A.BP_KEY, A.FILE#, A.THREAD#, A.SEQUENCE#; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - RMAN BACKUP SETS - | -- +----------------------------------------------------------------------------+ prompt prompt RMANBackup Set


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP OFF COLUMN BACKUP_TYPE FORMAT a80 HEADING '     BACKUP_TYPE     ' ENTMAP OFF COLUMN device_type HEADING 'Device Type' ENTMAP OFF COLUMN controlfile_included FORMAT a30 HEADING 'Controlfile Included?' ENTMAP OFF COLUMN spfile_included FORMAT a30 HEADING 'SPFILE Included?' ENTMAP OFF COLUMN incremental_level HEADING 'Incremental Level' ENTMAP OFF COLUMN pieces FORMAT 999,999,999,999 HEADING '# of Pieces' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN completion_time FORMAT a180 HEADING '          END_TIME          ' ENTMAP OFF COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP OFF COLUMN tag HEADING 'Tag' ENTMAP OFF COLUMN block_size FORMAT 999,999,999,999,999 HEADING 'Block Size' ENTMAP OFF COLUMN keep FORMAT a40 HEADING 'Keep?' ENTMAP OFF COLUMN keep_options FORMAT a15 HEADING 'Keep Options' ENTMAP OFF COLUMN KEEP_UNTIL FORMAT a140 HEADING '        KEEP_UNTIL        ' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON -- BREAK ON report COMPUTE sum LABEL 'Total:' OF pieces elapsed_seconds ON report SELECT '
' || BS.RECID || '
' BS_KEY, DECODE(BACKUP_TYPE, 'L', '
Archived Redo Logs
', 'D', '
Datafile Full Backup
', 'I', '
Incremental Backup
') BACKUP_TYPE, '
' || DEVICE_TYPE || '
' DEVICE_TYPE, '
' || DECODE(BS.CONTROLFILE_INCLUDED, 'NO', '-', BS.CONTROLFILE_INCLUDED) || '
' CONTROLFILE_INCLUDED, '
' || NVL(SP.SPFILE_INCLUDED, '-') || '
' SPFILE_INCLUDED, BS.INCREMENTAL_LEVEL INCREMENTAL_LEVEL, BS.PIECES PIECES, '
' || TO_CHAR(BS.START_TIME, 'yyyy-mm-dd HH24:MI:SS') || '
' START_TIME, '
' || TO_CHAR(BS.COMPLETION_TIME, 'yyyy-mm-dd HH24:MI:SS') || '
' COMPLETION_TIME, BS.ELAPSED_SECONDS ELAPSED_SECONDS, BP.TAG TAG, BS.BLOCK_SIZE BLOCK_SIZE, '
' || BS.KEEP || '
' KEEP, '
' || NVL(TO_CHAR(BS.KEEP_UNTIL, 'yyyy-mm-dd HH24:MI:SS'), '
') || '
' KEEP_UNTIL, BS.KEEP_OPTIONS KEEP_OPTIONS FROM V$BACKUP_SET BS, (SELECT DISTINCT SET_STAMP, SET_COUNT, TAG, DEVICE_TYPE FROM V$BACKUP_PIECE WHERE STATUS IN ('A', 'X')) BP, (SELECT DISTINCT SET_STAMP, SET_COUNT, 'YES' SPFILE_INCLUDED FROM V$BACKUP_SPFILE) SP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT = BP.SET_COUNT AND BS.SET_STAMP = SP.SET_STAMP(+) AND BS.SET_COUNT = SP.SET_COUNT(+) AND BS.START_TIME >= SYSDATE - 15 ORDER BY BS.RECID; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - RMAN BACKUP PIECES - | -- +----------------------------------------------------------------------------+ prompt prompt RMANBackup Piece


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP OFF COLUMN piece# HEADING 'Piece #' ENTMAP OFF COLUMN copy# HEADING 'Copy #' ENTMAP OFF COLUMN bp_key HEADING 'BP Key' ENTMAP OFF COLUMN status HEADING 'Status' ENTMAP OFF COLUMN handle HEADING 'Handle' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN completion_time FORMAT a75 HEADING 'End Time' ENTMAP OFF COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP OFF COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON ---- BREAK ON bs_key SELECT '
' || BS.RECID || '
' BS_KEY, BP.PIECE# PIECE#, BP.COPY# COPY#, BP.RECID BP_KEY, DECODE(STATUS, 'A', '
Available
', 'D', '
Deleted
', 'X', '
Expired
') STATUS, HANDLE HANDLE, '
' || TO_CHAR(BP.START_TIME, 'yyyy-mm-dd HH24:MI:SS') || '
' START_TIME, '
' || TO_CHAR(BP.COMPLETION_TIME, 'yyyy-mm-dd HH24:MI:SS') || '
' COMPLETION_TIME, BP.ELAPSED_SECONDS ELAPSED_SECONDS FROM V$BACKUP_SET BS, V$BACKUP_PIECE BP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT = BP.SET_COUNT AND BP.STATUS IN ('A', 'X') AND BP.START_TIME>= SYSDATE - 15 ORDER BY BS.RECID, PIECE#; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - RMAN BACKUP CONTROL FILES - | -- +----------------------------------------------------------------------------+ prompt prompt RMAN Control File Backup


prompt ● Available automatic control files within all available (and expired) backup sets CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP OFF COLUMN piece# HEADING 'Piece #' ENTMAP OFF COLUMN copy# HEADING 'Copy #' ENTMAP OFF COLUMN bp_key HEADING 'BP Key' ENTMAP OFF COLUMN controlfile_included FORMAT a75 HEADING 'Controlfile Included?' ENTMAP OFF COLUMN status HEADING 'Status' ENTMAP OFF COLUMN handle HEADING 'Handle' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP OFF COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP OFF COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP OFF COLUMN KEEP_UNTIL FORMAT a140 HEADING '        KEEP_UNTIL        ' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON ---- BREAK ON bs_key SELECT '
' || BS.RECID || '
' BS_KEY, BP.PIECE# PIECE#, BP.COPY# COPY#, BP.RECID BP_KEY, '
' || DECODE(BS.CONTROLFILE_INCLUDED, 'NO', '-', BS.CONTROLFILE_INCLUDED) || '
' CONTROLFILE_INCLUDED, DECODE(STATUS, 'A', '
Available
', 'D', '
Deleted
', 'X', '
Expired
') STATUS, HANDLE HANDLE FROM V$BACKUP_SET BS, V$BACKUP_PIECE BP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT = BP.SET_COUNT AND BP.STATUS IN ('A', 'X') AND BS.CONTROLFILE_INCLUDED != 'NO' AND BP.START_TIME >= SYSDATE - 15 ORDER BY BS.RECID, PIECE#; prompt CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN BACKUP_TYPE FORMAT a80 HEADING '     BACKUP_TYPE     ' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN END_TIME FORMAT a140 HEADING '          END_TIME          ' ENTMAP OFF COLUMN INCREMENTAL_LEVEL HEADING 'INCREMENTAL|LEVEL' ENTMAP OFF COLUMN FIRST_TIME FORMAT a140 HEADING '        FIRST_TIME        ' ENTMAP OFF COLUMN NEXT_TIME FORMAT a140 HEADING '        NEXT_TIME        ' ENTMAP OFF COLUMN CREATION_TIME FORMAT a140 HEADING '        CREATION_TIME        ' ENTMAP OFF COLUMN KEEP_UNTIL FORMAT a140 HEADING '        KEEP_UNTIL        ' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON SELECT A.BS_KEY, A.BP_KEY, A.BACKUP_TYPE, A.INCREMENTAL_LEVEL, A.BS_SIZE, A.START_TIME, A.END_TIME, A.ELAPSED_TIME, A.PIECE_NAME, A.DEVICE_TYPE, A.TAG, A.BS_STATUS, A.BS_COMPRESSED, A.CONTROLFILE_INCLUDED, A.KEEP, A.KEEP_UNTIL, A.KEEP_OPTIONS, A.MODIFICATION_TIME, A.DB_UNIQUE_NAME, A.CREATION_TIME, A.CF_CHECKPOINT_CHANGE#, A.CF_CHECKPOINT_TIME, A.FILESIZE_DISPLAY FROM (SELECT a.RECID BS_key, c.RECID BP_key, case WHEN a.backup_type = 'L' then '
Archived Redo Logs
' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then '
Datafile Full Backup
' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then '
Incremental Backup
' end backup_type, case WHEN a.backup_type = 'L' then 'Archived Redo Logs' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then 'Datafile Full Backup' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then 'Incremental Backup' end backup_type1, a.INCREMENTAL_LEVEL, round(aa.bs_bytes/1024/1024, 2) bs_size, TO_CHAR(a.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME, TO_CHAR(a.COMPLETION_TIME, 'YYYY-MM-DD HH24:MI:SS') END_TIME, (round(a.ELAPSED_SECONDS)) ELAPSED_TIME, c.HANDLE piece_name, c.DEVICE_TYPE, c.TAG, aa.bs_status, aa.bs_compressed, a.CONTROLFILE_INCLUDED, a.KEEP, a.KEEP_UNTIL, a.KEEP_OPTIONS, ------ data file -------- b.FILE#, b.INCREMENTAL_LEVEL df_INCREMENTAL_LEVEL, (SELECT nb.NAME FROM v$datafile nb WHERE nb.FILE# = b.FILE#) datafileNAME, b.USED_CHANGE_TRACKING, b.CHECKPOINT_CHANGE#||'' df_CHECKPOINT_CHANGE#, b.CHECKPOINT_TIME df_CHECKPOINT_TIME, ------ archive log file -------- d.THREAD#, d.SEQUENCE#, d.RESETLOGS_CHANGE#, d.FIRST_CHANGE#, d.FIRST_TIME, d.NEXT_CHANGE#, d.NEXT_TIME, ------ spfile -------- e.MODIFICATION_TIME, e.DB_UNIQUE_NAME, ------ control file -------- f.CREATION_TIME, f.CHECKPOINT_CHANGE#||'' cf_CHECKPOINT_CHANGE#, f.CHECKPOINT_TIME cf_CHECKPOINT_TIME, f.FILESIZE_DISPLAY FROM v$backup_set a LEFT OUTER JOIN v$backup_files aa on (aa.bs_key = a.RECID AND aa.file_type = 'PIECE') LEFT OUTER JOIN v$backup_datafile b ON (a.SET_STAMP = b.SET_STAMP AND a.SET_COUNT = b.SET_COUNT) LEFT OUTER JOIN v$backup_piece c ON (a.SET_STAMP = c.SET_STAMP AND a.SET_COUNT = c.SET_COUNT) LEFT OUTER JOIN V$backup_Archivelog_Details D ON (d.BTYPE_KEY = a.RECID) LEFT OUTER JOIN v$backup_spfile e ON (a.SET_STAMP = e.SET_STAMP AND a.SET_COUNT = e.SET_COUNT) LEFT OUTER JOIN v$backup_controlfile_details f ON (f.BTYPE_KEY = a.RECID) WHERE a.START_TIME>=SYSDATE - 15 ORDER BY a.RECID, a.RECID, b.FILE#, d.THREAD#, d.SEQUENCE#) A WHERE A.CF_CHECKPOINT_CHANGE# IS NOT NULL ORDER BY A.BS_KEY, A.BP_KEY, A.FILE#, A.THREAD#, A.SEQUENCE#; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - RMAN BACKUP SPFILE - | -- +----------------------------------------------------------------------------+ prompt prompt RMAN SPFILEBackup


prompt ● Available automatic SPFILE backups within all available (and expired) backup sets CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP OFF COLUMN piece# HEADING 'Piece #' ENTMAP OFF COLUMN copy# HEADING 'Copy #' ENTMAP OFF COLUMN bp_key HEADING 'BP Key' ENTMAP OFF COLUMN spfile_included FORMAT a75 HEADING 'SPFILE Included?' ENTMAP OFF COLUMN status HEADING 'Status' ENTMAP OFF COLUMN handle HEADING 'Handle' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP OFF COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP OFF COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON -- BREAK ON bs_key SELECT '
' || BS.RECID || '
' BS_KEY, BP.PIECE# PIECE#, BP.COPY# COPY#, BP.RECID BP_KEY, '
' || NVL(SP.SPFILE_INCLUDED, '-') || '
' SPFILE_INCLUDED, DECODE(STATUS, 'A', '
Available
', 'D', '
Deleted
', 'X', '
Expired
') STATUS, HANDLE HANDLE FROM V$BACKUP_SET BS, V$BACKUP_PIECE BP, (SELECT DISTINCT SET_STAMP, SET_COUNT, 'YES' SPFILE_INCLUDED FROM V$BACKUP_SPFILE) SP WHERE BS.SET_STAMP = BP.SET_STAMP AND BS.SET_COUNT = BP.SET_COUNT AND BP.STATUS IN ('A', 'X') AND BS.SET_STAMP = SP.SET_STAMP AND BS.SET_COUNT = SP.SET_COUNT AND BS.START_TIME >= SYSDATE - 15 ORDER BY BS.RECID, PIECE#; prompt CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN BACKUP_TYPE FORMAT a80 HEADING '     BACKUP_TYPE     ' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN END_TIME FORMAT a140 HEADING '          END_TIME          ' ENTMAP OFF COLUMN INCREMENTAL_LEVEL HEADING 'INCREMENTAL|LEVEL' ENTMAP OFF COLUMN FIRST_TIME FORMAT a140 HEADING '        FIRST_TIME        ' ENTMAP OFF COLUMN NEXT_TIME FORMAT a140 HEADING '        NEXT_TIME        ' ENTMAP OFF COLUMN CREATION_TIME FORMAT a140 HEADING '        CREATION_TIME        ' ENTMAP OFF COLUMN piece_name FORMAT a100 HEADING 'PIECE_NAME' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON SELECT A.BS_KEY, A.BP_KEY, A.BACKUP_TYPE, A.INCREMENTAL_LEVEL, A.BS_SIZE, A.START_TIME, A.END_TIME, A.ELAPSED_TIME, A.PIECE_NAME, A.DEVICE_TYPE, A.TAG, A.BS_STATUS, A.BS_COMPRESSED, A.CONTROLFILE_INCLUDED, A.KEEP, A.KEEP_UNTIL, A.KEEP_OPTIONS, A.MODIFICATION_TIME, A.DB_UNIQUE_NAME, A.CREATION_TIME, A.CF_CHECKPOINT_CHANGE#, A.CF_CHECKPOINT_TIME, A.FILESIZE_DISPLAY FROM (SELECT a.RECID BS_key, c.RECID BP_key, case WHEN a.backup_type = 'L' then '
Archived Redo Logs
' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then '
Datafile Full Backup
' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then '
Incremental Backup
' end backup_type, case WHEN a.backup_type = 'L' then 'Archived Redo Logs' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then 'Datafile Full Backup' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then 'Incremental Backup' end backup_type1, a.INCREMENTAL_LEVEL, round(aa.bs_bytes/1024/1024, 2) bs_size, TO_CHAR(a.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME, TO_CHAR(a.COMPLETION_TIME, 'YYYY-MM-DD HH24:MI:SS') END_TIME, (round(a.ELAPSED_SECONDS)) ELAPSED_TIME, c.HANDLE piece_name, c.DEVICE_TYPE, c.TAG, aa.bs_status, aa.bs_compressed, a.CONTROLFILE_INCLUDED, a.KEEP, a.KEEP_UNTIL, a.KEEP_OPTIONS, ------ data file -------- b.FILE#, b.INCREMENTAL_LEVEL df_INCREMENTAL_LEVEL, (SELECT nb.NAME FROM v$datafile nb WHERE nb.FILE# = b.FILE#) datafileNAME, b.USED_CHANGE_TRACKING, b.CHECKPOINT_CHANGE#||'' df_CHECKPOINT_CHANGE#, b.CHECKPOINT_TIME df_CHECKPOINT_TIME, ------ archive log file -------- d.THREAD#, d.SEQUENCE#, d.RESETLOGS_CHANGE#, d.FIRST_CHANGE#, d.FIRST_TIME, d.NEXT_CHANGE#, d.NEXT_TIME, ------ spfile -------- e.MODIFICATION_TIME, e.DB_UNIQUE_NAME, ------ control file -------- f.CREATION_TIME, f.CHECKPOINT_CHANGE#||'' cf_CHECKPOINT_CHANGE#, f.CHECKPOINT_TIME cf_CHECKPOINT_TIME, f.FILESIZE_DISPLAY FROM v$backup_set a LEFT OUTER JOIN v$backup_files aa on (aa.bs_key = a.RECID AND aa.file_type = 'PIECE') LEFT OUTER JOIN v$backup_datafile b ON (a.SET_STAMP = b.SET_STAMP AND a.SET_COUNT = b.SET_COUNT) LEFT OUTER JOIN v$backup_piece c ON (a.SET_STAMP = c.SET_STAMP AND a.SET_COUNT = c.SET_COUNT) LEFT OUTER JOIN V$backup_Archivelog_Details D ON (d.BTYPE_KEY = a.RECID) LEFT OUTER JOIN v$backup_spfile e ON (a.SET_STAMP = e.SET_STAMP AND a.SET_COUNT = e.SET_COUNT) LEFT OUTER JOIN v$backup_controlfile_details f ON (f.BTYPE_KEY = a.RECID) WHERE a.START_TIME>=SYSDATE - 15 ORDER BY a.RECID, a.RECID, b.FILE#, d.THREAD#, d.SEQUENCE#) A WHERE A.DB_UNIQUE_NAME IS NOT NULL ORDER BY A.BS_KEY, A.BP_KEY, A.FILE#, A.THREAD#, A.SEQUENCE#; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - RMAN BACKUP Archived Redo Logs - | -- +----------------------------------------------------------------------------+ prompt prompt RMAN Archive File Backup[Next Item]


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN BACKUP_TYPE FORMAT a80 HEADING '     BACKUP_TYPE     ' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN END_TIME FORMAT a140 HEADING '          END_TIME          ' ENTMAP OFF COLUMN INCREMENTAL_LEVEL HEADING 'INCREMENTAL|LEVEL' ENTMAP OFF COLUMN FIRST_TIME FORMAT a140 HEADING '          FIRST_TIME          ' ENTMAP OFF COLUMN NEXT_TIME FORMAT a140 HEADING '          NEXT_TIME          ' ENTMAP OFF COLUMN CREATION_TIME FORMAT a140 HEADING '        CREATION_TIME        ' ENTMAP OFF COLUMN DF_CHECKPOINT_TIME FORMAT a140 HEADING '        DF_CHECKPOINT_TIME        ' ENTMAP OFF COLUMN MODIFICATION_TIME FORMAT a140 HEADING '        MODIFICATION_TIME        ' ENTMAP OFF COLUMN cf_CHECKPOINT_TIME FORMAT a140 HEADING '        cf_CHECKPOINT_TIME        ' ENTMAP OFF SET DEFINE ON SELECT A.BS_KEY, A.BP_KEY, A.BACKUP_TYPE, A.INCREMENTAL_LEVEL, A.BS_SIZE, A.START_TIME, A.END_TIME, A.ELAPSED_TIME, A.PIECE_NAME, A.DEVICE_TYPE, A.TAG, A.BS_STATUS, A.BS_COMPRESSED, A.CONTROLFILE_INCLUDED, A.KEEP, A.THREAD#, A.SEQUENCE#, A.RESETLOGS_CHANGE#, A.FIRST_CHANGE#, A.FIRST_TIME, A.NEXT_CHANGE#, A.NEXT_TIME FROM (SELECT a.RECID BS_key, c.RECID BP_key, case WHEN a.backup_type = 'L' then '
Archived Redo Logs
' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then '
Datafile Full Backup
' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then '
Incremental Backup
' end backup_type, case WHEN a.backup_type = 'L' then 'Archived Redo Logs' WHEN a.backup_type = 'D' AND a.INCREMENTAL_LEVEL is null then 'Datafile Full Backup' WHEN a.backup_type = 'I' or a.INCREMENTAL_LEVEL IS NOT NULL then 'Incremental Backup' end backup_type1, a.INCREMENTAL_LEVEL, round(aa.bs_bytes/1024/1024, 2) bs_size, TO_CHAR(a.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME, TO_CHAR(a.COMPLETION_TIME, 'YYYY-MM-DD HH24:MI:SS') END_TIME, (round(a.ELAPSED_SECONDS)) ELAPSED_TIME, c.HANDLE piece_name, c.DEVICE_TYPE, c.TAG, aa.bs_status, aa.bs_compressed, a.CONTROLFILE_INCLUDED, a.KEEP, a.KEEP_UNTIL, a.KEEP_OPTIONS, ------ data file -------- b.FILE#, b.INCREMENTAL_LEVEL df_INCREMENTAL_LEVEL, (SELECT nb.NAME FROM v$datafile nb WHERE nb.FILE# = b.FILE#) datafileNAME, b.USED_CHANGE_TRACKING, b.CHECKPOINT_CHANGE#||'' df_CHECKPOINT_CHANGE#, b.CHECKPOINT_TIME df_CHECKPOINT_TIME, ------ archive log file -------- d.THREAD#, d.SEQUENCE#, d.RESETLOGS_CHANGE#, d.FIRST_CHANGE#, d.FIRST_TIME, d.NEXT_CHANGE#, d.NEXT_TIME, ------ spfile -------- e.MODIFICATION_TIME, e.DB_UNIQUE_NAME, ------ control file -------- f.CREATION_TIME, f.CHECKPOINT_CHANGE#||'' cf_CHECKPOINT_CHANGE#, f.CHECKPOINT_TIME cf_CHECKPOINT_TIME, f.FILESIZE_DISPLAY FROM v$backup_set a LEFT OUTER JOIN v$backup_files aa on (aa.bs_key = a.RECID AND aa.file_type = 'PIECE') LEFT OUTER JOIN v$backup_datafile b ON (a.SET_STAMP = b.SET_STAMP AND a.SET_COUNT = b.SET_COUNT) LEFT OUTER JOIN v$backup_piece c ON (a.SET_STAMP = c.SET_STAMP AND a.SET_COUNT = c.SET_COUNT) LEFT OUTER JOIN V$backup_Archivelog_Details D ON (d.BTYPE_KEY = a.RECID) LEFT OUTER JOIN v$backup_spfile e ON (a.SET_STAMP = e.SET_STAMP AND a.SET_COUNT = e.SET_COUNT) LEFT OUTER JOIN v$backup_controlfile_details f ON (f.BTYPE_KEY = a.RECID) WHERE a.START_TIME>=SYSDATE - 15 ORDER BY a.RECID, a.RECID, b.FILE#, d.THREAD#, d.SEQUENCE#) A WHERE A.BACKUP_TYPE1 = 'Archived Redo Logs' ORDER BY A.BS_KEY, A.BP_KEY, A.FILE#, A.THREAD#, A.SEQUENCE#; prompt
[Back to Contents]

-- +============================================================================+ -- | | -- | <<<<< FLASHBACK TECHNOLOGIES >>>>> | -- | | -- +============================================================================+ prompt prompt

Flashback Technologies(Database Flashback)
-- +----------------------------------------------------------------------------+ -- | - FLASHBACK DATABASE PARAMETERS - | -- +----------------------------------------------------------------------------+ prompt prompt ● Flashback Database Parameters
prompt NOTE: db_flashback_retention_target is specified in minutes; db_recovery_file_dest_size is specified in bytes CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a95 HEADING 'Instance_Name' ENTMAP OFF COLUMN thread_number_print FORMAT a95 HEADING 'Thread Number' ENTMAP OFF COLUMN name FORMAT a125 HEADING 'Name' ENTMAP OFF COLUMN value HEADING 'Value' ENTMAP OFF SET DEFINE ON -- BREAK ON report ON instance_name_print ON thread_number_print SELECT '
' || I.INSTANCE_NAME || '
' INSTANCE_NAME_PRINT, '
' || I.THREAD# || '
' THREAD_NUMBER_PRINT, '
' || P.NAME || '
' NAME, (CASE P.NAME WHEN 'db_recovery_file_dest_size' THEN '
' || TO_CHAR(P.VALUE, '999,999,999,999,999') || '
' WHEN 'db_flashback_retention_target' THEN '
' || TO_CHAR(P.VALUE, '999,999,999,999,999') || '
' ELSE '
' || NVL(P.VALUE, '(null)') || '
' END) VALUE FROM GV$PARAMETER P, GV$INSTANCE I WHERE P.INST_ID = I.INST_ID AND P.NAME IN ('db_flashback_retention_target', 'db_recovery_file_dest_size', 'db_recovery_file_dest') ORDER BY 1, 3; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - FLASHBACK DATABASE STATUS - | -- +----------------------------------------------------------------------------+ prompt prompt ● Flashback Database Status


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN dbid HEADING 'DB ID' ENTMAP OFF COLUMN name FORMAT A75 HEADING 'DB Name' ENTMAP OFF COLUMN log_mode FORMAT A75 HEADING 'Log Mode' ENTMAP OFF COLUMN flashback_on FORMAT A75 HEADING 'Flashback DB On?' ENTMAP OFF SELECT '
' || dbid || '
' dbid , '
' || name || '
' name , '
' || log_mode || '
' log_mode , '
' || flashback_on || '
' flashback_on FROM v$database; CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN oldest_flashback_time FORMAT a125 HEADING 'Oldest Flashback Time' ENTMAP OFF COLUMN oldest_flashback_scn HEADING 'Oldest Flashback SCN' ENTMAP OFF COLUMN retention_target FORMAT 999,999 HEADING 'Retention Target (min)' ENTMAP OFF COLUMN retention_target_hours FORMAT 999,999 HEADING 'Retention Target (hour)' ENTMAP OFF COLUMN flashback_size FORMAT 9,999,999,999,999 HEADING 'Flashback Size' ENTMAP OFF COLUMN estimated_flashback_size FORMAT 9,999,999,999,999 HEADING 'Estimated Flashback Size' ENTMAP OFF SELECT '
' || TO_CHAR(oldest_flashback_time,'mm/dd/yyyy HH24:MI:SS') || '
' oldest_flashback_time , oldest_flashback_scn oldest_flashback_scn , retention_target retention_target , retention_target/60 retention_target_hours , flashback_size flashback_size , estimated_flashback_size estimated_flashback_size FROM v$flashback_database_log ORDER BY 1; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - FLASHBACK DATABASE REDO TIME MATRIX - | -- +----------------------------------------------------------------------------+ prompt prompt ● Flashback Database Redo Time Matrix


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN begin_time FORMAT a75 HEADING 'Begin Time' ENTMAP OFF COLUMN END_TIME FORMAT a140 HEADING '          END_TIME          ' ENTMAP OFF COLUMN flashback_data FORMAT 9,999,999,999,999 HEADING 'Flashback Data' ENTMAP OFF COLUMN db_data FORMAT 9,999,999,999,999 HEADING 'DB Data' ENTMAP OFF COLUMN redo_data FORMAT 9,999,999,999,999 HEADING 'Redo Data' ENTMAP OFF COLUMN estimated_flashback_size FORMAT 9,999,999,999,999 HEADING 'Estimated Flashback Size' ENTMAP OFF SET DEFINE ON SELECT '
' || TO_CHAR(begin_time,'mm/dd/yyyy HH24:MI:SS') || '
' begin_time , '
' || TO_CHAR(END_TIME,'mm/dd/yyyy HH24:MI:SS') || '
' END_TIME , flashback_data , db_data , redo_data , estimated_flashback_size FROM v$flashback_database_stat ORDER BY begin_time; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - ARCHIVING MODE - | -- +----------------------------------------------------------------------------+ host echo " Archive Info. . ." prompt prompt Archive Info


prompt

-- +----------------------------------------------------------------------------+ -- | - ARCHIVING MODE - | -- +----------------------------------------------------------------------------+ prompt prompt Archiving Mode


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN db_log_mode FORMAT a95 HEADING 'Database|Log Mode' ENTMAP OFF COLUMN log_archive_start FORMAT a95 HEADING 'Automatic|Archival' ENTMAP OFF COLUMN oldest_online_log_sequence FORMAT 999999999999999 HEADING 'Oldest Online |Log Sequence' ENTMAP OFF COLUMN current_log_seq FORMAT 999999999999999 HEADING 'Current |Log Sequence' ENTMAP OFF SET DEFINE ON SELECT '
' || d.log_mode || '
' db_log_mode , '
' || p.log_archive_start || '
' log_archive_start , c.current_log_seq current_log_seq , o.oldest_online_log_sequence oldest_online_log_sequence FROM (select DECODE( log_mode , 'ARCHIVELOG', 'Archive Mode' , 'NOARCHIVELOG', 'No Archive Mode' , log_mode ) log_mode FROM v$database ) d , (select DECODE( log_mode , 'ARCHIVELOG', 'Enabled' , 'NOARCHIVELOG', 'Disabled') log_archive_start FROM v$database ) p , (SELECT a.sequence# current_log_seq FROM v$log a WHERE a.status = 'CURRENT' AND thread# = &_thread_number ) c , (SELECT min(a.sequence#) oldest_online_log_sequence FROM v$log a WHERE thread# = &_thread_number ) o ; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - ARCHIVE DESTINATIONS - | -- +----------------------------------------------------------------------------+ prompt prompt Archive Parameter Config


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN name HEADING 'Parameter Name' ENTMAP OFF COLUMN value HEADING 'Parameter Value' ENTMAP OFF SELECT '' || a.name || '' name , a.value value FROM v$parameter a WHERE a.name like 'log_%' ORDER BY a.name; prompt
[Back to Contents]

prompt prompt Archive Destinations


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN dest_id HEADING 'Destination|ID' ENTMAP OFF COLUMN dest_name HEADING 'Destination|Name' ENTMAP OFF COLUMN destination HEADING 'Destination' ENTMAP OFF COLUMN status HEADING 'Status' ENTMAP OFF COLUMN schedule HEADING 'Schedule' ENTMAP OFF COLUMN archiver HEADING 'Archiver' ENTMAP OFF COLUMN log_sequence FORMAT 999999999999999 HEADING 'Current Log|Sequence' ENTMAP OFF SELECT '
' || a.dest_id || '
' dest_id , a.dest_name dest_name , a.destination destination , DECODE( a.status , 'VALID', '
' || status || '
' , 'INACTIVE', '
' || status || '
' , '
' || status || '
' ) status , DECODE( a.schedule , 'ACTIVE', '
' || schedule || '
' , 'INACTIVE', '
' || schedule || '
' , '
' || schedule || '
' ) schedule , a.archiver archiver , a.log_sequence log_sequence FROM v$archive_dest a ORDER BY a.dest_id; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - ARCHIVING HISTORY - | -- +----------------------------------------------------------------------------+ prompt prompt Archive Log Generation


prompt prompt ● Archive log status (Last Month)
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN thread# FORMAT a79 HEADING 'Instance Name' ENTMAP OFF COLUMN f_time FORMAT a75 HEADING 'Archive Date' ENTMAP OFF COLUMN day_arch FORMAT 999,999,999,999,999 HEADING 'Daily Archive Log Size(MB)' ENTMAP OFF COLUMN hour_arch FORMAT 999,999,999,999,999 HEADING 'Avg hourly archive log size(MB)' ENTMAP OFF -- BREAK ON report ON thread# SELECT '
' || a.thread# || '
' thread#, '
' || a.f_time || '
' f_time, '
' || round(sum(a.blocks * a.block_size) / 1024 / 1024 ) || '
' day_arch, '
' || round(sum(a.blocks * a.block_size) / 1024 /1024 / 24,2) || '
' hour_arch, COUNT(1) Archive File Count FROM (SELECT distinct sequence#, thread#, blocks, block_size, TO_CHAR(first_time, 'yyyy-mm-dd') f_time FROM gv$archived_log t WHERE t.FIRST_TIME <=sysdate and t.FIRST_TIME >=sysdate-31 ) a GROUP BY a.f_time, a.thread# ORDER BY 1,2 desc; prompt
[Back to Contents]

prompt prompt Archive Log Usage Ratio


prompt NOTE: Further ObserveDB_RECOVERY_FILE_DEST_SIZEParameter,Consider latercrosscheck archivelog all; delete expired archivelog all; prompt NOTE: If archive logs are not in flashback recovery area,Need to check server space CLEAR COLUMNS COMPUTES SET DEFINE ON SELECT A.NAME, round(a.SPACE_LIMIT / 1024 / 1024) SPACE_LIMIT_m, (a.space_used / 1024 / 1024) space_used_m, round(a.space_used / a.SPACE_LIMIT, 2) PERCENT_SPACE_USED, round(a.space_reclaimable / 1024 / 1024, 2) space_reclaimable, round(a.space_reclaimable / a.SPACE_LIMIT, 2) PERCENT_SPACE_RECLAIMABLE, number_of_files FROM v$recovery_file_dest A WHERE a.SPACE_LIMIT <> 0 UNION ALL SELECT b.FILE_TYPE, (c.SPACE_LIMIT / 1024 / 1024) SPACE_LIMIT_m, round(b.PERCENT_SPACE_USED * c.SPACE_LIMIT / 1024 / 1024 / 100, 2) space_used_m, b.PERCENT_SPACE_USED PERCENT_SPACE_USED, round(b.PERCENT_SPACE_RECLAIMABLE * c.SPACE_LIMIT / 1024 / 1024 / 100, 2) space_reclaimable, (b.PERCENT_SPACE_RECLAIMABLE) PERCENT_SPACE_RECLAIMABLE, b.NUMBER_OF_FILES FROM v$flash_recovery_area_usage b, v$recovery_file_dest c WHERE c.SPACE_LIMIT <> 0 UNION ALL SELECT bb.FILENAME || '---' || bb.STATUS, (c.SPACE_LIMIT / 1024 / 1024) SPACE_LIMIT_m, (bb.BYTES / 1024 / 1024) space_used, round(bb.BYTES * 100 / c.SPACE_LIMIT, 2) PERCENT_SPACE_USED, 0, 0, 1 FROM v$block_change_tracking bb, v$recovery_file_dest c WHERE c.SPACE_LIMIT <> 0; prompt
[Back to Contents]

prompt prompt Near7Daily Log Switch Frequency Analysis [Next Item]


prompt ● Note: Observe rowsfirst_timeStart whether time difference is too short,Short interval means frequent switches,Gettop500 CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN FIRST_TIME FORMAT a140 HEADING '        FIRST_TIME        ' ENTMAP OFF COLUMN END_TIME FORMAT a140 HEADING '          END_TIME          ' ENTMAP OFF SET DEFINE ON -- BREAK ON THREAD# SELECT * FROM ( SELECT t.THREAD#, t.SEQUENCE#, t.FIRST_TIME, nvl(T.END_TIME, (SELECT NB.FIRST_TIME FROM v$log nb WHERE nb.SEQUENCE# = t.SEQUENCE# + 1 AND nb.THREAD# = t.THREAD#)) END_TIME, round(((nvl(T.END_TIME, (SELECT NB.FIRST_TIME FROM v$log nb WHERE nb.SEQUENCE# = t.SEQUENCE# + 1 AND nb.THREAD# = t.THREAD#)) - t.FIRST_TIME) * 24) * 60, 2) total_min, ROUND(t.BLOCKS * t.BLOCK_SIZE / 1024 / 1024, 3) LOGsize_m, t.NAME, '
' || archived || '
' archived, '
' || applied || '
' applied, '
' || deleted || '
' deleted, DECODE(status, 'A', '
Available
', 'D', '
Deleted
', 'U', '
Unavailable
', 'X', '
Expired
') status FROM (SELECT a.THREAD#, a.SEQUENCE#, a.FIRST_TIME, a.BLOCKS, a.BLOCK_SIZE, a.NAME, a.ARCHIVED, a.APPLIED, a.DELETED, a.STATUS, lead(a.FIRST_TIME) over(partition by a.THREAD# ORDER BY a.SEQUENCE#) END_TIME FROM v$archived_log a WHERE a.STANDBY_DEST='NO' AND a.FIRST_TIME >= SYSDATE - 7 AND a.FIRST_TIME <= SYSDATE) t ORDER BY t.THREAD#, t.SEQUENCE# DESC) WHERE rownum<=500; prompt
[Back to Contents]

prompt prompt Daily Log Switch Volume


prompt ● Daily log switch count in the last month,Can Analyze30Days fluctuation,Can also analyze24In Hours,Easy to spot abnormalities COLUMN TOTAL HEADING 'TOTAL' ENTMAP OFF CLEAR COLUMNS COMPUTES SET DEFINE OFF -- BREAK ON report on THREAD# skip 1 --COMPUTE sum LABEL 'Total: ' avg label 'Average: ' OF TOTAL ON report COMPUTE sum LABEL 'Sum: ' OF TOTAL ON THREAD# --COMPUTE avg LABEL 'Average: ' OF TOTAL ON report --COMPUTE sum LABEL 'Total:' avg label 'Average:' OF TOTAL ON report SELECT a.THREAD#, '
' || SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) || '
' Day, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23, COUNT(*) TOTAL FROM gv$log_history a WHERE first_time>=TO_CHAR(SYSDATE - 15) group by a.THREAD#, SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) ORDER BY a.THREAD#,SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) DESC; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - ONLINE REDO LOGS - | -- +----------------------------------------------------------------------------+ prompt prompt Log Group Size


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT a.group#, a.THREAD#, a.SEQUENCE#, bytes / 1024 / 1024 size_m, a.status, a.ARCHIVED, a.MEMBERS, TO_CHAR(listagg(b.MEMBER,',') within group(order by MEMBER)) MEMBER, b.TYPE FROM gv$log a, gv$logfile b WHERE b.GROUP# = a.GROUP# AND a.THREAD# = b.INST_ID GROUP BY a.GROUP#, a.THREAD#, a.SEQUENCE#, a.BYTES, a.STATUS, a.ARCHIVED, a.MEMBERS, b.TYPE ORDER BY a.THREAD#, a.GROUP#, a.SEQUENCE#; prompt
[Back to Contents]

-- +============================================================================+ -- | | -- | <<<<< PERFORMANCE >>>>> | -- | | -- +============================================================================+ -- +----------------------------------------------------------------------------+ -- | - SGA INFORMATION - | -- +----------------------------------------------------------------------------+ host echo " SGAInfo. . ." prompt prompt SGAInfo


prompt

prompt prompt SGAUsage Status


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN inst_id FORMAT 999 COLUMN name FORMAT a75 COLUMN MBytes FORMAT 999,999,999,999,999 HEADING 'Value(MB)' ENTMAP OFF COLUMN resizeable FORMAT a75 HEADING 'Is Resizable' ENTMAP OFF -- BREAK ON report on inst_id SELECT inst_id,name,round(bytes/1024/1024) MBytes ,resizeable FROM gv$sgainfo; prompt
[Back to Contents]
prompt
prompt prompt SGA Config Info
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name FORMAT a79 HEADING 'Instance_Name' ENTMAP OFF COLUMN name FORMAT a150 HEADING 'Pool Name' ENTMAP OFF COLUMN value FORMAT 999,999,999,999,999 HEADING 'Bytes' ENTMAP OFF -- BREAK ON report ON instance_name COMPUTE sum LABEL 'Total:' OF value ON instance_name SELECT '
' || i.instance_name || '
' instance_name , '
' || s.name || '
' name , s.value value FROM gv$sga s , gv$instance i WHERE s.inst_id = i.inst_id ORDER BY i.instance_name , s.value DESC; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - SGA TARGET ADVICE - | -- +----------------------------------------------------------------------------+ prompt prompt SGA Target Advice


prompt Modify the SGA_TARGET parameter (up to the size of the SGA_MAX_SIZE, if necessary) to reduce the number of "Estimated Physical Reads". CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name FORMAT a79 HEADING 'Instance_Name' ENTMAP OFF COLUMN name FORMAT a79 HEADING 'Parameter Name' ENTMAP OFF COLUMN value FORMAT a79 HEADING 'Value' ENTMAP OFF -- BREAK ON report ON instance_name SELECT '
' || i.instance_name || '
' instance_name , p.name name , (CASE p.name WHEN 'sga_max_size' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' WHEN 'sga_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' ELSE '
' || p.value || '
' END) value FROM gv$parameter p , gv$instance i WHERE p.inst_id = i.inst_id AND p.name IN ('sga_max_size', 'sga_target') ORDER BY i.instance_name , p.name; CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name FORMAT a79 HEADING 'Instance_Name' ENTMAP OFF COLUMN sga_size FORMAT 999,999,999,999,999 HEADING 'SGA Size' ENTMAP OFF COLUMN sga_size_factor FORMAT 999,999,999,999,999 HEADING 'SGA Size Factor' ENTMAP OFF COLUMN estd_db_time FORMAT 999,999,999,999,999 HEADING 'Estimated DB Time' ENTMAP OFF COLUMN estd_db_time_factor FORMAT 999,999,999,999,999 HEADING 'Estimated DB Time Factor' ENTMAP OFF COLUMN estd_physical_reads FORMAT 999,999,999,999,999 HEADING 'Estimated Physical Reads' ENTMAP OFF -- BREAK ON report ON instance_name SELECT '
' || i.instance_name || '
' instance_name , s.sga_size , s.sga_size_factor , s.estd_db_time , s.estd_db_time_factor , s.estd_physical_reads FROM gv$sga_target_advice s , gv$instance i WHERE s.inst_id = i.inst_id ORDER BY i.instance_name , s.sga_size_factor; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - SGA (ASMM) DYNAMIC COMPONENTS - | -- +----------------------------------------------------------------------------+ prompt prompt SGA (ASMM) Dynamic Components


prompt Provides a summary report of all dynamic components AS part of the Automatic Shared Memory prompt Management (ASMM) configuration. This will display the total real memory allocation for the current prompt SGA FROM the V$SGA_DYNAMIC_COMPONENTS view, which contains both manual AND autotuned SGA components. prompt AS with the other manageability features of Oracle Database 10g, ASMM requires you to set the prompt STATISTICS_LEVEL parameter to at least TYPICAL (the default) before attempting to enable ASMM. ASMM prompt can be enabled by setting SGA_TARGET to a nonzero value in the initialization parameter file (pfile/spfile). CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name FORMAT a79 HEADING 'Instance_Name' ENTMAP OFF COLUMN component FORMAT a79 HEADING 'Component Name' ENTMAP OFF COLUMN current_size FORMAT 999,999,999,999 HEADING 'Current Size' ENTMAP OFF COLUMN min_size FORMAT 999,999,999,999 HEADING 'Min Size' ENTMAP OFF COLUMN max_size FORMAT 999,999,999,999 HEADING 'Max Size' ENTMAP OFF COLUMN user_specified_size FORMAT 999,999,999,999 HEADING 'User Specified|Size' ENTMAP OFF COLUMN oper_count FORMAT 999,999,999,999 HEADING 'Oper.|Count' ENTMAP OFF COLUMN last_oper_type FORMAT a75 HEADING 'Last Oper.|Type' ENTMAP OFF COLUMN last_oper_mode FORMAT a75 HEADING 'Last Oper.|Mode' ENTMAP OFF COLUMN last_oper_time FORMAT a75 HEADING 'Last Oper.|Time' ENTMAP OFF COLUMN granule_size FORMAT 999,999,999,999 HEADING 'Granule Size' ENTMAP OFF -- BREAK ON report ON instance_name SELECT '
' || i.instance_name || '
' instance_name , sdc.component , sdc.current_size , sdc.min_size , sdc.max_size , sdc.user_specified_size , sdc.oper_count , sdc.last_oper_type , sdc.last_oper_mode , '
' || NVL(TO_CHAR(sdc.last_oper_time, 'yyyy-mm-dd HH24:MI:SS'), '
') || '
' last_oper_time , sdc.granule_size FROM gv$sga_dynamic_components sdc , gv$instance i ORDER BY i.instance_name , sdc.component DESC; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - PGA TARGET ADVICE - | -- +----------------------------------------------------------------------------+ prompt prompt PGA Target Suggestion


prompt The V$PGA_TARGET_ADVICE view predicts how the statistics cache hit percentage AND over prompt allocation count in V$PGASTAT will be impacted if you change the value of the prompt initialization parameter PGA_AGGREGATE_TARGET. WHEN you set the PGA_AGGREGATE_TARGET and prompt WORKAREA_SIZE_POLICY to AUTO then the *_AREA_SIZE parameter are automatically ignored and prompt Oracle will automatically use the computed value for these parameters. Use the results from prompt the query below to adequately set the initialization parameter PGA_AGGREGATE_TARGET AS to avoid prompt any over allocation. If column ESTD_OVERALLOCATION_COUNT in the V$PGA_TARGET_ADVICE prompt view (below) is nonzero, it indicates that PGA_AGGREGATE_TARGET is too small to even prompt meet the minimum PGA memory needs. If PGA_AGGREGATE_TARGET is set within the over prompt allocation zone, the memory manager will over-allocate memory AND actual PGA memory prompt consumed will be more than the limit you set. It is therefore meaningless to set a prompt value of PGA_AGGREGATE_TARGET in that zone. After eliminating over-allocations, the prompt goal is to maximize the PGA cache hit percentage, based on your response-time requirement prompt AND memory constraints. CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name FORMAT a79 HEADING 'Instance_Name' ENTMAP OFF COLUMN name FORMAT a79 HEADING 'Parameter Name' ENTMAP OFF COLUMN value FORMAT a79 HEADING 'Value' ENTMAP OFF -- BREAK ON report ON instance_name SELECT '
' || i.instance_name || '
' instance_name , p.name name , (CASE p.name WHEN 'pga_aggregate_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' ELSE '
' || p.value || '
' END) value FROM gv$parameter p , gv$instance i WHERE p.inst_id = i.inst_id AND p.name IN ('pga_aggregate_target', 'workarea_size_policy') ORDER BY i.instance_name , p.name; CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name FORMAT a79 HEADING 'Instance_Name' ENTMAP OFF COLUMN pga_target_for_estimate FORMAT 999,999,999,999,999 HEADING 'PGA Target for Estimate' ENTMAP OFF COLUMN estd_extra_bytes_rw FORMAT 999,999,999,999,999 HEADING 'Estimated Extra Bytes R/W' ENTMAP OFF COLUMN estd_pga_cache_hit_percentage FORMAT 999,999,999,999,999 HEADING 'Estimated PGA Cache Hit %' ENTMAP OFF COLUMN estd_overalloc_count FORMAT 999,999,999,999,999 HEADING 'ESTD_OVERALLOC_COUNT' ENTMAP OFF -- BREAK ON report ON instance_name SELECT '
' || i.instance_name || '
' instance_name , p.pga_target_for_estimate , p.estd_extra_bytes_rw , p.estd_pga_cache_hit_percentage , p.estd_overalloc_count FROM gv$pga_target_advice p , gv$instance i WHERE p.inst_id = i.inst_id ORDER BY i.instance_name , p.pga_target_for_estimate; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - FILE I/O STATISTICS - | -- +----------------------------------------------------------------------------+ host echo " FileIOInfo. . ." prompt prompt FileIOInfo


prompt

prompt prompt FileIOAnalyze


prompt Ordered by "Physical Reads" since last startup of the Oracle instance CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN tablespace_name FORMAT a50 HEAD 'Tablespace' ENTMAP OFF COLUMN fname HEAD 'File Name' ENTMAP OFF COLUMN phyrds FORMAT 999,999,999,999,999 HEAD 'Physical Reads' ENTMAP OFF COLUMN phywrts FORMAT 999,999,999,999,999 HEAD 'Physical Writes' ENTMAP OFF COLUMN read_pct HEAD 'Read Pct.' ENTMAP OFF COLUMN write_pct HEAD 'Write Pct.' ENTMAP OFF COLUMN total_io FORMAT 999,999,999,999,999 HEAD 'Total I/O' ENTMAP OFF -- BREAK ON report --COMPUTE sum LABEL 'Total: ' OF phyrds phywrts total_io ON report SELECT df.con_id, '' || df.tablespace_name || '' tablespace_name, df.file_name fname, fs.phyrds phyrds, '
' || ROUND((fs.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
' read_pct, fs.phywrts phywrts, '
' || ROUND((fs.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
' write_pct, (fs.phyrds + fs.phywrts) total_io FROM cdb_data_files df, v$filestat fs, (SELECT f.CON_ID,sum(f.phyrds) pr, sum(f.phywrts) pw FROM v$filestat f group by f.CON_ID) fst, (SELECT t.CON_ID,sum(t.phyrds) pr, sum(t.phywrts) pw FROM v$tempstat t group by t.CON_ID) tst WHERE df.file_id = fs.file# and Df.con_id = fs.CON_ID and Df.con_id=fst.con_id and Df.con_id=tst.con_id UNION all SELECT tf.con_id, '' || tf.tablespace_name || '' tablespace_name, tf.file_name fname, ts.phyrds phyrds, '
' || ROUND((ts.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
' read_pct, ts.phywrts phywrts, '
' || ROUND((ts.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
' write_pct, (ts.phyrds + ts.phywrts) total_io FROM cdb_temp_files tf, v$tempstat ts, (SELECT f.CON_ID,sum(f.phyrds) pr, sum(f.phywrts) pw FROM v$filestat f group by f.CON_ID) fst, (SELECT t.con_id,sum(t.phyrds) pr, sum(t.phywrts) pw FROM v$tempstat t group by t.CON_ID) tst WHERE tf.file_id = ts.file# and tf.con_id = ts.con_id and tf.con_id=fst.con_id and tf.CON_ID=tst.con_id ORDER BY con_id, phyrds DESC; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - FILE I/O TIMINGS - | -- +----------------------------------------------------------------------------+ prompt prompt FileIOTime Analysis


prompt Average time (in milliseconds) for an I/O call per datafile since last startup of the Oracle instance - (ordered by Physical Reads) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN fname HEAD 'File Name' ENTMAP OFF COLUMN phyrds FORMAT 999,999,999,999,999 HEAD 'Physical Reads' ENTMAP OFF COLUMN read_rate FORMAT 999,999,999,999,999.99 HEAD 'Average Read Time
(milliseconds per read)' ENTMAP OFF COLUMN phywrts FORMAT 999,999,999,999,999 HEAD 'Physical Writes' ENTMAP OFF COLUMN write_rate FORMAT 999,999,999,999,999.99 HEAD 'Average Write Time
(milliseconds per write)' ENTMAP OFF -- BREAK ON report --COMPUTE sum LABEL 'Total: ' OF phyrds phywrts ON report --COMPUTE avg LABEL 'Average: ' OF read_rate write_rate ON report SELECT s.CON_ID, '' || d.name || '' fname, s.phyrds phyrds, ROUND((s.readtim / GREATEST(s.phyrds, 1)), 2) read_rate, s.phywrts phywrts, ROUND((s.writetim / GREATEST(s.phywrts, 1)), 2) write_rate FROM v$filestat s, v$datafile d WHERE s.file# = d.file# and s.CON_ID=d.CON_ID UNION SELECT s.CON_ID, '' || t.name || '' fname, s.phyrds phyrds, ROUND((s.readtim / GREATEST(s.phyrds, 1)), 2) read_rate, s.phywrts phywrts, ROUND((s.writetim / GREATEST(s.phywrts, 1)), 2) write_rate FROM v$tempstat s, v$tempfile t WHERE s.file# = t.file# and s.CON_ID=t.CON_ID ORDER BY 1,3 DESC; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - AVERAGE OVERALL I/O PER SECOND - | -- +----------------------------------------------------------------------------+ prompt prompt Average Overall I/O per Second


prompt Average overall I/O calls (physical read/write calls) since last startup of the Oracle instance CLEAR COLUMNS COMPUTES SET DEFINE OFF DECLARE CURSOR get_file_io IS SELECT NVL(SUM(a.phyrds + a.phywrts), 0) sum_datafile_io , TO_NUMBER(null) sum_tempfile_io FROM v$filestat a UNION SELECT TO_NUMBER(null) sum_datafile_io , NVL(SUM(b.phyrds + b.phywrts), 0) sum_tempfile_io FROM v$tempstat b; current_time DATE; elapsed_time_seconds NUMBER; sum_datafile_io NUMBER; sum_datafile_io2 NUMBER; sum_tempfile_io NUMBER; sum_tempfile_io2 NUMBER; total_io NUMBER; datafile_io_per_sec NUMBER; tempfile_io_per_sec NUMBER; total_io_per_sec NUMBER; BEGIN OPEN get_file_io; FOR i IN 1..2 LOOP FETCH get_file_io INTO sum_datafile_io, sum_tempfile_io; IF i = 1 THEN sum_datafile_io2 := sum_datafile_io; ELSE sum_tempfile_io2 := sum_tempfile_io; END IF; END LOOP; total_io := sum_datafile_io2 + sum_tempfile_io2; SELECT sysdate INTO current_time FROM dual; SELECT CEIL ((current_time - startup_time)*(60*60*24)) INTO elapsed_time_seconds FROM v$instance; datafile_io_per_sec := sum_datafile_io2/elapsed_time_seconds; tempfile_io_per_sec := sum_tempfile_io2/elapsed_time_seconds; total_io_per_sec := total_io/elapsed_time_seconds; DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('
Elapsed Time (in seconds)' || TO_CHAR(elapsed_time_seconds, '9,999,999,999,999') || '
Datafile I/O Calls per Second' || TO_CHAR(datafile_io_per_sec, '9,999,999,999,999') || '
Tempfile I/O Calls per Second' || TO_CHAR(tempfile_io_per_sec, '9,999,999,999,999') || '
Total I/O Calls per Second' || TO_CHAR(total_io_per_sec, '9,999,999,999,999') || '
'); END; / prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - REDO LOG CONTENTION - | -- +----------------------------------------------------------------------------+ prompt prompt Redo Log Contention


prompt All latches like redo% - (ordered by misses) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN name FORMAT a95 HEADING 'Latch Name' COLUMN gets FORMAT 999,999,999,999,999,999 HEADING 'Gets' COLUMN misses FORMAT 999,999,999,999 HEADING 'Misses' COLUMN sleeps FORMAT 999,999,999,999 HEADING 'Sleeps' COLUMN immediate_gets FORMAT 999,999,999,999,999,999 HEADING 'Immediate Gets' COLUMN immediate_misses FORMAT 999,999,999,999 HEADING 'Immediate Misses' -- BREAK ON report COMPUTE sum LABEL 'Total:' OF gets misses sleeps immediate_gets immediate_misses ON report SELECT '
' || INITCAP(name) || '
' name , gets , misses , sleeps , immediate_gets , immediate_misses FROM sys.v_$latch WHERE name LIKE 'redo%' ORDER BY 1; prompt prompt System statistics like redo% CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN name FORMAT a95 HEADING 'Statistics Name' COLUMN value FORMAT 999,999,999,999,999 HEADING 'Value' SELECT '
' || INITCAP(name) || '
' name , value FROM v$sysstat WHERE name LIKE 'redo%' ORDER BY 1; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - FULL TABLE SCANS - | -- +----------------------------------------------------------------------------+ prompt prompt Full Table Scan Stats


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN large_table_scans FORMAT 999,999,999,999,999 HEADING 'Large Table Scans' ENTMAP OFF COLUMN small_table_scans FORMAT 999,999,999,999,999 HEADING 'Small Table Scans' ENTMAP OFF COLUMN pct_large_scans HEADING 'Pct. Large Scans' ENTMAP OFF SELECT a.value large_table_scans , b.value small_table_scans , '
' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
' pct_large_scans FROM v$sysstat a , v$sysstat b WHERE a.name = 'table scans (long tables)' AND b.name = 'table scans (short tables)'; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - SORTS - | -- +----------------------------------------------------------------------------+ prompt prompt Sort Statistics


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN disk_sorts FORMAT 999,999,999,999,999 HEADING 'Disk Sorts' ENTMAP OFF COLUMN memory_sorts FORMAT 999,999,999,999,999 HEADING 'Memory Sorts' ENTMAP OFF COLUMN pct_disk_sorts HEADING 'Pct. Disk Sorts' ENTMAP OFF SELECT a.value disk_sorts , b.value memory_sorts , '
' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
' pct_disk_sorts FROM v$sysstat a , v$sysstat b WHERE a.name = 'sorts (disk)' AND b.name = 'sorts (memory)'; SELECT name, cnt, DECODE(total, 0, 0, round(cnt * 100 / total, 4)) "Hit Ratio" FROM (SELECT name, value cnt, (sum(value) over()) total FROM v$sysstat WHERE name like 'workarea exec%'); prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - OUTLINES - | -- +----------------------------------------------------------------------------+ prompt prompt Outlines


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN category FORMAT a125 HEADING 'Category' ENTMAP OFF COLUMN owner FORMAT a125 HEADING 'Owner' ENTMAP OFF COLUMN name FORMAT a125 HEADING 'Name' ENTMAP OFF COLUMN used HEADING 'Used?' ENTMAP OFF COLUMN timestamp FORMAT a125 HEADING 'Time Stamp' ENTMAP OFF COLUMN version HEADING 'Version' ENTMAP OFF COLUMN sql_text HEADING 'SQL Text' ENTMAP OFF SELECT d.CON_ID, '
' || category || '
' category, owner, name, used, '
' || TO_CHAR(timestamp, 'mm/dd/yyyy HH24:MI:SS') || '
' timestamp, version FROM cdb_outlines d ORDER BY d.CON_ID, category, owner, name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - OUTLINE HINTS - | -- +----------------------------------------------------------------------------+ prompt prompt Outline Hints


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN category FORMAT a125 HEADING 'Category' ENTMAP OFF COLUMN owner FORMAT a125 HEADING 'Owner' ENTMAP OFF COLUMN name FORMAT a125 HEADING 'Name' ENTMAP OFF COLUMN node HEADING 'Node' ENTMAP OFF COLUMN join_pos HEADING 'Join Position' ENTMAP OFF COLUMN hint HEADING 'Hint' ENTMAP OFF -- BREAK ON category ON owner ON name SELECT a.CON_ID, '
' || a.category || '
' category, a.owner owner, a.name name, '
' || b.node || '
' node, '
' || b.join_pos || '
' join_pos, b.hint hint FROM cdb_outlines a, cdb_outline_hints b WHERE a.owner = b.owner AND b.name = b.name and a.CON_ID = b.CON_ID ORDER BY category, owner, name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - SQL STATEMENTS WITH MOST BUFFER GETS - | -- +----------------------------------------------------------------------------+ host echo " SQLMonitor. . ." prompt prompt SQLMonitor


prompt

prompt NOTE: Excluding all internal system schemas (i.e. SYS, SYSTEM, db_monitor) ,SELECT database lever top 10 rows prompt prompt Logical ReadsTOP10OfSQLStatement


prompt NOTE: Top 10 SQL statements with buffer gets greater than 1000 CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN buffer_gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN gets_per_exec FORMAT 999,999,999,999,999 HEADING 'Buffer Gets / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT INST_ID, '' || UPPER(username) || '' username, SQL_ID, a.buffer_gets buffer_gets, DISK_READS, LAST_LOAD_TIME, LAST_ACTIVE_TIME, a.executions, PARSE_CALLS, VERSION_COUNT, loads, ((ELAPSED_TIME / 1000000)) ELAPSED_TIME, round(a.buffer_gets / DECODE(a.executions, 0, 1, a.executions), 3) buffer_gets_per_exec, round(a.disk_reads / DECODE(a.executions, 0, 1, a.executions), 3) disk_reads_per_exec, (a.ELAPSED_TIME / 1000000 / DECODE(a.executions, 0, 1, a.executions)) ELAPSED_TIME_per_exec, client_info, a.sql_text sql_text FROM (SELECT ai.INST_ID, ai.buffer_gets, ai.DISK_READS, ai.executions, ai.PARSE_CALLS, ai.sql_text, ai.parsing_user_id, ai.SQL_ID, ai.ELAPSED_TIME, ai.LAST_LOAD_TIME, ai.LAST_ACTIVE_TIME, PARSING_SCHEMA_NAME username, VERSION_COUNT, loads, ai.MODULE || '--' || ai.ACTION client_info, DENSE_RANK() over(ORDER BY ai.buffer_gets desc) rank_order FROM gv$sqlarea ai WHERE buffer_gets > 1000 AND ai.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND ai.ACTION not in ('JOB_AUTO_TUNING_SQL_LHR') AND ai.SQL_TEXT NOT LIKE '/* SQL Analyze(%' ) a WHERE rank_order <= 10 ORDER BY INST_ID, a.buffer_gets DESC; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - SQL STATEMENTS WITH MOST DISK READS - | -- +----------------------------------------------------------------------------+ prompt prompt Physical ReadsTOP10OfSQLStatement


prompt NOTE: Top 10 SQL statements with disk reads greater than 1000 CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT INST_ID, '' || UPPER(username) || '' username, SQL_ID, a.buffer_gets buffer_gets, DISK_READS, LAST_LOAD_TIME, LAST_ACTIVE_TIME, a.executions, PARSE_CALLS, VERSION_COUNT, loads, ((ELAPSED_TIME / 1000000)) ELAPSED_TIME, round(a.buffer_gets / DECODE(a.executions, 0, 1, a.executions), 3) buffer_gets_per_exec, round(a.disk_reads / DECODE(a.executions, 0, 1, a.executions), 3) disk_reads_per_exec, (a.ELAPSED_TIME / 1000000 / DECODE(a.executions, 0, 1, a.executions)) ELAPSED_TIME_per_exec, client_info, a.sql_text sql_text FROM (SELECT ai.INST_ID, ai.buffer_gets, ai.DISK_READS, ai.executions, ai.PARSE_CALLS, ai.sql_text, ai.parsing_user_id, ai.SQL_ID, ai.ELAPSED_TIME, ai.LAST_LOAD_TIME, ai.LAST_ACTIVE_TIME, PARSING_SCHEMA_NAME username, VERSION_COUNT, loads, ai.MODULE || '--' || ai.ACTION client_info, DENSE_RANK() over(ORDER BY ai.DISK_READS desc) rank_order FROM gv$sqlarea ai WHERE buffer_gets > 1000 AND ai.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND ai.ACTION not in ('JOB_AUTO_TUNING_SQL_LHR') AND ai.SQL_TEXT NOT LIKE '/* SQL Analyze(%' ) a WHERE rank_order <= 10 ORDER BY INST_ID, a.DISK_READS DESC; prompt
[Back to Contents]

prompt prompt Execution TimeTOP10OfSQLStatement


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT INST_ID, '' || UPPER(username) || '' username, SQL_ID, a.buffer_gets buffer_gets, DISK_READS, LAST_LOAD_TIME, LAST_ACTIVE_TIME, a.executions, PARSE_CALLS, VERSION_COUNT, loads, ((ELAPSED_TIME / 1000000)) ELAPSED_TIME, round(a.buffer_gets / DECODE(a.executions, 0, 1, a.executions), 3) buffer_gets_per_exec, round(a.disk_reads / DECODE(a.executions, 0, 1, a.executions), 3) disk_reads_per_exec, (a.ELAPSED_TIME / 1000000 / DECODE(a.executions, 0, 1, a.executions)) ELAPSED_TIME_per_exec, client_info, a.sql_text sql_text FROM (SELECT ai.INST_ID, ai.buffer_gets, ai.DISK_READS, ai.executions, ai.PARSE_CALLS, ai.sql_text, ai.parsing_user_id, ai.SQL_ID, ai.ELAPSED_TIME, ai.LAST_LOAD_TIME, ai.LAST_ACTIVE_TIME, PARSING_SCHEMA_NAME username, VERSION_COUNT, loads, ai.MODULE || '--' || ai.ACTION client_info, DENSE_RANK() over(ORDER BY ai.ELAPSED_TIME desc) rank_order FROM gv$sqlarea ai WHERE buffer_gets > 1000 AND ai.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND ai.ACTION not in ('JOB_AUTO_TUNING_SQL_LHR') AND ai.SQL_TEXT NOT LIKE '/* SQL Analyze(%' ) a WHERE rank_order <= 10 ORDER BY INST_ID, a.ELAPSED_TIME DESC; prompt
[Back to Contents]

prompt prompt ExecutionsTOP10OfSQLStatement


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT INST_ID, '' || UPPER(username) || '' username, SQL_ID, a.buffer_gets buffer_gets, DISK_READS, LAST_LOAD_TIME, LAST_ACTIVE_TIME, a.executions, PARSE_CALLS, VERSION_COUNT, loads, ((ELAPSED_TIME / 1000000)) ELAPSED_TIME, round(a.buffer_gets / DECODE(a.executions, 0, 1, a.executions), 3) buffer_gets_per_exec, round(a.disk_reads / DECODE(a.executions, 0, 1, a.executions), 3) disk_reads_per_exec, (a.ELAPSED_TIME / 1000000 / DECODE(a.executions, 0, 1, a.executions)) ELAPSED_TIME_per_exec, client_info, a.sql_text sql_text FROM (SELECT ai.INST_ID, ai.buffer_gets, ai.DISK_READS, ai.executions, ai.PARSE_CALLS, ai.sql_text, ai.parsing_user_id, ai.SQL_ID, ai.ELAPSED_TIME, ai.LAST_LOAD_TIME, ai.LAST_ACTIVE_TIME, PARSING_SCHEMA_NAME username, VERSION_COUNT, loads, ai.MODULE || '--' || ai.ACTION client_info, DENSE_RANK() over(ORDER BY ai.EXECUTIONS desc) rank_order FROM gv$sqlarea ai WHERE buffer_gets > 1000 AND ai.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND ai.ACTION not in ('JOB_AUTO_TUNING_SQL_LHR') AND ai.SQL_TEXT NOT LIKE '/* SQL Analyze(%' ) a WHERE rank_order <= 10 ORDER BY INST_ID, a.EXECUTIONS DESC; prompt
[Back to Contents]

prompt prompt Parse CountTOP10OfSQLStatement


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT INST_ID, '' || UPPER(username) || '' username, SQL_ID, a.buffer_gets buffer_gets, DISK_READS, LAST_LOAD_TIME, LAST_ACTIVE_TIME, a.executions, PARSE_CALLS, VERSION_COUNT, loads, ((ELAPSED_TIME / 1000000)) ELAPSED_TIME, round(a.buffer_gets / DECODE(a.executions, 0, 1, a.executions), 3) buffer_gets_per_exec, round(a.disk_reads / DECODE(a.executions, 0, 1, a.executions), 3) disk_reads_per_exec, (a.ELAPSED_TIME / 1000000 / DECODE(a.executions, 0, 1, a.executions)) ELAPSED_TIME_per_exec, client_info, a.sql_text sql_text FROM (SELECT ai.INST_ID, ai.buffer_gets, ai.DISK_READS, ai.executions, ai.PARSE_CALLS, ai.sql_text, ai.parsing_user_id, ai.SQL_ID, ai.ELAPSED_TIME, ai.LAST_LOAD_TIME, ai.LAST_ACTIVE_TIME, PARSING_SCHEMA_NAME username, VERSION_COUNT, loads, ai.MODULE || '--' || ai.ACTION client_info, DENSE_RANK() over(ORDER BY ai.PARSE_CALLS desc) rank_order FROM gv$sqlarea ai WHERE buffer_gets > 1000 AND ai.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND ai.ACTION not in ('JOB_AUTO_TUNING_SQL_LHR') AND ai.SQL_TEXT NOT LIKE '/* SQL Analyze(%' ) a WHERE rank_order <= 10 ORDER BY INST_ID, a.EXECUTIONS DESC; prompt
[Back to Contents]

prompt prompt VERSION_COUNT TOP10OfSQLStatement


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT INST_ID, '' || UPPER(username) || '' username, SQL_ID, a.buffer_gets buffer_gets, DISK_READS, LAST_LOAD_TIME, LAST_ACTIVE_TIME, a.executions, PARSE_CALLS, VERSION_COUNT, loads, ((ELAPSED_TIME / 1000000)) ELAPSED_TIME, round(a.buffer_gets / DECODE(a.executions, 0, 1, a.executions), 3) buffer_gets_per_exec, round(a.disk_reads / DECODE(a.executions, 0, 1, a.executions), 3) disk_reads_per_exec, (a.ELAPSED_TIME / 1000000 / DECODE(a.executions, 0, 1, a.executions)) ELAPSED_TIME_per_exec, client_info, a.sql_text sql_text FROM (SELECT ai.INST_ID, ai.buffer_gets, ai.DISK_READS, ai.executions, ai.PARSE_CALLS, ai.sql_text, ai.parsing_user_id, ai.SQL_ID, ai.ELAPSED_TIME, ai.LAST_LOAD_TIME, ai.LAST_ACTIVE_TIME, PARSING_SCHEMA_NAME username, VERSION_COUNT, loads, ai.MODULE || '--' || ai.ACTION client_info, DENSE_RANK() over(ORDER BY ai.VERSION_COUNT desc) rank_order FROM gv$sqlarea ai WHERE buffer_gets > 1000 AND ai.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND ai.ACTION not in ('JOB_AUTO_TUNING_SQL_LHR') AND ai.SQL_TEXT NOT LIKE '/* SQL Analyze(%' ) a WHERE rank_order <= 10 ORDER BY INST_ID, a.VERSION_COUNT DESC; prompt
[Back to Contents]

prompt prompt MemoryTOP10OfSQLStatement


prompt NOTE: Forshared memorySorted by usage,RecordedSQLOccupylibrary cachesize ofTOP SQL CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT INST_ID, '' || UPPER(username) || '' username, SQL_ID, A.sharable_mem_m, a.buffer_gets buffer_gets, DISK_READS, LAST_LOAD_TIME, LAST_ACTIVE_TIME, a.executions, PARSE_CALLS, VERSION_COUNT, loads, ((ELAPSED_TIME / 1000000)) ELAPSED_TIME, round(a.buffer_gets / DECODE(a.executions, 0, 1, a.executions), 3) buffer_gets_per_exec, round(a.disk_reads / DECODE(a.executions, 0, 1, a.executions), 3) disk_reads_per_exec, (a.ELAPSED_TIME / 1000000 / DECODE(a.executions, 0, 1, a.executions)) ELAPSED_TIME_per_exec, client_info, a.sql_text sql_text FROM (SELECT ai.INST_ID, round(ai.sharable_mem/1024/1024) sharable_mem_m, ai.buffer_gets, ai.DISK_READS, ai.executions, ai.PARSE_CALLS, ai.sql_text, ai.parsing_user_id, ai.SQL_ID, ai.ELAPSED_TIME, ai.LAST_LOAD_TIME, ai.LAST_ACTIVE_TIME, PARSING_SCHEMA_NAME username, VERSION_COUNT, loads, ai.MODULE || '--' || ai.ACTION client_info, DENSE_RANK() over(ORDER BY ai.DISK_READS desc) rank_order FROM gv$sqlarea ai WHERE sharable_mem > 0.1*1024*1024 AND ai.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND ai.ACTION not in ('JOB_AUTO_TUNING_SQL_LHR') AND ai.SQL_TEXT NOT LIKE '/* SQL Analyze(%' ) a WHERE rank_order <= 10 ORDER BY INST_ID, a.DISK_READS DESC; prompt
[Back to Contents]

prompt prompt DISK_SORTSevereSQL


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT SESS.INST_ID, SESS.USERNAME, SESS.SID, SESS.SERIAL#, SORT1.SQL_ID, ((SQL.ELAPSED_TIME / SQL.EXECUTIONS / 1000000)) ELAPSED_TIME, SQL.SQL_TEXT, SQL.ADDRESS, SORT1.BLOCKS FROM GV$SESSION SESS, GV$SQLAREA SQL, GV$SORT_USAGE SORT1 WHERE SESS.SERIAL# = SORT1.SESSION_NUM AND SORT1.SQLADDR = SQL.ADDRESS AND SORT1.SQLHASH = SQL.HASH_VALUE AND SESS.INST_ID = SQL.INST_ID AND SESS.INST_ID = SORT1.INST_ID AND SORT1.BLOCKS > 200 ORDER BY SESS.INST_ID, SORT1.BLOCKS DESC; prompt
[Back to Contents]

prompt prompt FromASHQuery ViewSQL


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP OFF COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP OFF COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP OFF COLUMN sql_text FORMAT a500 HEADING '                                        SQL_Text                                        ' ENTMAP OFF COLUMN LAST_LOAD_TIME FORMAT a140 HEADING '        LAST_LOAD_TIME        ' ENTMAP OFF COLUMN LAST_ACTIVE_TIME FORMAT a140 HEADING '        LAST_ACTIVE_TIME        ' ENTMAP OFF COLUMN client_info FORMAT a100 HEADING '     CLIENT_INFO     ' ENTMAP OFF SET DEFINE ON SELECT * FROM (SELECT * FROM (SELECT DISTINCT ASH.INST_ID, ASH.SESSION_ID SID, ASH.SESSION_SERIAL# SERIAL#, GVS.PARSING_SCHEMA_NAME USERNAME, ASH.SESSION_TYPE, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, ASH.EVENT, ASH.SESSION_STATE, ASH.BLOCKING_SESSION, ASH.BLOCKING_SESSION_SERIAL#, ASH.BLOCKING_INST_ID BLOCKING_INSTANCE, ASH.SQL_EXEC_ID, ASH.SQL_EXEC_START, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE) SESSION_INFO, COUNT(*) ASH_COUNTS, (GVS.ELAPSED_TIME / 1000000) ELAPSED_TIME_S, (GVS.CPU_TIME / 1000000) CPU_TIME, GVS.EXECUTIONS, GVS.DISK_READS, GVS.BUFFER_GETS, GVS.LAST_ACTIVE_TIME, GVS.LAST_LOAD_TIME, GVS.PHYSICAL_READ_BYTES, GVS.PHYSICAL_WRITE_BYTES, GVS.SQL_TEXT, DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER FROM GV$ACTIVE_SESSION_HISTORY ASH, GV$SQL GVS WHERE ASH.INST_ID = GVS.INST_ID AND GVS.SQL_ID = ASH.SQL_ID AND ASH.SQL_ID IS NOT NULL AND GVS.DISK_READS >= 100 GROUP BY ASH.INST_ID, ASH.SESSION_ID, ASH.SESSION_SERIAL#, ASH.SESSION_TYPE, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, ASH.SQL_EXEC_ID, ASH.EVENT, ASH.SESSION_STATE, ASH.BLOCKING_SESSION, ASH.BLOCKING_SESSION_SERIAL#, ASH.BLOCKING_INST_ID, ASH.CLIENT_ID, ASH.MACHINE, GVS.PARSING_SCHEMA_NAME, ASH.SQL_EXEC_START, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.MACHINE || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE), (GVS.ELAPSED_TIME / 1000000), (GVS.CPU_TIME / 1000000), GVS.EXECUTIONS, GVS.DISK_READS, GVS.BUFFER_GETS, GVS.LAST_ACTIVE_TIME, GVS.LAST_LOAD_TIME, GVS.PHYSICAL_READ_BYTES, GVS.PHYSICAL_WRITE_BYTES, GVS.SQL_TEXT HAVING COUNT(*) > 10) V WHERE RANK_ORDER <= 10 ORDER BY V.INST_ID, V.SID, V.SERIAL#, V.SESSION_TYPE, V.SQL_ID) WHERE ROWNUM<=100; prompt ● Most ConsumingCPUOfSQLStatement SELECT ASH.INST_ID, ASH.SQL_ID, (SELECT VS.SQL_TEXT FROM GV$SQLAREA VS WHERE VS.SQL_ID = ASH.SQL_ID AND ASH.INST_ID = VS.INST_ID AND ROWNUM<=1) SQL_TEXT, ASH.SQL_CHILD_NUMBER, ASH.SESSION_INFO, COUNTS, PCTLOAD * 100 || '%' PCTLOAD FROM (SELECT ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE) SESSION_INFO, COUNT(*) COUNTS, ROUND(COUNT(*) / SUM(COUNT(*)) OVER(), 2) PCTLOAD, DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER FROM GV$ACTIVE_SESSION_HISTORY ASH WHERE ASH.SESSION_TYPE <> 'BACKGROUND' AND ASH.SESSION_STATE = 'ON CPU' GROUP BY ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE)) ASH WHERE RANK_ORDER <= 10 ORDER BY COUNTS DESC; prompt ● Most ConsumingI/OOfSQLStatement SELECT ASH.INST_ID, ASH.SQL_ID, (SELECT VS.SQL_TEXT FROM GV$SQLAREA VS WHERE VS.SQL_ID = ASH.SQL_ID AND ASH.INST_ID = VS.INST_ID AND ROWNUM<=1) SQL_TEXT, ASH.SQL_CHILD_NUMBER, ASH.SESSION_INFO, COUNTS, PCTLOAD * 100 || '%' PCTLOAD FROM (SELECT ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE) SESSION_INFO, COUNT(*) COUNTS, ROUND(COUNT(*) / SUM(COUNT(*)) OVER(), 2) PCTLOAD, DENSE_RANK() OVER(ORDER BY COUNT(*) DESC) RANK_ORDER FROM GV$ACTIVE_SESSION_HISTORY ASH WHERE ASH.SESSION_TYPE <> 'BACKGROUND' AND ASH.SESSION_STATE = 'WAITING' AND ASH.WAIT_CLASS = 'USER I/O' GROUP BY ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE)) ASH WHERE RANK_ORDER <= 10 ORDER BY COUNTS DESC; prompt ● Most Resource ConsumingSQLStatement SELECT ASH.INST_ID, ASH.SQL_ID, (SELECT VS.SQL_TEXT FROM GV$SQLAREA VS WHERE VS.SQL_ID = ASH.SQL_ID AND ASH.INST_ID = VS.INST_ID AND ROWNUM<=1) SQL_TEXT, ASH.SQL_CHILD_NUMBER, ASH.SESSION_INFO, "CPU", "WAIT", "IO", "TOTAL" FROM (SELECT ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE) SESSION_INFO, SUM(DECODE(ASH.SESSION_STATE, 'ON CPU', 1, 0)) "CPU", SUM(DECODE(ASH.SESSION_STATE, 'WAITING', 1, 0)) - SUM(DECODE(ASH.SESSION_STATE, 'WAITING', DECODE(ASH.WAIT_CLASS, 'USER I/O', 1, 0), 0)) "WAIT", SUM(DECODE(ASH.SESSION_STATE, 'WAITING', DECODE(ASH.WAIT_CLASS, 'USER I/O', 1, 0), 0)) "IO", SUM(DECODE(ASH.SESSION_STATE, 'ON CPU', 1, 1)) "TOTAL", DENSE_RANK() OVER(ORDER BY SUM(DECODE(ASH.SESSION_STATE, 'ON CPU', 1, 1)) DESC) RANK_ORDER FROM GV$ACTIVE_SESSION_HISTORY ASH WHERE SQL_ID IS NOT NULL GROUP BY ASH.INST_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, (ASH.MODULE || '--' || ASH.ACTION || '--' || ASH.PROGRAM || '--' || ASH.CLIENT_ID || '--' || ASH.SESSION_TYPE)) ASH WHERE RANK_ORDER <= 10 ORDER BY TOTAL DESC; prompt
[Back to Contents]

prompt prompt GarbageSQLOfRUNNING_11G


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN SQL_TEXT FORMAT a500 HEADING '                                        SQL_TEXT                                        ' ENTMAP OFF COLUMN SQL_EXEC_START FORMAT a140 HEADING '        SQL_EXEC_START        ' ENTMAP OFF COLUMN LOGON_TIME FORMAT a140 HEADING '        LOGON_TIME        ' ENTMAP OFF COLUMN monitor_types FORMAT a100 HEADING '     monitor_types     ' ENTMAP OFF SET DEFINE ON WITH TMPS AS (SELECT WB.INST_ID INST_ID, WB.SID SID, WB.SERIAL#, WB.SPID, WB.OSUSER, WB.USERNAME, WA.PLAN_DEPTH, WA.PLAN_OPERATION PLAN_OPERATION, WA.PLAN_OPTIONS, WA.PLAN_PARTITION_START, WA.PLAN_PARTITION_STOP, WA.STARTS, WA.PLAN_COST, WA.PLAN_CARDINALITY, NVL(WB.SQL_ID, WA.SQL_ID) SQL_ID, WB.SQL_EXEC_START, WA.PX_SERVERS_REQUESTED, WA.PX_SERVERS_ALLOCATED, WA.PX_MAXDOP, WA.ELAPSED_TIME_S ELAPSED_TIME_S, WA.CPU_TIME CPU_TIME, WA.BUFFER_GETS, WA.PHYSICAL_READ_BYTES, WA.PHYSICAL_WRITE_BYTES, WA.USER_IO_WAIT_TIME USER_IO_WAIT_TIME, NVL((SELECT NS.SQL_TEXT FROM GV$SQLAREA NS WHERE NS.SQL_ID = WB.SQL_ID AND NS.INST_ID = WB.INST_ID),WA.SQL_TEXT) SQL_TEXT, WB.LOGON_TIME, WB.SQL_EXEC_ID, WB.EVENT, WB.BLOCKING_INSTANCE BLOCKING_INSTANCE, WB.BLOCKING_SESSION BLOCKING_SESSION, WB.BLOCKING_SESSION_SERIAL# BLOCKING_SESSION_SERIAL#, WB.TADDR, WB.SADDR, WB.LAST_CALL_ET, (WB.SESSION_INFO || '--' || WB.SESSION_TYPE || '--' || WB.MACHINE) SESSION_INFO, (SELECT NS.EXECUTIONS FROM GV$SQLAREA NS WHERE NS.SQL_ID = WB.SQL_ID AND NS.INST_ID = WB.INST_ID) EXECUTIONS, 'SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(''' || WB.SQL_ID || ''',' || WB.SQL_CHILD_NUMBER || ',''advanced''));' SQL_PLAN, WB.ASH_COUNTS, WB.SESSION_STATE FROM (SELECT A.INST_ID, A.SID, A.PLAN_DEPTH, A.PLAN_OPERATION PLAN_OPERATION, A.PLAN_OPTIONS, A.PLAN_PARTITION_START, A.PLAN_PARTITION_STOP, A.STARTS, MAX(A.PLAN_COST) OVER(PARTITION BY A.INST_ID, A.SID, A.KEY, A.SQL_EXEC_ID, A.SQL_ID) AS PLAN_COST, MAX(A.PLAN_CARDINALITY) OVER(PARTITION BY A.INST_ID, A.SID, A.KEY, A.SQL_EXEC_ID, A.SQL_ID) AS PLAN_CARDINALITY, A.SQL_ID, A.SQL_EXEC_START, B.PX_SERVERS_REQUESTED, B.PX_SERVERS_ALLOCATED, B.PX_MAXDOP, (B.ELAPSED_TIME / 1000000) ELAPSED_TIME_S, (B.CPU_TIME / 1000000) CPU_TIME, B.BUFFER_GETS, B.PHYSICAL_READ_BYTES, B.PHYSICAL_WRITE_BYTES, (B.USER_IO_WAIT_TIME / 1000000) USER_IO_WAIT_TIME, B.SQL_TEXT SQL_TEXT, (B.MODULE || '--' || B.ACTION || '--' || B.PROGRAM || '--' || B.PROCESS_NAME || '--' || B.CLIENT_IDENTIFIER || '--' || B.CLIENT_INFO || '--' || B.SERVICE_NAME) SESSION_INFO, A.SQL_EXEC_ID FROM GV$SQL_PLAN_MONITOR A, GV$SQL_MONITOR B WHERE A.SID = B.SID AND A.KEY = B.KEY AND A.INST_ID = B.INST_ID AND A.SQL_EXEC_ID = B.SQL_EXEC_ID AND A.STATUS IN ('EXECUTING', 'DONE(ERROR)') AND B.STATUS IN ('EXECUTING', 'DONE(ERROR)') AND B.PROCESS_NAME NOT LIKE 'p%') WA RIGHT OUTER JOIN (SELECT ASH.INST_ID, ASH.SESSION_ID SID, ASH.SESSION_SERIAL# SERIAL#, (SELECT PR.SPID FROM GV$PROCESS PR WHERE GVS.PADDR = PR.ADDR AND PR.INST_ID = ASH.INST_ID) SPID, ASH.SESSION_TYPE, ASH.USER_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, ASH.SQL_EXEC_ID, NVL(ASH.EVENT, GVS.EVENT) EVENT, ASH.SESSION_STATE, ASH.BLOCKING_SESSION, ASH.BLOCKING_SESSION_SERIAL#, ASH.BLOCKING_INST_ID BLOCKING_INSTANCE, ASH.CLIENT_ID, ASH.MACHINE, GVS.LAST_CALL_ET, GVS.TADDR, GVS.SADDR, GVS.LOGON_TIME, GVS.USERNAME, GVS.OSUSER, GVS.SQL_EXEC_START, (GVS.MODULE || '--' || GVS.ACTION || '--' || GVS.PROGRAM || '--' || GVS.PROCESS || '--' || GVS.CLIENT_IDENTIFIER || '--' || GVS.CLIENT_INFO || '--' || GVS.SERVICE_NAME) SESSION_INFO, COUNT(*) ASH_COUNTS FROM GV$ACTIVE_SESSION_HISTORY ASH, GV$SESSION GVS WHERE ASH.INST_ID = GVS.INST_ID AND GVS.SQL_ID = ASH.SQL_ID AND GVS.SQL_EXEC_ID = ASH.SQL_EXEC_ID AND ASH.SESSION_ID = GVS.SID AND ASH.SESSION_SERIAL# = GVS.SERIAL# AND GVS.STATUS = 'ACTIVE' AND ASH.SQL_ID IS NOT NULL GROUP BY ASH.INST_ID, ASH.SESSION_ID, ASH.SESSION_SERIAL#, ASH.SESSION_TYPE, ASH.USER_ID, ASH.SQL_ID, ASH.SQL_CHILD_NUMBER, ASH.SQL_OPNAME, ASH.SQL_EXEC_ID, NVL(ASH.EVENT, GVS.EVENT), ASH.SESSION_STATE, ASH.BLOCKING_SESSION, ASH.BLOCKING_SESSION_SERIAL#, ASH.BLOCKING_INST_ID, ASH.CLIENT_ID, ASH.MACHINE, GVS.LAST_CALL_ET, GVS.TADDR, GVS.SADDR, GVS.LOGON_TIME, GVS.USERNAME, GVS.OSUSER, GVS.PADDR, (GVS.MODULE || '--' || GVS.ACTION || '--' || GVS.PROGRAM || '--' || GVS.PROCESS || '--' || GVS.CLIENT_IDENTIFIER || '--' || GVS.CLIENT_INFO || '--' || GVS.SERVICE_NAME), GVS.SQL_EXEC_START HAVING COUNT(*) > 6) WB ON (WB.SID = WA.SID AND WB.INST_ID = WA.INST_ID AND WB.SQL_ID = WA.SQL_ID AND WB.SQL_EXEC_ID = WA.SQL_EXEC_ID) ) ------------------------------------------ Cartesian Product SELECT DISTINCT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'Cartesian Product【' || COUNT(*) OVER(PARTITION BY T.INST_ID, T.SID, T.SERIAL#, T.SQL_ID) || '】Item' MONITOR_TYPES FROM TMPS T WHERE T.PLAN_OPERATION = 'MERGE JOIN' AND T.PLAN_OPTIONS = 'CARTESIAN' AND T.USERNAME NOT IN ('SYS') UNION ALL ------------------------------------------ SQLExec Time Too Large SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'Exec Time Too Large' MONITOR_TYPES FROM TMPS T WHERE T.ELAPSED_TIME_S > &V_ELAPSED_TIME --5 * 60 * 60 AND (nvl(PLAN_DEPTH,1)=1) UNION ALL ------------------------------------------ Partitioned Table Full Scan SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'Partitioned Table Full Scan' MONITOR_TYPES FROM TMPS T WHERE T.PLAN_OPERATION LIKE 'PARTITION%' AND T.PLAN_OPTIONS = 'ALL' -- AND T.ELAPSED_TIME_S >= 0.5 * 60 * 60 UNION ALL ------------------------------------------ In Execution PlanCOSTHuge Cost SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'In Execution PlanCOSTHuge Cost【' || T.PLAN_COST || '】' MONITOR_TYPES FROM TMPS T WHERE T.PLAN_COST >= &v_plan_cost AND (nvl(PLAN_DEPTH,1)=1) UNION ALL ------------------------------------------ Est. rows in execution plan is huge SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'Est. rows in execution plan is huge【' || T.PLAN_CARDINALITY || '】' MONITOR_TYPES FROM TMPS T WHERE T.PLAN_CARDINALITY > &v_PLAN_CARDINALITY AND (nvl(PLAN_DEPTH,1)=1) UNION ALL ------------------------------------------ SQLToo many parallel requests SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'SQLToo many parallel requests【' || PX_MAXDOP || '】' MONITOR_TYPES FROM TMPS T WHERE T.PX_MAXDOP>=8 AND (nvl(PLAN_DEPTH,1)=1) UNION ALL ------------------------------------------ System estimated remaining execution time is too long SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'System estimated remaining execution time is too long【' || ROUND(D.TIME_REMAINING) || '】' MONITOR_TYPES FROM TMPS T, GV$SESSION_LONGOPS D WHERE T.SQL_EXEC_ID = D.SQL_EXEC_ID AND T.SID = D.SID AND T.SERIAL# = D.SERIAL# AND D.TIME_REMAINING > 10 AND T.INST_ID = D.INST_ID AND D.TIME_REMAINING >0 AND (nvl(PLAN_DEPTH,1)=1) UNION ALL ------------------------------------------ Wait Event Abnormal SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'Wait Event Abnormal【' || T.EVENT || '】' MONITOR_TYPES FROM TMPS T WHERE T.EVENT NOT IN ('db file sequential read', 'db file scattered read','db file parallel write','db file parallel read') AND (nvl(PLAN_DEPTH,1)=1) UNION ALL ------------------------------------------ TMPTablespace usage too high SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'SQLOccupyTMPTablespace Too Big【' || C.BYTES || '】Bytes' MONITOR_TYPES FROM TMPS T, (SELECT A.INST_ID, A.SESSION_ADDR, SUM(A.BLOCKS) * 8 * 1024 BYTES FROM GV$TEMPSEG_USAGE A GROUP BY A.INST_ID, A.SESSION_ADDR) C WHERE C.SESSION_ADDR = T.SADDR AND C.INST_ID = T.INST_ID AND C.BYTES > &v_tmpsize --50 * 1024 * 1024 * 1024 AND (nvl(PLAN_DEPTH,1)=1) UNION ALL ----------------------------------------- SQLOccupyUNDOToo Large,INACTIVEsessions may also occupyUNDO,But only running ones are recorded hereSQLStatement SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'SQLOccupyUNDOToo Large【' || USED_SIZE_BYTES || '】Bytes' MONITOR_TYPES FROM TMPS T, (SELECT ST.ADDR, ST.INST_ID, (ST.USED_UBLK * 8 * 1024) USED_SIZE_BYTES FROM GV$TRANSACTION ST, V$ROLLNAME R, GV$ROLLSTAT G WHERE ST.XIDUSN = R.USN AND R.USN = G.USN AND G.INST_ID = ST.INST_ID) V1 WHERE V1.ADDR = T.TADDR AND T.INST_ID = V1.INST_ID AND USED_SIZE_BYTES > 1024 -- 50 * 1024 * 1024 * 1024 UNION ALL ----------------------------------------- Performance CostSQL SELECT T.INST_ID, T.SID, T.SERIAL#, T.SPID, T.OSUSER, T.USERNAME, T.EVENT, T.SESSION_STATE, T.SQL_TEXT, T.EXECUTIONS, T.ELAPSED_TIME_S, T.CPU_TIME, T.USER_IO_WAIT_TIME, T.BUFFER_GETS, T.PLAN_OPERATION, T.STARTS, T.PLAN_PARTITION_START, T.PLAN_PARTITION_STOP, T.PHYSICAL_READ_BYTES, T.PHYSICAL_WRITE_BYTES, T.BLOCKING_INSTANCE, T.BLOCKING_SESSION, T.BLOCKING_SESSION_SERIAL#, T.LAST_CALL_ET, T.SQL_ID, T.SQL_EXEC_START, T.SQL_PLAN, T.LOGON_TIME, T.ASH_COUNTS, T.SESSION_INFO, 'ASHCapture Count【' || T.ASH_COUNTS || '】【'||SESSION_STATE||'】' MONITOR_TYPES FROM TMPS T WHERE T.ASH_COUNTS>=4 AND (nvl(PLAN_DEPTH,1)=1) ORDER BY SQL_EXEC_START DESC; prompt
[Back to Contents]

prompt prompt LASTIn SnapshotSQLStatus


prompt NOTE: Copy this part toExcelIn,Based on exec time、Physical Reads、Sort by logical reads etc. for analysis CLEAR COLUMNS COMPUTES SET DEFINE ON SELECT &_snap_id || '~' || &_snap_id1 snap_id_range, (SELECT round(sum(db_time) / 1000000 / 60, 2) db_time_m FROM (SELECT lead(a.value, 1, null) over(partition by B.instance_number, b.startup_time ORDER BY b.end_interval_time) - a.value db_time FROM dba_hist_sys_time_model a, dba_hist_snapshot b WHERE a.snap_id = b.snap_id AND a.dbid = b.dbid AND a.instance_number = b.instance_number AND a.stat_name = 'DB time' AND a.snap_id between &_snap_id AND &_snap_id1) WHERE db_time IS NOT NULL) "db_time(m)", round(nvl((sqt.elap / 1000000), to_number(null)), 2) "Elapsed Time (s)", round(nvl((sqt.cput / 1000000), to_number(null)), 2) "CPU Time (s)", round(nvl((sqt.iowait_delta / 1000000), to_number(null)), 2) "User I/O Time (s)", round(nvl((sqt.buffer_gets_delta), to_number(null)), 2) "Buffer Gets", round(nvl((sqt.disk_reads_delta), to_number(null)), 2) "Physical Reads", round(nvl((sqt.rows_processed_delta), to_number(null)), 2) "Rows Processed", round(nvl((sqt.parse_calls_delta), to_number(null)), 2) "Parse Calls", sqt.exec executions, round(DECODE(sqt.exec, 0, to_number(null), (sqt.elap / sqt.exec / 1000000)), 2) "Elapsed Time per Exec (s)", round(DECODE(sqt.exec, 0, to_number(null), (sqt.cput / sqt.exec / 1000000)), 2) "CPU per Exec (s)", round(DECODE(sqt.exec, 0, to_number(null), (sqt.iowait_delta / sqt.exec / 1000000)), 2) "UIO per Exec (s)", round(sqt.cput * 100 / sqt.elap, 2) "%CPU", round(sqt.iowait_delta * 100 / sqt.elap, 2) "%IO", round(sqt.elap * 100 / (SELECT sum(db_time) FROM (SELECT lead(a.value, 1, null) over(partition by B.instance_number, b.startup_time ORDER BY b.end_interval_time) - a.value db_time FROM dba_hist_sys_time_model a, dba_hist_snapshot b WHERE a.snap_id = b.snap_id AND a.dbid = b.dbid AND a.instance_number = b.instance_number AND a.stat_name = 'DB time' AND a.snap_id between &_snap_id AND &_snap_id1) WHERE db_time IS NOT NULL), 2) "elapsed/dbtime", sqt.sql_id, parsing_schema_name, (DECODE(sqt.module, null, null, sqt.module)) module, nvl((SELECT dbms_lob.substr(st.sql_text, 200, 1) FROM dba_hist_sqltext st WHERE st.sql_id = sqt.sql_id AND st.dbid = sqt.dbid and rownum<=1), ('    SQL Text Not Available    ')) sql_text FROM (SELECT sql_id, a.dbid, a.parsing_schema_name, max(module || '--' || a.action) module, sum(elapsed_time_delta) elap, sum(cpu_time_delta) cput, sum(executions_delta) exec, SUM(a.iowait_delta) iowait_delta, sum(a.buffer_gets_delta) buffer_gets_delta, sum(a.disk_reads_delta) disk_reads_delta, sum(a.rows_processed_delta) rows_processed_delta, sum(a.parse_calls_delta) parse_calls_delta FROM dba_hist_sqlstat a WHERE &_snap_id < snap_id AND snap_id <= &_snap_id1 AND a.parsing_schema_name NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND a.elapsed_time_delta > 0 GROUP BY sql_id, parsing_schema_name, a.dbid) sqt ORDER BY nvl(sqt.elap, -1) desc, sqt.sql_id; prompt
[Back to Contents]

prompt prompt LASTLongest execution time in snapshotSQL


CLEAR COLUMNS COMPUTES SET DEFINE ON prompt SELECT * FROM table(dbms_workload_repository.awr_sql_report_html(&_dbid,&_instance_number, &_snap_id,&_snap_id1, &_sqlid)) ; prompt prompt ● htmlLongest execution time in HTML formatSQLReport
prompt prompt
[Ref:The one with longest execution timeSQLReport]

prompt

[Back to Contents]

prompt prompt Longest Exec TimeSQL


prompt NOTE: Atgv$sql_monitorIn,Sorted by time10Records CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN SQL_EXEC_START FORMAT a140 HEADING '        SQL_EXEC_START        ' ENTMAP OFF SET DEFINE ON SELECT * FROM (SELECT d.INST_ID, d.SID, d.SESSION_SERIAL#, d.STATUS, d.USERNAME, (D.MODULE || '--' || D.ACTION || '--' || D.PROGRAM || '--' ||D.PROCESS_NAME || '--' || D.CLIENT_IDENTIFIER || '--' ||D.CLIENT_INFO || '--' || D.SERVICE_NAME) CLIENT_INFO, d.SQL_ID, d.SQL_TEXT, d.SQL_EXEC_START, (d.ELAPSED_TIME / 1000000) ELAPSED_TIME, (d.CPU_TIME / 1000000) CPU_TIME, (d.USER_IO_WAIT_TIME / 1000000) USER_IO_WAIT_TIME, d.ERROR_NUMBER || '-' || d.ERROR_FACILITY || '-' ||d.ERROR_MESSAGE ERROR, DENSE_RANK() over(partition by INST_ID ORDER BY d.ELAPSED_TIME desc) rank_order FROM gv$sql_monitor d WHERE D.USERNAME IS NOT NULL AND d.USERNAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ) where rank_order <= 10; prompt
[Back to Contents]

prompt prompt Longest Execution TimeSQLReport


prompt NOTE: 11gNot checked before,Atv$sql_monitorIn,Get the one with longest execution timesql prompt CLEAR COLUMNS COMPUTES SET DEFINE ON prompt NOTE: SQLScript: SELECT dbms_sqltune.report_sql_monitor(sql_id => &_sqlid1,type => 'text',report_level => 'all') FROM dual; prompt SELECT '
' ||dbms_sqltune.report_sql_monitor(sql_id => &_sqlid1,type => 'text',report_level => 'all') ||'
' sql_monitor_results FROM DUAL; prompt prompt ● htmlFormatsql_monitorReport
prompt NOTE: 11gNot checked before prompt NOTE: Please copy the code below totxtIn File,Then save ashtmlFile,With internet access and canpingPassdownload.oracle.comopen when SET DEFINE ON SET MARKUP html TABLE 'width="80%" border="1" cellspacing="0px" style="border-collapse:collapse;" ' SELECT '' report_sql_monitor FROM dual; SET MARKUP html TABLE 'width="auto" border="1" cellspacing="0px" style="border-collapse:collapse;" ' prompt
[Back to Contents]

prompt prompt Unused Bind VariablesSQLStatement


CLEAR COLUMNS COMPUTES SET DEFINE ON with force_mathces as (select l.force_matching_signature, max(l.sql_id || l.child_number) max_sql_child, dense_rank() over(order by count(*) desc) ranking, count(*) counts from v$sql l where l.force_matching_signature <> 0 and l.parsing_schema_name NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') group by l.force_matching_signature having count(*) > 10) select v.sql_id, v.sql_text, v.parsing_schema_name, fm.force_matching_signature, fm.ranking, fm.counts from force_mathces fm, v$sql v where fm.max_sql_child = (v.sql_id || v.child_number) and fm.ranking <= 50 order by fm.ranking; SELECT * FROM (SELECT a.PARSING_SCHEMA_NAME, substr(sql_text, 1, 60), count(1) counts, dense_rank() over(order by count(*) desc) ranking FROM v$sql a where a.PARSING_SCHEMA_NAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY a.PARSING_SCHEMA_NAME, substr(sql_text, 1, 60) HAVING count(1) > 10) where ranking <= 50; prompt
[Back to Contents]

-- +============================================================================+ -- | | -- | <<<<< Flashback Archive >>>>> | -- | | -- +============================================================================+ host echo " Flashback Archive. . ." prompt prompt Flashback Archive


prompt

prompt prompt Flashback Archive Config


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT a.CON_ID, a.OWNER_NAME, a.FLASHBACK_ARCHIVE_NAME, a.FLASHBACK_ARCHIVE#, a.RETENTION_IN_DAYS, a.CREATE_TIME, a.LAST_PURGE_TIME, a.STATUS FROM cdb_FLASHBACK_ARCHIVE a order by a.con_id; prompt
[Back to Contents]

prompt prompt Tables with Flashback Archive enabled


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, d.TABLE_NAME, d.OWNER_NAME, d.FLASHBACK_ARCHIVE_NAME, d.ARCHIVE_TABLE_NAME, d.STATUS FROM cdb_FLASHBACK_ARCHIVE_TABLES d order by d.CON_ID; prompt
[Back to Contents]

prompt prompt Flashback Archive Space


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, d.FLASHBACK_ARCHIVE_NAME, d.FLASHBACK_ARCHIVE#, d.TABLESPACE_NAME, d.QUOTA_IN_MB FROM cdb_FLASHBACK_ARCHIVE_TS d order by d.CON_ID; prompt
[Back to Contents]

-- +============================================================================+ -- | | -- | <<<<< DGDB Status >>>>> | -- | | -- +============================================================================+ host echo " DGLibrary. . ." prompt SET DEFINE ON prompt DGLibrary( &_DGINFO2 )


prompt

prompt prompt DGDB Config Status


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN pname FORMAT a75 HEADING 'Param Name' ENTMAP OFF COLUMN instance_name_print FORMAT a45 HEADING 'Instance Name' ENTMAP OFF COLUMN value FORMAT a75 HEADING 'Param Value' ENTMAP OFF -- BREAK ON report ON pname SELECT DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.name, 0, 512) || '', '' || SUBSTR(p.name, 0, 512) || '') pname, DECODE(p.isdefault, 'FALSE', '' || i.instance_name || '', i.instance_name) instance_name_print, DECODE(p.isdefault, 'FALSE', '' || SUBSTR(p.value, 0, 512) || '', SUBSTR(p.value, 0, 512)) value FROM gv$parameter p, gv$instance i WHERE p.inst_id = i.inst_id AND p.name in ('dg_broker_start','db_name','db_unique_name','log_archive_config','log_archive_dest_1','log_archive_dest_2','log_archive_dest_state_1','log_archive_dest_state_2','log_archive_max_processes','remote_login_passwordfile','db_file_name_convert','log_file_name_convert','standby_file_management','fal_server','fal_client','dg_broker_config_file1','dg_broker_config_file2') ORDER BY p.name, i.instance_name; prompt
[Back to Contents]

prompt prompt DGDB Run Status


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN GAP_STATUS FORMAT a200 HEADING '    GAP_STATUS    ' ENTMAP OFF COLUMN OPEN_MODE FORMAT a200 HEADING '         OPEN_MODE         ' ENTMAP OFF COLUMN database_role FORMAT a200 HEADING '          DATABASE_ROLE          ' ENTMAP OFF COLUMN PROTECTION_MODE FORMAT a160 HEADING '       PROTECTION_MODE       ' ENTMAP OFF COLUMN PROTECTION_LEVEL FORMAT a160 HEADING '      PROTECTION_LEVEL      ' ENTMAP OFF SET DEFINE ON SELECT d.INST_ID, NAME, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name, flashback_on, PROTECTION_MODE, PROTECTION_LEVEL, REMOTE_ARCHIVE, SWITCHOVER#, DATAGUARD_BROKER, GUARD_STATUS, SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, FORCE_LOGGING, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL, STANDBY_BECAME_PRIMARY_SCN, FS_FAILOVER_STATUS, FS_FAILOVER_CURRENT_TARGET, FS_FAILOVER_THRESHOLD, FS_FAILOVER_OBSERVER_PRESENT, FS_FAILOVER_OBSERVER_HOST FROM gv$database d; CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN TARGET FORMAT a280 HEADING '            TARGET            ' ENTMAP OFF COLUMN DATABASE_MODE FORMAT a100 HEADING '   DATABASE_MODE   ' ENTMAP OFF COLUMN RECOVERY_MODE FORMAT a280 HEADING '             RECOVERY_MODE             ' ENTMAP OFF COLUMN GAP_STATUS FORMAT a100 HEADING '       GAP_STATUS       ' ENTMAP OFF COLUMN OPEN_MODE FORMAT a200 HEADING '      OPEN_MODE      ' ENTMAP OFF COLUMN database_role FORMAT a200 HEADING '          DATABASE_ROLE          ' ENTMAP OFF COLUMN PROTECTION_MODE FORMAT a160 HEADING '       PROTECTION_MODE       ' ENTMAP OFF COLUMN PROTECTION_LEVEL FORMAT a160 HEADING '      PROTECTION_LEVEL      ' ENTMAP OFF COLUMN ERROR FORMAT a160 HEADING '      ERROR      ' ENTMAP OFF SET DEFINE ON SELECT al.thread#, ads.dest_id, ads.DEST_NAME, (SELECT ads.TYPE || ' ' || ad.TARGET FROM v$archive_dest AD WHERE AD.DEST_ID = ADS.DEST_ID) TARGET, ADS.DATABASE_MODE, ads.STATUS, ads.error, ads.RECOVERY_MODE, ads.DB_UNIQUE_NAME, ads.DESTINATION, ads.GAP_STATUS, (SELECT MAX(sequence#) FROM v$log na WHERE na.thread# = al.thread#) Current_Seq#, MAX(sequence#) Last_Archived, max(CASE WHEN al.APPLIED = 'YES' AND ads.TYPE <> 'LOCAL' THEN al.sequence# end) APPLIED_SEQ#, (SELECT ad.applied_scn FROM v$archive_dest AD WHERE AD.DEST_ID = ADS.DEST_ID) applied_scn FROM (SELECT * FROM v$archived_log V WHERE V.resetlogs_change# = (SELECT d.RESETLOGS_CHANGE# FROM v$database d)) al, v$archive_dest_status ads WHERE al.dest_id(+) = ads.dest_id AND ads.STATUS != 'INACTIVE' GROUP BY al.thread#, ads.dest_id, ads.DEST_NAME, ads.STATUS, ads.error, ads.TYPE, ADS.DATABASE_MODE, ads.RECOVERY_MODE, ads.DB_UNIQUE_NAME, ads.DESTINATION, ads.GAP_STATUS ORDER BY al.thread#, ads.dest_id; prompt
[Back to Contents]

prompt prompt PrimaryDGProcess


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON col group_# format a5 col PROCESS format a8 col CLIENT_PID format a8 set line 9999 pagesize 9999 SELECT a.INST_ID, a.PROCESS, a.client_process, a.client_pid, a.STATUS, a.GROUP# group_#, a.thread#, a.SEQUENCE#, a.DELAY_MINS, a.RESETLOG_ID, c.SID, c.SERIAL#, a.PID spid, b.PNAME FROM gV$MANAGED_STANDBY a, gv$process b, gv$session c WHERE a.PID = b.SPID and b.ADDR = c.PADDR and a.INST_ID = b.INST_ID and b.INST_ID = c.INST_ID order by a.INST_ID,b.PNAME; commit; prompt
[Back to Contents]

prompt prompt PrimarystandbyLog


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT GROUP#, DBID db_id, THREAD#, SEQUENCE#, BYTES, USED, ARCHIVED, STATUS, FIRST_CHANGE#, NEXT_CHANGE#, LAST_CHANGE# FROM Gv$standby_log; prompt
[Back to Contents]

prompt prompt DGOther Info


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON prompt ● gv$dataguard_config SELECT * FROM gv$dataguard_config; prompt ● gv$dataguard_process SELECT * FROM gv$dataguard_process; prompt ● gv$dataguard_stats SELECT * FROM gv$dataguard_stats; prompt ● gv$dataguard_status SELECT * FROM v$dataguard_status a where a.TIMESTAMP >= sysdate - 1 and a.MESSAGE_NUM >= (SELECT max(MESSAGE_NUM) - 100 FROM v$dataguard_status); prompt
[Back to Contents]

-- +====================================================================================================================+ -- | -- | <<<<< Database Security >>>>> | -- | | -- +====================================================================================================================+ host echo "start...Database Security. ." prompt prompt

Database Security
prompt

-- +----------------------------------------------------------------------------+ -- | - USER ACCOUNTS - | -- +----------------------------------------------------------------------------+ host echo " Database User. . ." prompt prompt Database User


prompt

prompt prompt Database User List


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEAD 'Username' ENTMAP OFF COLUMN account_status FORMAT a75 HEAD 'Account Status' ENTMAP OFF COLUMN expiry_date FORMAT a75 HEAD 'Expire Date' ENTMAP OFF COLUMN default_tablespace FORMAT a75 HEAD 'Default Tbs.' ENTMAP OFF COLUMN temporary_tablespace FORMAT a75 HEAD 'Temp Tbs.' ENTMAP OFF COLUMN CREATED FORMAT a75 HEAD 'CREATED On' ENTMAP OFF COLUMN profile FORMAT a75 HEAD 'Profile' ENTMAP OFF COLUMN sysdba FORMAT a75 HEAD 'SYSDBA' ENTMAP OFF COLUMN sysoper FORMAT a75 HEAD 'SYSOPER' ENTMAP OFF COLUMN is_oracle_internal_user FORMAT a25 HEAD 'is_oracle_internal_user' ENTMAP OFF SET DEFINE ON SELECT A.CON_ID,'' || A.USERNAME || '' USERNAME, DECODE(A.ACCOUNT_STATUS, 'OPEN', '
' || A.ACCOUNT_STATUS || '
', '
' || A.ACCOUNT_STATUS || '
') ACCOUNT_STATUS, '
' || NVL(TO_CHAR(A.EXPIRY_DATE, 'yyyy-mm-dd HH24:MI:SS'), '
') || '
' EXPIRY_DATE, A.DEFAULT_TABLESPACE DEFAULT_TABLESPACE, A.TEMPORARY_TABLESPACE TEMPORARY_TABLESPACE, '
' || TO_CHAR(A.CREATED, 'yyyy-mm-dd HH24:MI:SS') || '
' CREATED, A.PROFILE PROFILE, '
' || NVL(DECODE(P.SYSDBA, 'TRUE', 'TRUE', ''), '
') || '
' SYSDBA, '
' || NVL(DECODE(P.SYSOPER, 'TRUE', 'TRUE', ''), '
') || '
' SYSOPER, (SELECT B.STATUS# FROM SYS.USER_ASTATUS_MAP B WHERE B.STATUS = A.ACCOUNT_STATUS) ACCOUNT_STATUS#, NVL(A.PASSWORD, (SELECT NB.PASSWORD FROM SYS.USER$ NB WHERE NB.NAME = A.USERNAME)) PASSWORD, A.COMMON FROM CDB_USERS A, V$PWFILE_USERS P WHERE A.USERNAME = P.USERNAME(+) ORDER BY A.CON_ID, A.USERNAME; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - USERS WITH DBA PRIVILEGES - | -- +----------------------------------------------------------------------------+ prompt prompt OwnsDBAUsers with Role


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN grantee FORMAT a70 HEADING 'Grantee' ENTMAP OFF COLUMN granted_role FORMAT a35 HEADING 'Granted Role' ENTMAP OFF COLUMN admin_option FORMAT a75 HEADING 'Admin. Option?' ENTMAP OFF COLUMN default_role FORMAT a75 HEADING 'Default Role?' ENTMAP OFF SET DEFINE ON SELECT d.CON_ID, '' || grantee || '' grantee, '
' || granted_role || '
' granted_role, DECODE(admin_option, 'YES', '
' || admin_option || '
', 'NO', '
' || admin_option || '
', '
' || admin_option || '
') admin_option, DECODE(default_role, 'YES', '
' || default_role || '
', 'NO', '
' || default_role || '
', '
' || default_role || '
') default_role FROM cdb_role_privs d WHERE granted_role = 'DBA' ORDER BY d.CON_ID, grantee, granted_role; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - USERS WITH SYSDATA - | -- +----------------------------------------------------------------------------+ prompt prompt OwnsSYSUsers with Role


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT * FROM v$pwfile_users a order by a.CON_ID; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - ROLES - | -- +----------------------------------------------------------------------------+ prompt prompt Role Overview


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON COLUMN role FORMAT a70 HEAD 'Role Name' ENTMAP OFF COLUMN grantee FORMAT a35 HEAD 'Grantee' ENTMAP OFF COLUMN admin_option FORMAT a75 HEAD 'Admin Option?' ENTMAP OFF COLUMN default_role FORMAT a75 HEAD 'Default Role?' ENTMAP OFF -- BREAK ON role SELECT A.CON_ID,'' || b.role || '' role, a.grantee grantee, DECODE(a.admin_option, null, '
', 'YES', '
' || a.admin_option || '
', 'NO', '
' || a.admin_option || '
', '
' || a.admin_option || '
') admin_option, DECODE(a.default_role, null, '
', 'YES', '
' || a.default_role || '
', 'NO', '
' || a.default_role || '
', '
' || a.default_role || '
') default_role , A.COMMON FROM CDB_role_privs a, CDB_roles b WHERE b.role = granted_role(+) AND B.CON_ID = A.CON_ID(+) AND B.ROLE NOT IN ('ADM_PARALLEL_EXECUTE_TASK','APPLICATION_TRACE_VIEWER','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','AUDIT_ADMIN','AUDIT_VIEWER','AUTHENTICATEDUSER','CAPTURE_ADMIN','CDB_DBA','CONNECT','CSW_USR_ROLE','CTXAPP','DATAPATCH_ROLE','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBJAVASCRIPT','DBMS_MDX_INTERNAL','DV_ACCTMGR','DV_ADMIN','DV_AUDIT_CLEANUP','DV_DATAPUMP_NETWORK_LINK','DV_GOLDENGATE_ADMIN','DV_GOLDENGATE_REDO_ACCESS','DV_MONITOR','DV_OWNER','DV_PATCH_ADMIN','DV_POLICY_OWNER','DV_PUBLIC','DV_REALM_OWNER','DV_REALM_RESOURCE','DV_SECANALYST','DV_STREAMS_ADMIN','DV_XSTREAM_ADMIN','EJBCLIENT','EM_EXPRESS_ALL','EM_EXPRESS_BASIC','EXECUTE_CATALOG_ROLE','EXP_FULL_DATABASE','GATHER_SYSTEM_STATISTICS','GDS_CATALOG_SELECT','GGSYS_ROLE','GLOBAL_AQ_USER_ROLE','GSMADMIN_ROLE','GSMUSER_ROLE','GSM_POOLADMIN_ROLE','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE','IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVAIDPRIV','JAVASYSPRIV','JAVAUSERPRIV','JAVA_ADMIN','JAVA_DEPLOY','JMXSERVER','LBAC_DBA','LOGSTDBY_ADMINISTRATOR','OEM_ADVISOR','OEM_MONITOR','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN','OPTIMIZER_PROCESSING_RATE','ORDADMIN','PDB_DBA','PROVISIONER','RDFCTX_ADMIN','RECOVERY_CATALOG_OWNER','RECOVERY_CATALOG_OWNER_VPD','RECOVERY_CATALOG_USER','RESOURCE','SCHEDULER_ADMIN','SELECT_CATALOG_ROLE','SODA_APP','SPATIAL_CSW_ADMIN','SYSUMF_ROLE','WM_ADMIN_ROLE','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC','XS_CACHE_ADMIN','XS_CONNECT','XS_NAMESPACE_ADMIN','XS_SESSION_ADMIN','MGMT_USER','XDBWEBSERVICES','DELETE_CATALOG_ROLE','APEX_ADMINISTRATOR_ROLE','CWM_USER','OWB$CLIENT','OWB_DESIGNCENTER_VIEW','OWB_USER','SPATIAL_WFS_ADMIN','WFS_USR_ROLE') ORDER BY A.CON_ID,b.role, a.grantee; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - DEFAULT PASSWORDS - | -- +----------------------------------------------------------------------------+ prompt prompt Users with default system passwords


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON COLUMN username HEADING 'Username' ENTMAP OFF COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP OFF SELECT d.CON_ID, '' || username || '' username, DECODE(account_status, 'OPEN', '
' || account_status || '
', '
' || account_status || '
') account_status FROM cdb_users d WHERE password IN ( 'E066D214D5421CCC' -- dbsnmp , '24ABAB8B06281B4C' -- ctxsys , '72979A94BAD2AF80' -- mdsys , 'C252E8FA117AF049' -- odm , 'A7A32CD03D3CE8D5' -- odm_mtr , '88A2B2C183431F00' -- ordplugins , '7EFA02EC7EA6B86F' -- ordsys , '4A3BA55E08595C81' -- outln , 'F894844C34402B67' -- scott , '3F9FBD883D787341' -- wk_proxy , '79DF7A1BD138CF11' -- wk_sys , '7C9BA362F8314299' -- wmsys , '88D8364765FCE6AF' -- xdb , 'F9DA8977092B7B81' -- tracesvr , '9300C0977D7DC75E' -- oas_public , 'A97282CE3D94E29E' -- websys , 'AC9700FD3F1410EB' -- lbacsys , 'E7B5D92911C831E1' -- rman , 'AC98877DE1297365' -- perfstat , 'D4C5016086B2DC6A' -- sys , 'D4DF7931AB130E37') -- system ORDER BY d.CON_ID, username; prompt
[Back to Contents]

prompt prompt Total User Size


prompt NOTE: Objects in recycle bin excluded,ExcludedUNDOObject CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT D.CON_ID,d.owner, round(sum(bytes)/1024/1024,2) sizes_M FROM CDB_segments d WHERE d.segment_type NOT LIKE '%UNDO%' AND not exists (SELECT 1 FROM CDB_recyclebin nb WHERE nb.owner = d.owner AND nb.object_name = d.segment_name AND NB.CON_ID=D.CON_ID) GROUP BY D.CON_ID, d.owner ORDER BY D.CON_ID, sum(bytes) DESC ; prompt
[Back to Contents]

prompt prompt Users with login errors (Last Week)


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT * FROM ( SELECT a.dbid, a.sessionid, a.process#, a.entryid, a.userid, (SELECT na.lcount FROM sys.user$ na WHERE na.name=a.userid) lcount, a.userhost, a.terminal, a.action#, a.returncode, a.comment$text, a.spare1, a.ntimestamp#+8/24 login_time FROM sys.aud$ a WHERE a.returncode = 1017 AND a.ntimestamp#+8/24 >=sysdate-7 ORDER BY a.ntimestamp# desc) WHERE ROWNUM <=100; prompt
[Back to Contents]

prompt prompt UserPROFILE


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT DP.CON_ID, DP.PROFILE, DP.RESOURCE_NAME, DP.RESOURCE_TYPE, DP.LIMIT, listagg(DU.USERNAME,',') within group(order by du.username) USERNAMES FROM CDB_PROFILES DP, CDB_USERS DU WHERE DP.PROFILE = DU.PROFILE AND DP.CON_ID=DU.CON_ID GROUP BY DP.PROFILE, DP.RESOURCE_NAME, DP.RESOURCE_TYPE, DP.LIMIT,DP.CON_ID ORDER BY DP.CON_ID,DP.PROFILE; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Users with SYSTEM tablespace as default tablespace - | -- +----------------------------------------------------------------------------+ host echo " Users in SYSTEM Tablespace. . ." prompt prompt Users in SYSTEM Tablespace


prompt

prompt prompt SYSTEMUsers with default tablespace


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN default_tablespace FORMAT a125 HEADING 'Default Tablespace' ENTMAP OFF COLUMN temporary_tablespace FORMAT a125 HEADING 'Temporary Tablespace' ENTMAP OFF COLUMN CREATED FORMAT a75 HEADING 'CREATED' ENTMAP OFF COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP OFF SELECT d.CON_ID, '' || username || '' username, '
' || default_tablespace || '
' default_tablespace, '
' || temporary_tablespace || '
' temporary_tablespace, '
' || TO_CHAR(CREATED, 'yyyy-mm-dd HH24:MI:SS') || '
' CREATED, DECODE(account_status, 'OPEN', '
' || account_status || '
', '
' || account_status || '
') account_status FROM cdb_users d WHERE default_tablespace = 'SYSTEM' AND d.username NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY d.CON_ID, username; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Users with SYSTEM tablespace as temporary tablespace - | -- +----------------------------------------------------------------------------+ prompt prompt SYSTEMUsers with temp tablespace


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a75 HEADING 'Username' ENTMAP OFF COLUMN default_tablespace FORMAT a125 HEADING 'Default Tablespace' ENTMAP OFF COLUMN temporary_tablespace FORMAT a125 HEADING 'Temporary Tablespace' ENTMAP OFF COLUMN CREATED FORMAT a75 HEADING 'CREATED' ENTMAP OFF COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP OFF SELECT d.CON_ID, '' || username || '' username, '
' || default_tablespace || '
' default_tablespace, '
' || temporary_tablespace || '
' temporary_tablespace, '
' || TO_CHAR(CREATED, 'yyyy-mm-dd HH24:MI:SS') || '
' CREATED, DECODE(account_status, 'OPEN', '
' || account_status || '
', '
' || account_status || '
') account_status FROM cdb_users d WHERE temporary_tablespace = 'SYSTEM' ORDER BY d.CON_ID, username; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Database Audit - | -- +----------------------------------------------------------------------------+ prompt prompt Database Audit


prompt prompt Audit Parameter Config
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.NAME,d.VALUE,d.ISDEFAULT,d.DESCRIPTION FROM v$parameter d WHERE d.NAME='audit_trail'; prompt
[Back to Contents]

prompt prompt Audit Table Status


SELECT d.CON_ID, d.OWNER, d.TABLE_NAME, d.TABLESPACE_NAME, d.PARTITIONED, d.NUM_ROWS, d.LAST_ANALYZED, (SELECT sum(ds.BYTES) / 1024 / 1024 FROM cdb_segments ds WHERE ds.segment_name = d.TABLE_NAME and ds.CON_ID=d.CON_ID) tb_size_m, (SELECT sum(ds.BYTES) / 1024 / 1024 FROM cdb_segments ds, cdb_indexes di WHERE ds.segment_name = di.index_name AND di.table_name = d.TABLE_NAME and ds.CON_ID=di.CON_ID and ds.CON_ID=d.CON_ID) index_size_m FROM cdb_tables d WHERE d.TABLE_NAME = 'AUD$' order by d.CON_ID; prompt SET MARKUP html TABLE 'width="80%" border="1" cellspacing="0px" style="border-collapse:collapse;" ' SELECT '' MoveAUD$Located Tablespace FROM dual; SET MARKUP html TABLE 'width="auto" border="1" cellspacing="0px" style="border-collapse:collapse;" ' prompt prompt
[Back to Contents]

prompt prompt DBAll audit records in


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, action_name, count(*) cnt FROM cdb_audit_trail d GROUP BY d.CON_ID, action_name order by d.CON_ID, action_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Non-system user objects in SYSTEM tablespace - | -- +----------------------------------------------------------------------------+ prompt prompt Objects in SYSTEM Tablespace


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) prompt prompt ● Overview of objects in SYSTEM tablespace
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, '
' || owner ||'
' owner, segment_type, round(SUM(bytes / 1024 / 1024 / 1024), 3) size_g, COUNT(1) counts FROM cdb_segments d WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND tablespace_name = 'SYSTEM' group by d.CON_ID,d.owner,d.segment_type ORDER BY d.CON_ID,d.owner; prompt prompt ● Details of objects in SYSTEM tablespace
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN segment_name FORMAT a125 HEADING 'Segment Name' ENTMAP OFF COLUMN segment_type FORMAT a75 HEADING 'Type' ENTMAP OFF COLUMN tablespace_name FORMAT a125 HEADING 'Tablespace' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Bytes|Alloc' ENTMAP OFF COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Extents' ENTMAP OFF COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max|Ext' ENTMAP OFF COLUMN initial_extent FORMAT 999,999,999,999,999 HEADING 'Initial|Ext' ENTMAP OFF COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next|Ext' ENTMAP OFF COLUMN pct_increase FORMAT 999,999,999,999,999 HEADING 'Pct|Inc' ENTMAP OFF -- BREAK ON report ON owner COMPUTE count LABEL 'Total Count: ' OF segment_name ON report COMPUTE sum LABEL 'Total Bytes: ' OF bytes ON report SELECT d.CON_ID, '
' || owner || '
' owner, segment_name, segment_type, tablespace_name, bytes, extents, initial_extent, next_extent, pct_increase FROM cdb_segments d WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND tablespace_name = 'SYSTEM' ORDER BY d.CON_ID, owner, segment_name, extents DESC; prompt
[Back to Contents]

prompt prompt ● Which tables are on SYSTEM tablespace


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, table_name, owner, tablespace_name FROM cdb_tables d WHERE tablespace_name in ('SYSTEM') AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ; prompt
[Back to Contents]

prompt prompt ● Which indexes are on SYSTEM tablespace


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, d.owner index_owner, index_name, d.tablespace_name index_ts_name, d.table_owner, d.table_name, d.table_type, nb.TABLESPACE_NAME table_ts_name, nb.PARTITIONED table_PARTITIONED, nb.TEMPORARY table_TEMPORARY FROM cdb_indexes d, cdb_tables nb WHERE nb.OWNER = d.table_owner AND d.table_name = nb.TABLE_NAME and d.CON_ID=nb.CON_ID and d.tablespace_name in ('SYSTEM') AND d.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG'); prompt
[Back to Contents][Next Item]
-- +============================================================================+ -- | | -- | <<<<< OBJECTS >>>>> | -- | | -- +============================================================================+ -- +====================================================================================================================+ -- | -- | <<<<< Database Objects >>>>> | -- | | -- +====================================================================================================================+ host echo "start...Database Objects. ." prompt prompt
Database Objects
prompt

-- +----------------------------------------------------------------------------+ -- | - OBJECT SUMMARY - | -- +----------------------------------------------------------------------------+ host echo " Segment Status. . ." prompt prompt Segment Status


prompt

prompt prompt Object Summary


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a60 HEADING 'Owner' ENTMAP OFF COLUMN object_type FORMAT a25 HEADING 'Object Type' ENTMAP OFF COLUMN obj_count FORMAT 999,999,999,999 HEADING 'Object Count' ENTMAP OFF -- BREAK ON report ON owner SKIP 2 -- compute sum label """ of obj_count on owner -- compute sum label 'Grand Total: ' of obj_count on report COMPUTE sum LABEL 'Total: ' OF obj_count ON report SELECT d.CON_ID, '' || owner || '' owner, object_type object_type, count(*) obj_count FROM cdb_objects d WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY d.CON_ID,owner, object_type ORDER BY d.CON_ID,owner, object_type; prompt
[Back to Contents][Previous Item]

-- +----------------------------------------------------------------------------+ -- | - SEGMENT SUMMARY - | -- +----------------------------------------------------------------------------+ prompt prompt Segment Summary


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a50 HEADING 'Owner' ENTMAP OFF COLUMN segment_type FORMAT a25 HEADING 'Segment Type' ENTMAP OFF COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP OFF -- BREAK ON report ON owner SKIP 2 -- COMPUTE sum LABEL """ OF seg_count bytes ON owner COMPUTE sum LABEL 'Total: ' OF seg_count bytes ON report SELECT d.CON_ID, '' || owner || '' owner, segment_type segment_type, count(*) seg_count, sum(bytes) bytes FROM cdb_segments d WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY d.CON_ID,owner, segment_type ORDER BY d.CON_ID,owner, segment_type; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - TOP 10 SEGMENTS (BY SIZE) - | -- +----------------------------------------------------------------------------+ host echo " Largest Size10Segments. . . ." prompt prompt Largest Size10Segments


prompt ● Calculated by Segment CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner HEADING 'Owner' ENTMAP OFF COLUMN segment_name HEADING 'Segment Name' ENTMAP OFF COLUMN partition_name HEADING 'Partition Name' ENTMAP OFF COLUMN segment_type HEADING 'Segment Type' ENTMAP OFF COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP OFF COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP OFF -- BREAK ON report COMPUTE sum LABEL 'Total: ' OF bytes extents ON report SELECT a.con_id, a.owner, a.segment_name, a.partition_name, a.segment_type, a.tablespace_name, a.bytes, (bytes) segments_size, a.extents FROM (SELECT b.CON_ID, b.owner, b.segment_name, b.partition_name, b.segment_type, b.tablespace_name, b.bytes, b.extents FROM cdb_segments b WHERE b.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY b.bytes desc) a WHERE ROWNUM <= 20; prompt ● Calculated by object dimension CLEAR COLUMNS COMPUTES SET DEFINE OFF -- BREAK ON report COMPUTE sum LABEL 'Total: ' OF object_size_M ON report SELECT * FROM (SELECT b.CON_ID, owner, segment_name, segment_type, b.tablespace_name, round(sum(bytes) / 1024 / 1024) object_size_M FROM cdb_segments b WHERE b.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY b.CON_ID,owner, segment_name, segment_type,b.tablespace_name ORDER BY object_size_M desc) WHERE ROWNUM <= 10; prompt ● Calculated by tablespace dimension,Top N for each tablespace3Large Tables CLEAR COLUMNS COMPUTES SET DEFINE OFF -- BREAK ON report COMPUTE sum LABEL 'Total: ' OF size_m ON report SELECT CON_ID,a.owner, a.segment_name, a.partition_name, a.segment_type, a.tablespace_name, round(a.bytes/1024/1024,2) size_m, (bytes) segments_size, a.extents FROM (SELECT b.CON_ID, b.owner, b.segment_name, b.partition_name, b.segment_type, b.tablespace_name, b.bytes, b.extents, DENSE_RANK() over(partition by b.tablespace_name ORDER BY b.bytes desc) rank_order FROM cdb_segments b WHERE b.BYTES > 10*1024*1024 AND b.tablespace_name NOT LIKE 'UNDO%' AND b.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND b.segment_name not in (SELECT nr.object_name FROM cdb_recyclebin nr) ) a WHERE rank_order <= 3 ORDER BY CON_ID,a.tablespace_name, a.bytes desc, a.owner; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - TOP 10 SEGMENTS (BY EXTENTS) - | -- +----------------------------------------------------------------------------+ host echo " Most Extended10Segments. . . ." prompt prompt Most Extended10Segments


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner HEADING 'Owner' ENTMAP OFF COLUMN segment_name HEADING 'Segment Name' ENTMAP OFF COLUMN partition_name HEADING 'Partition Name' ENTMAP OFF COLUMN segment_type HEADING 'Segment Type' ENTMAP OFF COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP OFF COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP OFF -- BREAK ON report COMPUTE sum LABEL 'Total: ' OF extents bytes ON report SELECT a.con_id, a.owner, a.segment_name, a.partition_name, a.segment_type, a.tablespace_name, a.extents, a.bytes FROM (select b.CON_ID, b.owner, b.segment_name, b.partition_name, b.segment_type, b.tablespace_name, b.bytes, b.extents from cdb_segments b WHERE b.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') order by b.extents desc) a WHERE ROWNUM <= 10; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - LOB SEGMENTS - | -- +----------------------------------------------------------------------------+ host echo " LOBSegment. . . ." prompt prompt LOBSegment


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) ,SELECT top 100 rows CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a85 HEADING 'Owner' ENTMAP OFF COLUMN table_name FORMAT a75 HEADING 'Table Name' ENTMAP OFF COLUMN column_name FORMAT a75 HEADING 'Column Name' ENTMAP OFF COLUMN segment_name FORMAT a125 HEADING 'LOB Segment Name' ENTMAP OFF COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP OFF COLUMN lob_segment_bytes FORMAT a75 HEADING 'Segment Size' ENTMAP OFF COLUMN index_name FORMAT a125 HEADING 'LOB Index Name' ENTMAP OFF COLUMN in_row FORMAT a75 HEADING 'In Row?' ENTMAP OFF -- BREAK ON report ON owner ON table_name SELECT * FROM (SELECT l.CON_ID, '
' || l.owner || '
' owner, '
' || l.table_name || '
' table_name, '
' || l.column_name || '
' column_name, '
' || l.segment_name || '
' segment_name, '
' || s.tablespace_name || '
' tablespace_name, '
' || TO_CHAR(s.bytes, '999,999,999,999,999') || '
' lob_segment_bytes, '
' || l.index_name || '
' index_name, DECODE(l.in_row, 'YES', '
' || l.in_row || '
', 'NO', '
' || l.in_row || '
', '
' || l.in_row || '
') in_row FROM cdb_lobs l, cdb_segments s WHERE l.owner = s.owner AND l.segment_name = s.segment_name and l.CON_ID=s.CON_ID and l.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY s.bytes desc) t WHERE ROWNUM <= 100 ORDER BY con_id, t.owner, t.table_name, t.column_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Objects unable to extend - | -- +----------------------------------------------------------------------------+ prompt prompt Objects unable to extend


prompt Segments that cannot extend because of MAXEXTENTS or not enough space CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP OFF COLUMN segment_name HEADING 'Segment Name' ENTMAP OFF COLUMN segment_type HEADING 'Segment Type' ENTMAP OFF COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent' ENTMAP OFF COLUMN max FORMAT 999,999,999,999,999 HEADING 'Max. Piece Size' ENTMAP OFF COLUMN sum FORMAT 999,999,999,999,999 HEADING 'Sum of Bytes' ENTMAP OFF COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP OFF COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP OFF -- BREAK ON report ON owner SELECT ds.con_id, '
' || ds.owner || '
' owner, ds.tablespace_name tablespace_name, ds.segment_name segment_name, ds.segment_type segment_type, ds.next_extent next_extent, NVL(dfs.max, 0) max, NVL(dfs.sum, 0) sum, ds.extents extents, ds.max_extents max_extents FROM cdb_segments ds, (SELECT nb.CON_ID, max(bytes) max, sum(bytes) sum, tablespace_name FROM cdb_free_space nb GROUP BY nb.CON_ID,tablespace_name) dfs WHERE ds.CON_ID=dfs.con_id and (ds.next_extent > nvl(dfs.max, 0) OR ds.extents >= ds.max_extents) AND ds.tablespace_name = dfs.tablespace_name(+) AND ds.owner NOT IN ('SYS', 'SYSTEM','SYSAUX') AND ds.tablespace_name not in ('SYSTEM','SYSAUX') ORDER BY ds.owner, ds.tablespace_name, ds.segment_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Objects reaching max extents - | -- +----------------------------------------------------------------------------+ prompt prompt Extends over1/2Objects reaching max extents


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN tablespace_name FORMAT a30 HEADING 'Tablespace name' ENTMAP OFF COLUMN segment_name FORMAT a30 HEADING 'Segment Name' ENTMAP OFF COLUMN segment_type FORMAT a20 HEADING 'Segment Type' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP OFF COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent Size' ENTMAP OFF COLUMN pct_increase HEADING '% Increase' ENTMAP OFF COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP OFF COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP OFF COLUMN pct_util FORMAT a35 HEADING '% Utilized' ENTMAP OFF SELECT b.CON_ID, owner, tablespace_name, segment_name, segment_type, bytes, next_extent, pct_increase, extents, max_extents, '
' || ROUND((extents / max_extents) * 100, 2) ||'%
' pct_util FROM cdb_segments b WHERE extents > max_extents / 2 AND max_extents != 0 AND b.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY con_id, (extents / max_extents) DESC; prompt
[Back to Contents]

-- +============================================================================+ -- | | -- | <<<<< UNDO Segments >>>>> | -- | | -- +============================================================================+ host echo " Undo Segment. . . ." prompt prompt

Undo Segment
-- +----------------------------------------------------------------------------+ -- | - UNDO RETENTION PARAMETERS - | -- +----------------------------------------------------------------------------+ prompt prompt ● UNDO Retention Parameters
prompt undo_retention is specified in minutes CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a95 HEADING 'Instance_Name' ENTMAP OFF COLUMN thread_number_print FORMAT a95 HEADING 'Thread Number' ENTMAP OFF COLUMN name FORMAT a125 HEADING 'Name' ENTMAP OFF COLUMN value HEADING 'Value' ENTMAP OFF -- BREAK ON report ON instance_name_print ON thread_number_print SELECT '
' || i.instance_name || '
' instance_name_print, '
' || i.thread# || '
' thread_number_print, '
' || p.name || '
' name, (CASE p.name WHEN 'undo_retention' THEN '
' || TO_CHAR(TO_NUMBER(p.value) / 60, '999,999,999,999,999') || '
' ELSE '
' || p.value || '
' END) value FROM gv$parameter p, gv$instance i WHERE p.inst_id = i.inst_id AND p.name LIKE 'undo%' ORDER BY i.instance_name, p.name; prompt
[Back to Contents]

---------------------------------------------------------------------------------------------------------------------------------------- -- +----------------------------------------------------------------------------+ -- | - UNDO SEGMENTS - | -- +----------------------------------------------------------------------------+ prompt prompt ● Undo Segment Details


prompt ● AllUNDOAll Segments Recorded,May be used in recovery CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name FORMAT a75 HEADING 'Instance_Name' ENTMAP OFF COLUMN tablespace FORMAT a85 HEADING 'Tablspace' ENTMAP OFF COLUMN roll_name HEADING 'UNDO Segment Name' ENTMAP OFF COLUMN in_extents HEADING 'Init/Next Extents' ENTMAP OFF COLUMN m_extents HEADING 'Min/Max Extents' ENTMAP OFF COLUMN status HEADING 'Status' ENTMAP OFF COLUMN wraps FORMAT 999,999,999 HEADING 'Wraps' ENTMAP OFF COLUMN shrinks FORMAT 999,999,999 HEADING 'Shrinks' ENTMAP OFF COLUMN opt FORMAT 999,999,999,999 HEADING 'Opt. Size' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP OFF COLUMN extents FORMAT 999,999,999 HEADING 'Extents' ENTMAP OFF CLEAR COMPUTES -- BREAK ON report ON instance_name ON tablespace -- COMPUTE sum LABEL 'Total:' OF bytes extents shrinks wraps ON report --SELECT * FROM v$rollname; Can only show current instance --SELECT * FROM dba_rollback_segs d ORDER BY d.instance_num; SELECT a.CON_ID, '
' || NVL(A.INSTANCE_NUM, '
') || '
' INST_ID, '
' || A.TABLESPACE_NAME || '
' TABLESPACE, A.OWNER, A.SEGMENT_NAME ROLL_NAME, A.INITIAL_EXTENT, A.SEGMENT_NAME, A.OWNER, A.SEGMENT_ID, A.FILE_ID, A.BLOCK_ID, A.INITIAL_EXTENT, A.NEXT_EXTENT, A.MIN_EXTENTS, A.MAX_EXTENTS, A.PCT_INCREASE, A.RELATIVE_FNO, DECODE(A.STATUS, 'OFFLINE', '
' || A.STATUS || '
', '
' || A.STATUS || '
') STATUS, B.BYTES BYTES, B.EXTENTS EXTENTS, D.SHRINKS SHRINKS, D.WRAPS WRAPS, D.OPTSIZE OPT FROM cdb_ROLLBACK_SEGS A LEFT OUTER JOIN cdb_SEGMENTS B ON A.SEGMENT_NAME = B.SEGMENT_NAME and a.CON_ID = b.CON_ID LEFT OUTER JOIN V$ROLLNAME C ON A.SEGMENT_NAME = C.NAME and a.CON_ID=c.con_id LEFT OUTER JOIN V$ROLLSTAT D ON C.USN = D.USN and a.CON_ID=d.con_id ORDER BY a.CON_ID, A.INSTANCE_NUM, A.TABLESPACE_NAME, A.SEGMENT_NAME; prompt prompt ● Wait statistics CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN class HEADING 'Class' COLUMN ratio HEADING 'Wait Ratio' SELECT '' || W.CLASS || '' CLASS, '
' || TO_CHAR(ROUND(100 * (W.COUNT / SUM(S.VALUE)), 8)) || '%
' RATIO FROM V$WAITSTAT W, V$SYSSTAT S WHERE W.CLASS IN ('system undo header', 'system undo block', 'undo header', 'undo block') AND S.NAME IN ('db block gets', 'consistent gets') GROUP BY W.CLASS, W.COUNT; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - TABLESPACE TO OWNER - | -- +----------------------------------------------------------------------------+ prompt prompt Tablespace Owner


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN segment_type FORMAT a75 HEADING 'Segment Type' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP OFF COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP OFF -- BREAK ON report ON tablespace_name COMPUTE sum LABEL 'Total: ' of seg_count bytes ON report SELECT d.CON_ID, '' || tablespace_name || '' tablespace_name, '
' || owner || '
' owner, '
' || segment_type || '
' segment_type, sum(bytes) bytes, (sum(bytes)) bytes1, count(*) seg_count FROM cdb_segments d WHERE d.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY d.CON_ID,tablespace_name, owner, segment_type ORDER BY d.CON_ID,tablespace_name, owner, segment_type; prompt
[Back to Contents]

prompt
-- +----------------------------------------------------------------------------+ -- | - Table Status - -- +----------------------------------------------------------------------------+ prompt prompt Table Status


prompt

-- +----------------------------------------------------------------------------+ -- | - Tables with row chaining/migration - -- +----------------------------------------------------------------------------+ prompt prompt Tables with row chaining/migration


prompt NOTE: Tables must have statistics gathered CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner HEADING 'Owner' ENTMAP OFF COLUMN table_name HEADING 'Table Name' ENTMAP OFF COLUMN partition_name HEADING 'Partition Name' ENTMAP OFF COLUMN num_rows FORMAT 999,999,999,999,999 HEADING 'Total Rows' ENTMAP OFF COLUMN pct_chained_rows FORMAT a65 HEADING '% Chained Rows' ENTMAP OFF COLUMN avg_row_length FORMAT 999,999,999,999,999 HEADING 'Avg Row Length' ENTMAP OFF SELECT con_id, owner owner, table_name table_name, '' partition_name, num_rows num_rows, '
' || ROUND((chain_cnt / num_rows) * 100, 2) || '%
' pct_chained_rows, avg_row_len avg_row_length FROM (select d.con_id, owner, table_name, chain_cnt, num_rows, avg_row_len from cdb_tables d where chain_cnt IS NOT NULL AND num_rows IS NOT NULL AND chain_cnt > 0 AND num_rows > 0 AND owner != 'SYS') UNION ALL SELECT con_id, table_owner owner, table_name table_name, partition_name partition_name, num_rows num_rows, '
' || ROUND((chain_cnt / num_rows) * 100, 2) || '%
' pct_chained_rows, avg_row_len avg_row_length FROM (select con_id, table_owner, table_name, partition_name, chain_cnt, num_rows, avg_row_len from cdb_tab_partitions where chain_cnt IS NOT NULL AND num_rows IS NOT NULL AND chain_cnt > 0 AND num_rows > 0 AND table_owner != 'SYS') b WHERE (chain_cnt / num_rows) * 100 > 10; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Exceed10WTables without PK - -- +----------------------------------------------------------------------------+ prompt prompt Exceed10WTables without PK


prompt NOTE: Tables must have statistics gathered CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, D.OWNER, count(1) counts FROM cdb_TABLES d WHERE not exists (SELECT 1 FROM cdb_constraints dc WHERE dc.constraint_type = 'P' AND dc.table_name = d.TABLE_NAME AND dc.owner = d.OWNER and dc.CON_ID=d.CON_ID) AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND D.NUM_ROWS >= 100000 GROUP BY d.CON_ID,D.OWNER ORDER BY d.CON_ID,counts desc; prompt prompt NOTE: Top N by data volume50Tables COLUMN TEMPORARY format a10 HEADING 'TEMPORARY' ENTMAP OFF COLUMN PARTITIONED format a20 HEADING 'PARTITIONED' ENTMAP OFF SELECT * FROM ( SELECT d.con_id, D.OWNER, D.TABLE_NAME, D.TEMPORARY, D.PARTITIONED,/* D.RESULT_CACHE,*/ D.TABLESPACE_NAME, D.LOGGING, D.ROW_MOVEMENT, D.NUM_ROWS, DENSE_RANK() over(ORDER BY D.NUM_ROWS desc) rank FROM cdb_TABLES d WHERE not exists (SELECT 1 FROM cdb_constraints dc WHERE dc.constraint_type = 'P' AND dc.table_name = d.TABLE_NAME AND dc.owner = d.OWNER and dc.CON_ID=d.CON_ID) AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND D.NUM_ROWS >= 100000) WHERE rank<=50 ORDER BY con_id, OWNER, TABLE_NAME, NUM_ROWS DESC ; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Tables with High Water Mark but no data - -- +----------------------------------------------------------------------------+ prompt prompt Tables with High Water Mark but no data


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT t.con_id, t.owner, t.table_name, t.partition_name, t.tablespace_name, t.logging, t.last_analyzed, t.sizes sizes_m FROM ( ---------------------------------- Non-partitioned Table SELECT d.con_id, D.owner, D.table_name, '' partition_name, D.tablespace_name, D.logging, D.last_analyzed, b.sizes FROM cdb_tables d, (SELECT nb.CON_ID, NB.owner, NB.segment_name, SUM(NB.BYTES) / 1024 / 1024 SIZES FROM cdb_SEGMENTS NB WHERE NB.partition_name IS NULL AND nb.segment_type = 'TABLE' AND nb.BYTES / nb.initial_extent > 1.1 AND nb.owner NOT IN ('SYS', 'SYSTEM') AND nb.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') GROUP BY nb.CON_ID, NB.owner, NB.segment_name) B WHERE B.segment_name = D.table_name AND D.owner = B.owner and d.CON_ID = b.con_id AND d.partitioned = 'NO' AND D.owner NOT IN ('SYS', 'SYSTEM') AND D.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') AND D.num_rows = 0 AND B.SIZES > 10 UNION ALL ------------------------------------------------------------ Partition Table SELECT d.con_id, D.Table_Owner, D.table_name, d.partition_name, D.tablespace_name, D.logging, D.last_analyzed, b.sizes FROM cdb_TAB_PARTITIONS d, (SELECT nb.con_id, NB.owner, NB.segment_name, nb.partition_name, SUM(NB.BYTES) / 1024 / 1024 SIZES FROM cdb_SEGMENTS NB WHERE NB.partition_name IS NOT NULL AND nb.segment_type = 'TABLE PARTITION' AND nb.BYTES / nb.initial_extent > 1.1 AND nb.owner NOT IN ('SYS', 'SYSTEM') AND nb.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') GROUP BY nb.con_id, NB.owner, NB.segment_name, nb.partition_name) B WHERE B.segment_name = D.table_name AND D.Table_Owner = B.owner AND d.partition_name = b.partition_name and b.con_id = d.con_id AND D.TABLE_OWNER NOT IN ('SYS', 'SYSTEM') AND D.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') AND D.num_rows = 0 AND B.SIZES > 10) t WHERE t.table_name NOT LIKE '%TMP%' AND t.table_name NOT LIKE '%TEMP%'; prompt
[Back to Contents]

host echo " Partition Table Status. . ." prompt prompt Partition Table Status


prompt

prompt prompt Table Size >10GBUnpartitioned


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.con_id, owner, segment_name, segment_type, ROUND(sum(bytes)/1024/1024/1024,3) object_size_G FROM cdb_segments d where segment_type = 'TABLE' AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') group by d.con_id, owner, segment_name, segment_type having sum(bytes) / 1024 / 1024 / 1024 >= 10 ORDER BY d.con_id,object_size_G desc; prompt
[Back to Contents]

prompt prompt Top N Partitions10Objects


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM (SELECT d.CON_ID, table_owner, table_name, count(*) cnt FROM cdb_tab_partitions d WHERE table_owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY d.CON_ID,table_owner, table_name ORDER BY cnt desc) where ROWNUM <= 10; prompt
[Back to Contents]

prompt prompt Partition Count >100Tables


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, table_owner, table_name, count(*) cnt FROM cdb_tab_partitions d WHERE table_owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') having count(*) >= 100 group by d.CON_ID,table_owner, table_name ORDER BY cnt desc; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Invalid Objects - | -- +----------------------------------------------------------------------------+ prompt prompt Invalid Object


prompt

prompt prompt Invalid Objects


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a85 HEADING 'Owner' ENTMAP OFF COLUMN object_name FORMAT a30 HEADING 'Object Name' ENTMAP OFF COLUMN object_type FORMAT a20 HEADING 'Object Type' ENTMAP OFF COLUMN status FORMAT a75 HEADING 'Status' ENTMAP OFF -- BREAK ON report ON owner -- COMPUTE count LABEL 'Grand Total: ' OF object_name ON report SELECT d.CON_ID, d.OWNER, count(*) cnt FROM cdb_objects d WHERE owner not in ('PUBLIC') AND status <> 'VALID' group by d.con_id,d.OWNER ORDER BY con_id, owner; prompt Top200Row SELECT d.CON_ID, '
' || owner || '
' owner, object_name, object_type, DECODE(status, 'VALID', '
' || status || '
', '
' || status || '
') status, 'alter ' || DECODE(object_type, 'PACKAGE BODY', 'PACKAGE', 'TYPE BODY', 'TYPE', object_type) || ' ' || owner || '.' || object_name || ' ' || DECODE(object_type, 'PACKAGE BODY', 'compile body', 'compile') || ';' hands_on FROM cdb_objects d WHERE owner not in ('PUBLIC') AND status <> 'VALID' AND rownum<=200 ORDER BY con_id, owner, object_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - PROCEDURAL OBJECT ERRORS - | -- +----------------------------------------------------------------------------+ prompt prompt ● Procedural Object Errors


prompt All records FROM cdb_ERRORS CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a85 HEAD 'Schema' ENTMAP OFF COLUMN name FORMAT a30 HEAD 'Object Name' ENTMAP OFF COLUMN type FORMAT a15 HEAD 'Object Type' ENTMAP OFF COLUMN sequence FORMAT 999,999 HEAD 'Sequence' ENTMAP OFF COLUMN line FORMAT 999,999 HEAD 'Line' ENTMAP OFF COLUMN position FORMAT 999,999 HEAD 'Position' ENTMAP OFF COLUMN text HEAD 'Text' ENTMAP OFF SET DEFINE ON -- BREAK ON report ON owner SELECT d.CON_ID, d.owner, d.name, d.type, count(1) cnt FROM cdb_errors d WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY d.CON_ID, d.owner, d.name, d.type ORDER BY d.CON_ID,d.owner, d.name, d.type, cnt desc; prompt SELECT d.con_id, '
' || owner || '
' owner, name, type, sequence, line, position, text FROM cdb_errors d where rownum <= 10 AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY con_id,owner,name; prompt
[Back to Contents]

prompt prompt Invalid Normal Indexes


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT t.CON_ID, t.owner index_owner, t.index_name, t.table_owner, t.table_name, blevel, t.num_rows, t.leaf_blocks, t.distinct_keys FROM cdb_indexes t WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND status = 'UNUSABLE' order by t.CON_ID,t.OWNER,t.INDEX_NAME; prompt
[Back to Contents]

prompt prompt Invalid Partition Indexes


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT t2.CON_ID, t2.owner, t1.blevel, t1.leaf_blocks, t1.INDEX_NAME, t2.table_name, t1.PARTITION_NAME, t1.STATUS FROM cdb_ind_partitions t1, cdb_indexes t2 where t1.index_name = t2.index_name and t1.CON_ID=t2.CON_ID AND t1.STATUS = 'UNUSABLE' AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') order by t2.CON_ID,t2.OWNER ; prompt prompt Invalid Triggers
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, '
' || owner ||'
' owner, object_name TRIGGER_NAME, D.OBJECT_TYPE, D.CREATED, d.status, (SELECT nb.status FROM cdb_triggers nb WHERE nb.owner = d.owner AND nb.trigger_name = d.OBJECT_NAME and nb.CON_ID=d.CON_ID) STATUS1 FROM cdb_objects D WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND status <> 'VALID' AND D.OBJECT_TYPE='TRIGGER' ORDER BY d.CON_ID, owner, object_name; prompt
[Back to Contents]

host echo " Index Status. . ." prompt prompt Index Status


prompt

prompt prompt Index Count Exceeds5Tables


prompt NOTE: Top N with most indexes50Tables CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM (SELECT d.CON_ID, owner, table_name, count(*) index_count FROM cdb_indexes d WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY d.CON_ID, owner, table_name having count(*) > 5 ORDER BY con_id, index_count desc) WHERE ROWNUM <= 100; prompt
[Back to Contents]

prompt prompt Large Table No Index


prompt ● Greater Than2GLarge Table No Index
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, owner, segment_name, round(bytes / 1024 / 1024 / 1024, 3) size_g, blocks, tablespace_name FROM cdb_segments d WHERE segment_type = 'TABLE' AND segment_name NOT IN (SELECT table_name FROM cdb_indexes) AND bytes / 1024 / 1024 / 1024 >= 2 and owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY d.CON_ID, bytes DESC; prompt prompt ● Greater Than2GBpartitioned tables without indexes
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.con_id, owner, segment_name, round(SUM(bytes) / 1024 / 1024 / 1024, 3) size_g, SUM(blocks) FROM cdb_segments d WHERE segment_type = 'TABLE PARTITION' AND segment_name NOT IN (SELECT table_name FROM cdb_indexes) and owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY d.CON_ID, owner, segment_name HAVING SUM(bytes) / 1024 / 1024 / 1024 >= 2 ORDER BY d.CON_ID,SUM(bytes) DESC; prompt
[Back to Contents]

prompt prompt Composite index overlaps with single-column index


prompt NOTE: OnlyTop100 CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM (SELECT d.CON_ID, d.TABLE_OWNER, table_name, trunc(count(distinct(column_name)) / count(*), 2) cross_idx_rate FROM cdb_ind_columns d WHERE table_name NOT LIKE 'BIN$%' and TABLE_OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY con_id, TABLE_OWNER, table_name having count(distinct(column_name)) / count(*) < 1 ORDER BY con_id,cross_idx_rate desc) WHERE ROWNUM <= 100; prompt
[Back to Contents]

prompt prompt Bitmap and Function Indexes


prompt NOTE: OnlyTop100 CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM (SELECT t.CON_ID, t.owner, t.table_name, t.index_name, t.index_type, t.status, t.blevel, t.leaf_blocks, DENSE_RANK() over(partition by t.index_type ORDER BY t.leaf_blocks desc) rn FROM cdb_indexes t WHERE index_type in ('BITMAP', 'FUNCTION-BASED NORMAL') AND owner not in ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND t.leaf_blocks > 0) v WHERE rn <= 100 ORDER BY v.CON_ID, v.owner, v.table_name, rn; prompt
[Back to Contents]

host echo " FK without Index. . . ." prompt prompt FK without Index


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT con_id, owner, table_name, constraint_name, cname1 || nvl2(cname2, ',' || cname2, null) || nvl2(cname3, ',' || cname3, null) || nvl2(cname4, ',' || cname4, null) || nvl2(cname5, ',' || cname5, null) || nvl2(cname6, ',' || cname6, null) || nvl2(cname7, ',' || cname7, null) || nvl2(cname8, ',' || cname8, null) columns FROM (SELECT b.con_id, b.owner, b.table_name, b.constraint_name, max(DECODE(position, 1, column_name, null)) cname1, max(DECODE(position, 2, column_name, null)) cname2, max(DECODE(position, 3, column_name, null)) cname3, max(DECODE(position, 4, column_name, null)) cname4, max(DECODE(position, 5, column_name, null)) cname5, max(DECODE(position, 6, column_name, null)) cname6, max(DECODE(position, 7, column_name, null)) cname7, max(DECODE(position, 8, column_name, null)) cname8, count(*) col_cnt FROM (SELECT nc.con_id, substr(table_name, 1, 30) table_name, substr(constraint_name, 1, 30) constraint_name, substr(column_name, 1, 30) column_name, position FROM cdb_cons_columns nc WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ) a, cdb_constraints b WHERE a.constraint_name = b.constraint_name and a.con_id=b.con_id AND b.constraint_type = 'R' AND b.owner not in ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY b.con_id, b.owner, b.table_name, b.constraint_name) cons WHERE col_cnt > ALL (SELECT count(*) FROM cdb_ind_columns i WHERE i.table_name = cons.table_name AND i.column_name in (cname1, cname2, cname3, cname4, cname5, cname6, cname7, cname8) AND i.column_position <= cons.col_cnt AND i.index_owner not IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY con_id,i.index_name) order by con_id; prompt
[Back to Contents]

host echo " Large Indexes Never Used. . . ." prompt prompt Large Indexes Never Used


prompt NOTE: Find >1MIndex of,Never used during snapshot period,Get SizeTOP50 CLEAR COLUMNS COMPUTES SET DEFINE OFF --COLUMN count_index_cols FORMAT a75 HEADING 'Index Column Count' ENTMAP OFF COLUMN CREATED FORMAT a140 HEADING '        CREATED        ' ENTMAP OFF COLUMN min_date FORMAT a140 HEADING '        min_date        ' ENTMAP OFF COLUMN max_date FORMAT a140 HEADING '        max_date        ' ENTMAP OFF SET DEFINE ON SELECT CON_ID, TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, CREATED, INDEX_TYPE, INDEX_MB, COUNT_INDEX_COLS, MIN_DATE, MAX_DATE FROM (WITH TMP1 AS (SELECT I.CON_ID, I.OWNER INDEX_OWNER, I.TABLE_OWNER, TABLE_NAME, INDEX_NAME, INDEX_TYPE, (SELECT NB.CREATED FROM CDB_OBJECTS NB WHERE NB.OWNER = I.OWNER AND NB.OBJECT_NAME = I.INDEX_NAME AND NB.CON_ID=I.CON_ID AND NB.SUBOBJECT_NAME IS NULL AND NB.OBJECT_TYPE = 'INDEX') CREATED, ROUND(SUM(S.BYTES) / 1024 / 1024, 2) INDEX_MB, (SELECT COUNT(1) FROM CDB_IND_COLUMNS DIC WHERE DIC.INDEX_NAME = I.INDEX_NAME AND DIC.TABLE_NAME = I.TABLE_NAME AND DIC.INDEX_OWNER = I.OWNER AND DIC.CON_ID=I.CON_ID) COUNT_INDEX_COLS, DENSE_RANK() OVER(ORDER BY SUM(S.BYTES) DESC) RANK_ORDER FROM CDB_SEGMENTS S, CDB_INDEXES I WHERE I.INDEX_NAME = S.SEGMENT_NAME AND S.CON_ID=I.CON_ID AND S.SEGMENT_TYPE LIKE '%INDEX%' AND I.OWNER = S.OWNER AND S.OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY I.CON_ID, I.OWNER, I.TABLE_OWNER, TABLE_NAME, INDEX_NAME, INDEX_TYPE HAVING SUM(S.BYTES) > 1024 * 1024), TMP2 AS (SELECT CON_ID, INDEX_OWNER,INDEX_NAME, PLAN_OPERATION, (SELECT MIN(TO_CHAR(NB.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS')) FROM CDB_HIST_SNAPSHOT NB WHERE NB.SNAP_ID = V.MIN_SNAP_ID) MIN_DATE, (SELECT MAX(TO_CHAR(NB.END_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS')) FROM CDB_HIST_SNAPSHOT NB WHERE NB.SNAP_ID = V.MAX_SNAP_ID) MAX_DATE, COUNTS FROM (SELECT D.CON_ID, D.OBJECT_OWNER INDEX_OWNER, D.OBJECT_NAME INDEX_NAME, D.OPERATION || ' ' || D.OPTIONS PLAN_OPERATION, MIN(H.SNAP_ID) MIN_SNAP_ID, MAX(H.SNAP_ID) MAX_SNAP_ID, COUNT(1) COUNTS FROM CDB_HIST_SQL_PLAN D, CDB_HIST_SQLSTAT H WHERE D.OBJECT_OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND D.OPERATION LIKE '%INDEX%' AND D.SQL_ID =H.SQL_ID AND D.CON_ID=H.CON_ID GROUP BY D.CON_ID, D.OBJECT_OWNER,D.OBJECT_NAME,D.OPERATION,D.OPTIONS) V) SELECT A.CON_ID, A.TABLE_OWNER, A.TABLE_NAME, A.INDEX_OWNER, A.INDEX_NAME, A.CREATED, A.INDEX_TYPE, A.INDEX_MB, COUNT_INDEX_COLS, CASE WHEN MIN_DATE IS NULL THEN (SELECT MIN(TO_CHAR(NB.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS')) FROM CDB_HIST_SNAPSHOT NB) ELSE MIN_DATE END AS MIN_DATE, CASE WHEN MAX_DATE IS NULL THEN (SELECT MAX(TO_CHAR(NB.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS')) FROM CDB_HIST_SNAPSHOT NB) ELSE MAX_DATE END AS MAX_DATE, PLAN_OPERATION, DENSE_RANK() OVER(ORDER BY INDEX_MB DESC) RANK_ORDER2 FROM TMP1 A LEFT OUTER JOIN TMP2 B ON (A.INDEX_OWNER = B.INDEX_OWNER AND A.INDEX_NAME = B.INDEX_NAME AND A.CON_ID=B.CON_ID) AND RANK_ORDER <= 50) WHERE PLAN_OPERATION IS NULL AND RANK_ORDER2 <= 50 ORDER BY CON_ID,TABLE_OWNER, TABLE_NAME, INDEX_MB DESC; prompt
[Back to Contents]

host echo " Index columns >3. . . ." prompt prompt Index columns >3[Next Item]


prompt NOTE: Number of columns in composite index is generally3Item,Exceed3need to check rationality CLEAR COLUMNS COMPUTES SET DEFINE OFF --COLUMN IND_COLS_COUNT FORMAT a75 HEADING 'Index Column Count' ENTMAP OFF COLUMN PARTITIONED FORMAT a11 HEADING 'PARTITIONED' ENTMAP OFF COLUMN IS_PRIMARY_KEY FORMAT a15 HEADING 'IS_PRIMARY_KEY' ENTMAP OFF COLUMN LAST_ANALYZED FORMAT a140 HEADING '        LAST_ANALYZED        ' ENTMAP OFF COLUMN INDEX_CREATE FORMAT a140 HEADING '        INDEX_CREATE        ' ENTMAP OFF SET DEFINE ON SELECT TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, INDEX_TYPE, UNIQUENESS, (SELECT DECODE(nb.constraint_type, 'P', 'YES') FROM cdb_constraints nb WHERE nb.constraint_name = V.index_name AND nb.owner = V.INDEX_OWNER AND NB.CON_ID = V.CON_ID AND nb.constraint_type = 'P') is_primary_key, PARTITIONED, IND_COLS_COUNT, (SELECT round(SUM(bytes) / 1024 / 1024, 2) FROM CDB_segments nd   WHERE segment_name = index_name AND nd.owner = INDEX_OWNER AND ND.CON_ID = V.CON_ID) INDEX_SIZE_M, TABLESPACE_NAME, STATUS, -- VISIBILITY, LAST_ANALYZED, DEGREE, NUM_ROWS, SELECTIVITY, STALE_STATS, Index Branch Levels, Index Height, Number of Leaf Nodes, Number of Distinct Values, EveryKEYAvg Leaf Blocks per Key, EveryKEYAvg Data Blocks per Key, Clustering Factor, COMPRESSION, LOGGING, (SELECT d.CREATED FROM CDB_OBJECTS d WHERE d.OBJECT_NAME = INDEX_NAME AND d.OBJECT_TYPE = 'INDEX' AND d.OWNER = INDEX_OWNER AND D.CON_ID = V.CON_ID) INDEX_CREATE FROM (SELECT di.con_id, di.owner index_owner, di.table_owner, di.table_name, di.index_name, di.index_type, di.uniqueness, di.partitioned, (SELECT COUNT(1) FROM CDB_ind_columns dic WHERE dic.index_name = di.index_name AND dic.table_name = di.table_name AND dic.INDEX_OWNER = di.owner and dic.CON_ID = di.CON_ID) IND_COLS_COUNT, di.tablespace_name, di.status, --di.visibility, di.last_analyzed, di.degree, di.num_rows, DECODE(di.num_rows, 0, '', round(di.distinct_keys / di.num_rows, 2)) selectivity, DIS.STALE_STATS, di.BLEVEL Index Branch Levels, di.blevel + 1 Index Height, di.LEAF_BLOCKS Number of Leaf Nodes, di.DISTINCT_KEYS Number of Distinct Values, di.AVG_LEAF_BLOCKS_PER_KEY EveryKEYAvg Leaf Blocks per Key, di.AVG_DATA_BLOCKS_PER_KEY EveryKEYAvg Data Blocks per Key, di.clustering_factor Clustering Factor, di.compression, di.logging FROM CDB_indexes di LEFT OUTER JOIN CDB_ind_statistics dis ON (di.owner = dis.owner AND di.index_name = dis.INDEX_NAME AND di.table_name = dis.TABLE_NAME AND di.table_owner = dis.TABLE_OWNER AND di.CON_ID = dis.CON_ID and dis.OBJECT_TYPE = 'INDEX') WHERE di.index_type != 'LOB' AND DI.owner not in ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND exists (SELECT 1 FROM CDB_segments nd where segment_name = di.index_name AND nd.owner = owner and nd.con_id = di.con_id)) V WHERE IND_COLS_COUNT >= 4; prompt
[Back to Contents]

host echo " Index Height >3. . . ." prompt prompt Index Height >3


prompt NOTE: Index Height >3Need to consider rebuilding index when CLEAR COLUMNS COMPUTES SET DEFINE OFF --COLUMN IND_COLS_COUNT11 FORMAT a75 HEADING 'Index Column Count' ENTMAP OFF COLUMN PARTITIONED FORMAT a11 HEADING 'PARTITIONED' ENTMAP OFF COLUMN IS_PRIMARY_KEY FORMAT a15 HEADING 'IS_PRIMARY_KEY' ENTMAP OFF COLUMN LAST_ANALYZED FORMAT a140 HEADING '        LAST_ANALYZED        ' ENTMAP OFF COLUMN INDEX_CREATE FORMAT a140 HEADING '        INDEX_CREATE        ' ENTMAP OFF SET DEFINE ON SELECT TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, INDEX_TYPE, UNIQUENESS, (SELECT DECODE(nb.constraint_type, 'P', 'YES') FROM cdb_constraints nb WHERE nb.constraint_name = V.index_name AND nb.owner = V.INDEX_OWNER AND NB.CON_ID = V.CON_ID AND nb.constraint_type = 'P') is_primary_key, PARTITIONED, IND_COLS_COUNT, (SELECT round(SUM(bytes) / 1024 / 1024, 2) FROM CDB_segments nd   WHERE segment_name = index_name AND nd.owner = INDEX_OWNER AND ND.CON_ID = V.CON_ID) INDEX_SIZE_M, TABLESPACE_NAME, STATUS, -- VISIBILITY, LAST_ANALYZED, DEGREE, NUM_ROWS, SELECTIVITY, STALE_STATS, Index Branch Levels, Index Height, Number of Leaf Nodes, Number of Distinct Values, EveryKEYAvg Leaf Blocks per Key, EveryKEYAvg Data Blocks per Key, Clustering Factor, COMPRESSION, LOGGING, (SELECT d.CREATED FROM CDB_OBJECTS d WHERE d.OBJECT_NAME = INDEX_NAME AND d.OBJECT_TYPE = 'INDEX' AND d.OWNER = INDEX_OWNER AND D.CON_ID = V.CON_ID) INDEX_CREATE FROM (SELECT di.con_id, di.owner index_owner, di.table_owner, di.table_name, di.index_name, di.index_type, di.uniqueness, di.partitioned, (SELECT COUNT(1) FROM CDB_ind_columns dic WHERE dic.index_name = di.index_name AND dic.table_name = di.table_name AND dic.INDEX_OWNER = di.owner and dic.CON_ID = di.CON_ID) IND_COLS_COUNT, di.tablespace_name, di.status, --di.visibility, di.last_analyzed, di.degree, di.num_rows, DECODE(di.num_rows, 0, '', round(di.distinct_keys / di.num_rows, 2)) selectivity, DIS.STALE_STATS, di.BLEVEL Index Branch Levels, di.blevel + 1 Index Height, di.LEAF_BLOCKS Number of Leaf Nodes, di.DISTINCT_KEYS Number of Distinct Values, di.AVG_LEAF_BLOCKS_PER_KEY EveryKEYAvg Leaf Blocks per Key, di.AVG_DATA_BLOCKS_PER_KEY EveryKEYAvg Data Blocks per Key, di.clustering_factor Clustering Factor, di.compression, di.logging FROM CDB_indexes di LEFT OUTER JOIN CDB_ind_statistics dis ON (di.owner = dis.owner AND di.index_name = dis.INDEX_NAME AND di.table_name = dis.TABLE_NAME AND di.table_owner = dis.TABLE_OWNER AND di.CON_ID = dis.CON_ID and dis.OBJECT_TYPE = 'INDEX') WHERE di.index_type != 'LOB' AND DI.owner not in ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND exists (SELECT 1 FROM CDB_segments nd where segment_name = di.index_name AND nd.owner = owner and nd.con_id = di.con_id)) V WHERE Index Height >= 4; prompt
[Back to Contents]

host echo " Index statistics are stale. . . ." prompt prompt Index statistics are stale[Next Item]


prompt NOTE: Index statistics are stale CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN STALE_STATS FORMAT a11 HEADING 'STALE_STATS' ENTMAP OFF COLUMN PARTITIONED FORMAT a11 HEADING 'PARTITIONED' ENTMAP OFF COLUMN IS_PRIMARY_KEY FORMAT a15 HEADING 'IS_PRIMARY_KEY' ENTMAP OFF COLUMN LAST_ANALYZED FORMAT a140 HEADING '        LAST_ANALYZED        ' ENTMAP OFF COLUMN INDEX_CREATE FORMAT a140 HEADING '        INDEX_CREATE        ' ENTMAP OFF SET DEFINE ON SELECT TABLE_OWNER, TABLE_NAME, INDEX_OWNER, INDEX_NAME, INDEX_TYPE, UNIQUENESS, (SELECT DECODE(nb.constraint_type, 'P', 'YES') FROM cdb_constraints nb WHERE nb.constraint_name = V.index_name AND nb.owner = V.INDEX_OWNER AND NB.CON_ID = V.CON_ID AND nb.constraint_type = 'P') is_primary_key, PARTITIONED, IND_COLS_COUNT, (SELECT round(SUM(bytes) / 1024 / 1024, 2) FROM CDB_segments nd   WHERE segment_name = index_name AND nd.owner = INDEX_OWNER AND ND.CON_ID = V.CON_ID) INDEX_SIZE_M, TABLESPACE_NAME, STATUS, -- VISIBILITY, LAST_ANALYZED, DEGREE, NUM_ROWS, SELECTIVITY, STALE_STATS, Index Branch Levels, Index Height, Number of Leaf Nodes, Number of Distinct Values, EveryKEYAvg Leaf Blocks per Key, EveryKEYAvg Data Blocks per Key, Clustering Factor, COMPRESSION, LOGGING, (SELECT d.CREATED FROM CDB_OBJECTS d WHERE d.OBJECT_NAME = INDEX_NAME AND d.OBJECT_TYPE = 'INDEX' AND d.OWNER = INDEX_OWNER AND D.CON_ID = V.CON_ID) INDEX_CREATE FROM (SELECT di.con_id, di.owner index_owner, di.table_owner, di.table_name, di.index_name, di.index_type, di.uniqueness, di.partitioned, (SELECT COUNT(1) FROM CDB_ind_columns dic WHERE dic.index_name = di.index_name AND dic.table_name = di.table_name AND dic.INDEX_OWNER = di.owner and dic.CON_ID = di.CON_ID) IND_COLS_COUNT, di.tablespace_name, di.status, --di.visibility, di.last_analyzed, di.degree, di.num_rows, DECODE(di.num_rows, 0, '', round(di.distinct_keys / di.num_rows, 2)) selectivity, DIS.STALE_STATS, di.BLEVEL Index Branch Levels, di.blevel + 1 Index Height, di.LEAF_BLOCKS Number of Leaf Nodes, di.DISTINCT_KEYS Number of Distinct Values, di.AVG_LEAF_BLOCKS_PER_KEY EveryKEYAvg Leaf Blocks per Key, di.AVG_DATA_BLOCKS_PER_KEY EveryKEYAvg Data Blocks per Key, di.clustering_factor Clustering Factor, di.compression, di.logging FROM CDB_indexes di LEFT OUTER JOIN CDB_ind_statistics dis ON (di.owner = dis.owner AND di.index_name = dis.INDEX_NAME AND di.table_name = dis.TABLE_NAME AND di.table_owner = dis.TABLE_OWNER AND di.CON_ID = dis.CON_ID and dis.OBJECT_TYPE = 'INDEX') WHERE di.index_type != 'LOB' AND DI.owner not in ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND exists (SELECT 1 FROM CDB_segments nd where segment_name = di.index_name AND nd.owner = owner and nd.con_id = di.con_id)) V WHERE STALE_STATS ='YES'; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Parallel - | -- +----------------------------------------------------------------------------+ host echo " Parallelism. . ." prompt prompt Parallelism


prompt

prompt prompt Tables with Parallelism


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT t.CON_ID, t.owner, t.table_name, degree FROM cdb_tables t where (trim(t.degree) >'1' or trim(t.degree)='DEFAULT') AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') order by t.CON_ID, t.owner, t.table_name; prompt
[Back to Contents]

prompt prompt Indexes with Parallelism


CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT t.con_id, t.owner, t.table_name, index_name, degree, status FROM cdb_indexes t where (trim(t.degree) >'1' or trim(t.degree)='DEFAULT') AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') order by t.con_id ,t.owner, t.table_name ; prompt
[Back to Contents]

host echo " Other Objects. . ." prompt prompt Other Objects


prompt

host echo " Alert Log. . . ." prompt prompt Alert Log


SET DEFINE OFF SET DEFINE ON prompt NOTE: Alert Log:&_ALERTLOG_PATH prompt prompt ● View latest (Last Week)200lines of alert log[Next Item]
--SELECT '' message_text FROM T_ALERT_CHECKHELTH_CLOB_LHR; --SELECT '' message_text FROM T_ALERT_CHECKHELTH_CLOB_LHR; SET DEFINE OFF COLUMN alert_date FORMAT a180 HEADING '          alert_date          ' ENTMAP OFF COLUMN message_text FORMAT a300 HEADING '                    message_text                                  ' ENTMAP OFF SET DEFINE ON SELECT * FROM (SELECT a.CON_ID, --a.CONTAINER_NAME, to_char(originating_timestamp, 'YYYY-MM-DD HH24:MI:SS') alert_date, message_text, --a.ADR_HOME, a.HOST_ID, a.HOST_ADDRESS, a.PROCESS_ID, a.RECORD_ID, a.FILENAME, DENSE_RANK() OVER(PARTITION BY a.CON_ID ORDER BY a.RECORD_ID DESC) RN from v$diag_alert_ext a where trim(a.COMPONENT_ID) = 'rdbms' AND A.FILENAME = (SELECT D.VALUE || (SELECT CASE WHEN D.PLATFORM_NAME LIKE '%Microsoft%' THEN CHR(92) ELSE CHR(47) END PLATFORM FROM V$DATABASE D) || 'log.xml' FROM V$DIAG_INFO D WHERE D.NAME = 'Diag Alert') and originating_timestamp >= sysdate - 7 and trim(a.MESSAGE_TEXT) IS NOT NULL) where rn <= 200 order by record_id; prompt
[Back to Contents]

-------View Latest100lines of alert log prompt   prompt prompt ● View latest (Last Month)100lines of alert log(Exclude log switches),Sorted by time descending


SET DEFINE OFF COLUMN alert_date FORMAT a180 HEADING '          alert_date          ' ENTMAP OFF COLUMN message_text FORMAT a300 HEADING '                    message_text                                  ' ENTMAP OFF SET DEFINE ON SELECT b.* FROM (SELECT a.con_id, to_char(originating_timestamp, 'YYYY-MM-DD HH24:MI:SS') alert_date, message_text, --a.ADR_HOME, a.HOST_ID, a.HOST_ADDRESS, a.PROCESS_ID, a.RECORD_ID, a.FILENAME, DENSE_RANK() over(partition by con_id ORDER BY RECORD_ID desc) rank_order from v$diag_alert_ext a where trim(a.COMPONENT_ID) = 'rdbms' AND A.FILENAME = (SELECT D.VALUE || (SELECT CASE WHEN D.PLATFORM_NAME LIKE '%Microsoft%' THEN CHR(92) ELSE CHR(47) END PLATFORM FROM V$DATABASE D) || 'log.xml' FROM V$DIAG_INFO D WHERE D.NAME = 'Diag Alert') and originating_timestamp >= SYSDATE - 15 and message_text NOT LIKE '%advanced to log sequence%' AND message_text NOT LIKE ' Current log#%' AND message_text NOT LIKE 'Archived Log entry%' AND message_text NOT LIKE 'LNS: Standby redo logfile selected for thread %') b WHERE b.rank_order <= 100 order by record_id; -------View Latest10ItemoraAlert Log Records prompt   prompt ● View latest (Last Month)10ItemoraAlert Log Records,Sorted by time descending
SET DEFINE OFF COLUMN alert_date FORMAT a180 HEADING '          alert_date          ' ENTMAP OFF COLUMN message_text FORMAT a300 HEADING '                    message_text                                  ' ENTMAP OFF SET DEFINE ON SELECT b.* FROM (SELECT a.con_id, to_char(originating_timestamp, 'YYYY-MM-DD HH24:MI:SS') alert_date, message_text, --a.ADR_HOME, a.HOST_ID, a.HOST_ADDRESS, a.PROCESS_ID, a.RECORD_ID, a.FILENAME, DENSE_RANK() over(partition by con_id ORDER BY RECORD_ID desc) rank_order from v$diag_alert_ext a where trim(a.COMPONENT_ID) = 'rdbms' AND A.FILENAME = (SELECT D.VALUE || (SELECT CASE WHEN D.PLATFORM_NAME LIKE '%Microsoft%' THEN CHR(92) ELSE CHR(47) END PLATFORM FROM V$DATABASE D) || 'log.xml' FROM V$DIAG_INFO D WHERE D.NAME = 'Diag Alert') and originating_timestamp >= SYSDATE - 15 and message_text LIKE 'ORA-%') b WHERE b.rank_order <= 10 order by record_id; -------Estimated Alert Log Size,Tested1WRows approx0.5M prompt   prompt ● Estimated Alert Log Size
prompt NOTE: If alert log is too large, it affects DB performance,Recommend backing up alert logs regularly,Size is estimated and may not be accurate SELECT d.total_rows_number total_rows_number, case WHEN total_rows_number > 3000000 then round(total_rows_number / 10000 * 0.9, 2) WHEN total_rows_number > 1000000 then round(total_rows_number / 10000 * 0.75, 2) WHEN total_rows_number > 500000 then round(total_rows_number / 10000 * 0.7, 2) WHEN total_rows_number > 10000 then round(total_rows_number / 10000 * 0.65, 2) else round(total_rows_number / 10000 * 0.5, 2) end file_size_M FROM (SELECT count(*) total_rows_number from v$diag_alert_ext a where trim(a.COMPONENT_ID) = 'rdbms' AND A.FILENAME = (SELECT D.VALUE || (SELECT CASE WHEN D.PLATFORM_NAME LIKE '%Microsoft%' THEN CHR(92) ELSE CHR(47) END PLATFORM FROM V$DATABASE D) || 'log.xml' FROM V$DIAG_INFO D WHERE D.NAME = 'Diag Alert')) d; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - DIRECTORIES - | -- +----------------------------------------------------------------------------+ prompt prompt Database Directory


prompt ● Database Directory Overview
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN directory_name FORMAT a75 HEADING 'Directory Name' ENTMAP OFF COLUMN directory_path HEADING 'Directory Path' ENTMAP OFF -- BREAK ON report ON owner SELECT d.CON_ID,d.ORIGIN_CON_ID,d.OWNER,d.DIRECTORY_NAME,d.DIRECTORY_PATH FROM CDB_DIRECTORIES d ORDER BY d.CON_ID,OWNER, DIRECTORY_NAME; -- +----------------------------------------------------------------------------+ -- | - DIRECTORY PRIVILEGES - | -- +----------------------------------------------------------------------------+ prompt prompt ● Dir Permission
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN table_name FORMAT a75 HEADING 'Directory Name' ENTMAP OFF COLUMN grantee FORMAT a75 HEADING 'Grantee' ENTMAP OFF COLUMN privilege FORMAT a75 HEADING 'Privilege' ENTMAP OFF COLUMN grantable FORMAT a75 HEADING 'Grantable?' ENTMAP OFF -- BREAK ON report ON table_name ON grantee SELECT d.CON_ID, d.GRANTEE, d.OWNER, d.TABLE_NAME, d.GRANTOR, d.PRIVILEGE, DECODE(grantable, 'YES', '
' || grantable || '
', 'NO', '
' || grantable || '
', '
' || grantable || '
') grantable, d.HIERARCHY, d.COMMON, d.TYPE --,d.INHERITED FROM CDB_tab_privs d WHERE d.TABLE_NAME in (SELECT nb.DIRECTORY_NAME FROM cdb_directories nb) ORDER BY d.CON_ID, d.table_name, d.grantee, d.privilege; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - RECYCLE BIN - | -- +----------------------------------------------------------------------------+ prompt prompt Recycle Bin Status


-- BREAK ON report ON owner prompt ● Size of objects in recycle bin
SELECT a.CON_ID, nvl(a.owner, 'Total') owner, round(SUM(a.space * (SELECT value FROM v$parameter WHERE name = 'db_block_size')) / 1024 / 1024, 3) recyb_size, count(1) recyb_cnt FROM cdb_recyclebin a GROUP BY a.CON_ID, ROLLUP(a.owner); prompt
[Back to Contents]

prompt ● Oldest in Recycle Bin10Objects


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a85 HEADING 'Owner' ENTMAP OFF COLUMN original_name HEADING 'original_name' ENTMAP OFF COLUMN type HEADING 'Object|Type' ENTMAP OFF COLUMN object_name HEADING 'object_name' ENTMAP OFF COLUMN ts_name HEADING 'Tablespace' ENTMAP OFF COLUMN operation HEADING 'Operation' ENTMAP OFF COLUMN createtime HEADING 'createtime' ENTMAP OFF COLUMN droptime HEADING 'droptime' ENTMAP OFF COLUMN can_undrop HEADING 'Can|Undrop?' ENTMAP OFF COLUMN can_purge HEADING 'Can|Purge?' ENTMAP OFF COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Bytes' ENTMAP OFF SELECT * FROM (SELECT r.CON_ID, '
' || owner || '
' owner, original_name, type, object_name, ts_name, operation, '
' || NVL(createtime, '
') || '
' createtime, '
' || NVL(droptime, '
') || '
' droptime, DECODE(can_undrop, null, '
', 'YES', '
' || can_undrop || '
', 'NO', '
' || can_undrop || '
', '
' || can_undrop || '
') can_undrop, DECODE(can_purge, null, '
', 'YES', '
' || can_purge || '
', 'NO', '
' || can_purge || '
', '
' || can_purge || '
') can_purge, (space * p.blocksize) bytes FROM cdb_recyclebin r, (SELECT value blocksize FROM v$parameter WHERE name = 'db_block_size') p ORDER BY r.droptime) WHERE ROWNUM <= 10 ORDER BY con_id, owner, object_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - DB LINKS - | -- +----------------------------------------------------------------------------+ prompt prompt Database Link


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN db_link FORMAT a75 HEADING 'DB Link Name' ENTMAP OFF COLUMN username HEADING 'Username' ENTMAP OFF COLUMN host HEADING 'Host' ENTMAP OFF COLUMN CREATED FORMAT a140 HEADING '           CREATED           ' ENTMAP OFF -- BREAK ON owner SELECT a.CON_ID, '' || owner || '' owner, db_link, username, host, '
' || TO_CHAR(CREATED, 'yyyy-mm-dd HH24:MI:SS') || '
' CREATED FROM cdb_db_links a ORDER BY a.CON_ID, owner, db_link; prompt
[Back to Contents]

prompt prompt External Table


CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT a.CON_ID, a.OWNER, a.TABLE_NAME, a.TYPE_OWNER, a.TYPE_NAME, a.DEFAULT_DIRECTORY_OWNER, a.DEFAULT_DIRECTORY_NAME, a.REJECT_LIMIT, a.ACCESS_TYPE, a.ACCESS_PARAMETERS, a.PROPERTY FROM cdb_external_tables a order by con_id, owner; prompt
[Back to Contents]

-------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------- prompt prompt All Triggers


prompt prompt ● Overall Status
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, OWNER, count(1) cnt FROM cdb_triggers d GROUP BY d.CON_ID, owner ORDER BY d.CON_ID, cnt desc; prompt ● Detailed Status,ByUser,Top N per User10Row
prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) SELECT * FROM (SELECT d.CON_ID, OWNER, TRIGGER_NAME, d.trigger_type, d.triggering_event, d.table_owner, d.base_object_type, TABLE_NAME, STATUS, d.when_clause, DENSE_RANK() over(partition by d.owner, d.trigger_type ORDER BY d.trigger_name) rank_order FROM cdb_triggers d WHERE d.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ) wd WHERE rank_order <= 10 ORDER BY wd.con_id, wd.owner, wd.status; prompt
[Back to Contents]

prompt ● databaseLevel Triggers


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, OWNER, TRIGGER_NAME, d.trigger_type, d.triggering_event, d.table_owner, d.base_object_type, TABLE_NAME, STATUS, d.when_clause FROM cdb_triggers d WHERE d.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') and d.base_object_type like 'DATABASE%' ORDER BY d.CON_ID,d.owner,d.status ; prompt
[Back to Contents]

prompt ● DISABLEDTrigger of


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.CON_ID, OWNER, TRIGGER_NAME, TABLE_NAME, STATUS, (SELECT nb.status FROM cdb_objects nb WHERE nb.OWNER = d.owner AND nb.OBJECT_NAME = d.trigger_name and nb.CON_ID=d.CON_ID) STATUS1 FROM cdb_triggers d WHERE owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND d.status <> 'ENABLED' ORDER BY d.CON_ID, d.owner, d.status; prompt
[Back to Contents]

prompt prompt SequencecacheLess Than20


prompt ● SequencecacheLess Than20,If sequence wait occurs,Generally increase it to1000Around,Sequence default20Too Small
CLEAR COLUMNS COMPUTES SET DEFINE OFF prompt ● Overall Status SELECT t.CON_ID, sequence_owner, count(1) cnt FROM cdb_sequences t WHERE cache_size < 20 AND sequence_owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY t.CON_ID, t.sequence_owner ORDER BY cnt desc; prompt ● Detailed Status COLUMN order_flag FORMAT a10 HEADING 'order_flag' ENTMAP OFF SELECT t.CON_ID, sequence_owner, sequence_name, cache_size, t.order_flag, 'alter sequence ' || t.sequence_owner || '.' || t.sequence_name || ' cache 1000;' alter_sequence FROM cdb_sequences t WHERE cache_size < 20 AND sequence_owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') order by t.CON_ID, t.SEQUENCE_OWNER; prompt prompt NOTE: SequenceAUDSES$Status of,Occurs when multiple sessions connect at the same time SELECT * FROM cdb_sequences d WHERE d.sequence_name ='AUDSES$' order by con_id; prompt prompt ● Whether there are sequence waits in historical wait events,Strongly recommended to modify sequence in this partcacheValue
prompt ● All Sequence Wait Summary SELECT WB.*, 'ALTER SEQUENCE ' || WB.USERNAME || '.' || WB.SEQUENCE_NAME || ' CACHE 1000;' alter_sequence FROM (SELECT DISTINCT d.CON_ID, D.EVENT, D.P2, A.USERNAME, (SELECT DO.OBJECT_NAME FROM cdb_OBJECTS DO WHERE DO.OBJECT_ID = D.P2 and do.CON_ID=d.CON_ID) SEQUENCE_NAME, (SELECT DS.CACHE_SIZE FROM cdb_OBJECTS DO, cdb_SEQUENCES DS WHERE DO.OBJECT_ID = D.P2 AND DS.SEQUENCE_NAME = DO.OBJECT_NAME AND DS.SEQUENCE_OWNER = DO.OWNER and do.CON_ID=ds.CON_ID and do.CON_ID=d.CON_ID) SEQUENCE_CACHE FROM cdb_HIST_ACTIVE_SESS_HISTORY D, cdb_USERS A WHERE D.USER_ID = A.USER_ID and d.CON_ID=a.CON_ID AND USERNAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND D.EVENT LIKE 'enq: SQ%') WB order by CON_ID; prompt ● All Sequence Wait Details(Recent200Item) SELECT * FROM (SELECT d.CON_ID, TO_CHAR(D.SAMPLE_TIME, 'YYYY-MM-DD HH24:MI:SS') SAMPLE_TIME, D.SAMPLE_ID, D.SESSION_ID, D.SESSION_SERIAL#, D.SESSION_TYPE, D.BLOCKING_SESSION, D.BLOCKING_SESSION_SERIAL#, D.EVENT, D.P2, A.USERNAME, (SELECT DO.OBJECT_NAME FROM cdb_OBJECTS DO WHERE DO.OBJECT_ID = D.P2 and do.CON_ID=d.CON_ID) SEQUENCE_NAME, (SELECT DS.CACHE_SIZE FROM cdb_OBJECTS DO, cdb_SEQUENCES DS WHERE DO.OBJECT_ID = D.P2 AND DS.SEQUENCE_NAME = DO.OBJECT_NAME AND DS.SEQUENCE_OWNER = DO.OWNER and do.CON_ID=ds.CON_ID and d.CON_ID=d.CON_ID) SEQUENCE_CACHE, DENSE_RANK() OVER(PARTITION BY D.P2 ORDER BY D.SAMPLE_TIME DESC) AS DRANK FROM cdb_HIST_ACTIVE_SESS_HISTORY D, cdb_USERS A WHERE D.USER_ID = A.USER_ID and d.CON_ID=a.CON_ID AND USERNAME NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND D.EVENT LIKE 'enq: SQ%') WHERE DRANK <= 2 AND ROWNUM <= 200 order by con_id, SAMPLE_TIME desc; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - MATERIALIZED VIEWS - | -- +----------------------------------------------------------------------------+ prompt prompt Materialized View


prompt ● Materialized View related parameters
CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT d.NAME, d.VALUE, d.ISDEFAULT, d.ISSES_MODIFIABLE, d.ISSYS_MODIFIABLE, d.DESCRIPTION FROM v$parameter d WHERE upper(d.NAME) in ('JOB_QUEUE_PROCESSES', 'QUERY_REWRITE_ENABLED', 'QUERY_REWRITE_INTEGRITY', 'OPTIMIZER_MODE') ; prompt ● All Materialized Views
prompt NOTE: Only Top500Row CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT a.con_id, a.OWNER, a.MVIEW_NAME, --a.QUERY, a.REWRITE_ENABLED, a.REFRESH_MODE, a.REFRESH_METHOD, a.BUILD_MODE, c.comments, e.log_table, f.last_refresh FROM cdb_mviews a LEFT OUTER JOIN CDB_refresh b on (a.OWNER = b.ROWNER AND a.MVIEW_NAME = b.RNAME and a.CON_ID = b.CON_ID) LEFT OUTER JOIN CDB_mview_comments c on (a.OWNER = c.OWNER AND a.MVIEW_NAME = c.MVIEW_NAME and a.CON_ID = c.CON_ID) LEFT OUTER JOIN CDB_mview_detail_relations d on (a.OWNER = d.OWNER AND a.MVIEW_NAME = d.MVIEW_NAME and d.MVIEW_NAME = b.RNAME and a.CON_ID = d.CON_ID) LEFT OUTER JOIN CDB_mview_logs e on (a.OWNER = d.OWNER AND d.detailobj_name = e.master and a.CON_ID = e.CON_ID) LEFT OUTER JOIN CDB_mview_refresh_times f on (a.OWNER = f.OWNER AND e.master = f.master and a.CON_ID = f.CON_ID) WHERE a.OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') order by a.con_id, a.owner; prompt
[Back to Contents]

prompt prompt Materialized Views


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN mview_name FORMAT a75 HEADING 'MView|Name' ENTMAP OFF COLUMN master_link FORMAT a75 HEADING 'Master|Link' ENTMAP OFF COLUMN updatable FORMAT a75 HEADING 'Updatable?' ENTMAP OFF COLUMN update_log FORMAT a75 HEADING 'Update|Log' ENTMAP OFF COLUMN rewrite_enabled FORMAT a75 HEADING 'Rewrite|Enabled?' ENTMAP OFF COLUMN refresh_mode FORMAT a75 HEADING 'Refresh|Mode' ENTMAP OFF COLUMN refresh_method FORMAT a75 HEADING 'Refresh|Method' ENTMAP OFF COLUMN build_mode FORMAT a75 HEADING 'Build|Mode' ENTMAP OFF COLUMN fast_refreshable FORMAT a75 HEADING 'Fast|Refreshable' ENTMAP OFF COLUMN last_refresh_type FORMAT a75 HEADING 'Last Refresh|Type' ENTMAP OFF COLUMN last_refresh_date FORMAT a75 HEADING 'Last Refresh|Date' ENTMAP OFF COLUMN staleness FORMAT a75 HEADING 'Staleness' ENTMAP OFF COLUMN compile_state FORMAT a75 HEADING 'Compile State' ENTMAP OFF -- BREAK ON owner SELECT m.con_id, '
' || m.owner || '
' owner, m.mview_name mview_name, m.master_link master_link, '
' || NVL(m.updatable, '
') || '
' updatable, update_log update_log, '
' || NVL(m.rewrite_enabled, '
') || '
' rewrite_enabled, m.refresh_mode refresh_mode, m.refresh_method refresh_method, m.build_mode build_mode, m.fast_refreshable fast_refreshable, m.last_refresh_type last_refresh_type, '
' || TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS') || '
' last_refresh_date, m.staleness staleness, DECODE(m.compile_state, 'VALID', '
' || m.compile_state || '
', '
' || m.compile_state || '
') compile_state FROM cdb_mviews m WHERE m.OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY m.con_id, owner, mview_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - MATERIALIZED VIEW LOGS - | -- +----------------------------------------------------------------------------+ prompt prompt Materialized View Logs


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN log_owner FORMAT a75 HEADING 'Log Owner' ENTMAP OFF COLUMN log_table FORMAT a75 HEADING 'Log Table' ENTMAP OFF COLUMN master FORMAT a75 HEADING 'Master' ENTMAP OFF COLUMN log_trigger FORMAT a75 HEADING 'Log Trigger' ENTMAP OFF COLUMN rowids FORMAT a75 HEADING 'Rowids?' ENTMAP OFF COLUMN primary_key FORMAT a75 HEADING 'Primary Key?' ENTMAP OFF COLUMN object_id FORMAT a75 HEADING 'Object ID?' ENTMAP OFF COLUMN filter_columns FORMAT a75 HEADING 'Filter Columns?' ENTMAP OFF COLUMN sequence FORMAT a75 HEADING 'Sequence?' ENTMAP OFF COLUMN include_new_values FORMAT a75 HEADING 'Include New Values?' ENTMAP OFF -- BREAK ON log_owner SELECT ml.con_id, '
' || ml.log_owner || '
' log_owner, ml.log_table log_table, ml.master master, ml.log_trigger log_trigger, '
' || NVL(ml.rowids, '
') || '
' rowids, '
' || NVL(ml.primary_key, '
') || '
' primary_key, '
' || NVL(ml.object_id, '
') || '
' object_id, '
' || NVL(ml.filter_columns, '
') || '
' filter_columns, '
' || NVL(ml.sequence, '
') || '
' sequence, '
' || NVL(ml.include_new_values, '
') || '
' include_new_values FROM cdb_mview_logs ml ORDER BY ml.con_id, ml.log_owner, ml.master; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - MATERIALIZED VIEW REFRESH GROUPS - | -- +----------------------------------------------------------------------------+ prompt prompt Materialized View Refresh Groups


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN name FORMAT a75 HEADING 'Name' ENTMAP OFF COLUMN broken FORMAT a75 HEADING 'Broken?' ENTMAP OFF COLUMN next_date FORMAT a140 HEADING '        next_date        ' ENTMAP OFF COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP OFF SET DEFINE ON -- BREAK ON report ON owner SELECT d.con_id, '
' || rowner || '
' owner, '
' || rname || '
' name, '
' || broken || '
' broken, '
' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' next_date, '
' || interval || '
' interval FROM cdb_refresh d ORDER BY d.con_id, rowner, rname; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - TYPES - | -- +----------------------------------------------------------------------------+ prompt prompt Types


prompt NOTE: Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP OFF COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP OFF COLUMN attributes FORMAT a75 HEADING 'Num. Attributes' ENTMAP OFF COLUMN methods FORMAT a75 HEADING 'Num. Methods' ENTMAP OFF COLUMN predefined FORMAT a75 HEADING 'Predefined?' ENTMAP OFF COLUMN incomplete FORMAT a75 HEADING 'Incomplete?' ENTMAP OFF COLUMN final FORMAT a75 HEADING 'Final?' ENTMAP OFF COLUMN instantiable FORMAT a75 HEADING 'Instantiable?' ENTMAP OFF COLUMN supertype_owner FORMAT a75 HEADING 'Super Owner' ENTMAP OFF COLUMN supertype_name FORMAT a75 HEADING 'Super Name' ENTMAP OFF COLUMN local_attributes FORMAT a75 HEADING 'Local Attributes' ENTMAP OFF COLUMN local_methods FORMAT a75 HEADING 'Local Methods' ENTMAP OFF -- BREAK ON report ON owner SELECT t.CON_ID, '
' || t.owner || '
' owner, '
' || t.type_name || '
' type_name, '
' || t.typecode || '
' typecode, '
' || TO_CHAR(t.attributes, '999,999') || '
' attributes, '
' || TO_CHAR(t.methods, '999,999') || '
' methods, '
' || t.predefined || '
' predefined, '
' || t.incomplete || '
' incomplete, '
' || t.final || '
' final, '
' || t.instantiable || '
' instantiable, '
' || NVL(t.supertype_owner, '
') || '
' supertype_owner, '
' || NVL(t.supertype_name, '
') || '
' supertype_name, '
' || NVL(TO_CHAR(t.local_attributes, '999,999'), '
') || '
' local_attributes, '
' || NVL(TO_CHAR(t.local_methods, '999,999'), '
') || '
' local_methods FROM cdb_types t WHERE t.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') -- ORDER BY t.CON_ID, t.owner, t.TYPE_NAME ; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - TYPE METHODS - | -- +----------------------------------------------------------------------------+ prompt prompt ● Type Methods


prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP OFF COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP OFF COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP OFF COLUMN method_name FORMAT a75 HEADING 'Method Name' ENTMAP OFF COLUMN method_type FORMAT a75 HEADING 'Method Type' ENTMAP OFF COLUMN num_parameters FORMAT a75 HEADING 'Num. Parameters' ENTMAP OFF COLUMN results FORMAT a75 HEADING 'Results' ENTMAP OFF COLUMN final FORMAT a75 HEADING 'Final?' ENTMAP OFF COLUMN instantiable FORMAT a75 HEADING 'Instantiable?' ENTMAP OFF COLUMN overriding FORMAT a75 HEADING 'Overriding?' ENTMAP OFF COLUMN inherited FORMAT a75 HEADING 'Inherited?' ENTMAP OFF -- BREAK ON report ON owner ON type_name ON typecode SELECT t.con_id,'
' || t.owner || '
' owner, '
' || t.type_name || '
' type_name, '
' || t.typecode || '
' typecode, '
' || m.method_name || '
' method_name, '
' || m.method_type || '
' method_type, '
' || TO_CHAR(m.parameters, '999,999') || '
' num_parameters, '
' || TO_CHAR(m.results, '999,999') || '
' results, '
' || m.final || '
' final, '
' || m.instantiable || '
' instantiable, '
' || m.overriding || '
' overriding, DECODE(m.inherited, 'YES', '
' || m.inherited || '
', 'NO', '
' || m.inherited || '
', '
' || m.inherited || '
') inherited FROM cdb_types t, cdb_type_methods m WHERE t.owner = m.owner AND t.type_name = m.type_name and t.con_id = m.con_id AND t.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') --ORDER BY t.con_id, t.owner, t.type_name, t.typecode, m.method_no ; prompt
[Back to Contents]

-- +============================================================================+ -- | | -- | <<<<< DATA PUMP >>>>> | -- | | -- +============================================================================+ prompt prompt

Data Pump(Data Pump)
-- +----------------------------------------------------------------------------+ -- | - DATA PUMP JOBS - | -- +----------------------------------------------------------------------------+ prompt prompt Data Pump Jobs
CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner_name FORMAT a75 HEADING 'Owner Name' ENTMAP OFF COLUMN job_name FORMAT a75 HEADING 'Job Name' ENTMAP OFF COLUMN operation FORMAT a75 HEADING 'Operation' ENTMAP OFF COLUMN job_mode FORMAT a75 HEADING 'Job Mode' ENTMAP OFF COLUMN state FORMAT a75 HEADING 'State' ENTMAP OFF COLUMN degree FORMAT 999,999,999 HEADING 'Degree' ENTMAP OFF COLUMN attached_sessions FORMAT 999,999,999 HEADING 'Attached Sessions' ENTMAP OFF col owner_name for a10 col job_name for a25 col operation for a10 col job_mode for a10 col state for a15 col job_mode for a10 col state for a15 col osuser for a10 col "degree|attached|datapump" for a25 col session_info for a20 SELECT dj.CON_ID, s.inst_id, dj.owner_name, dj.job_name, dj.operation, dj.job_mode, dj.state, dj.degree || ',' || dj.attached_sessions || ',' || dj.datapump_sessions "degree|attached|datapump", ds.session_type, s.osuser, (SELECT s.SID || ',' || s.SERIAL# || ',' || p.SPID FROM gv$process p WHERE s.paddr = p.addr AND s.inst_id = p.inst_id and p.con_id=dj.con_id) session_info FROM CDB_DATAPUMP_JOBS dj --gv$datapump_job full outer join CDB_datapump_sessions ds --gv$datapump_session on (dj.job_name = ds.job_name AND dj.owner_name = ds.owner_name AND DJ.CON_ID=DS.CON_ID) LEFT OUTER JOIN gv$session s on (s.saddr = ds.saddr AND DJ.CON_ID=S.CON_ID) ORDER BY dj.owner_name, dj.job_name; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - DATA PUMP SESSIONS - | -- +----------------------------------------------------------------------------+ prompt prompt Data Pump Sessions


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a75 HEADING 'Instance_Name' ENTMAP OFF COLUMN owner_name FORMAT a75 HEADING 'Owner Name' ENTMAP OFF COLUMN job_name FORMAT a75 HEADING 'Job Name' ENTMAP OFF COLUMN session_type FORMAT a75 HEADING 'Session Type' ENTMAP OFF COLUMN sid HEADING 'SID' ENTMAP OFF COLUMN serial_no HEADING 'Serial#' ENTMAP OFF COLUMN oracle_username FORMAT a75 HEADING 'Oracle Username' ENTMAP OFF COLUMN os_username FORMAT a75 HEADING 'O/S Username' ENTMAP OFF COLUMN os_pid HEADING 'O/S PID' ENTMAP OFF -- BREAK ON report ON instance_name_print ON owner_name ON job_name SELECT '
' || i.instance_name || '
' instance_name_print, dj.owner_name owner_name, dj.job_name job_name, ds.type session_type, s.sid sid, s.serial# serial_no, s.username oracle_username, s.osuser os_username, p.spid os_pid FROM gv$datapump_job dj, gv$datapump_session ds, gv$session s, gv$instance i, gv$process p WHERE s.inst_id = i.inst_id AND s.inst_id = p.inst_id AND ds.inst_id = i.inst_id AND dj.inst_id = i.inst_id AND s.saddr = ds.saddr AND s.paddr = p.addr(+) AND dj.job_id = ds.job_id ORDER BY i.instance_name, dj.owner_name, dj.job_name, ds.type; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - DATA PUMP JOB PROGRESS - | -- +----------------------------------------------------------------------------+ prompt prompt Data Pump Job Progress


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a75 HEADING 'Instance_Name' ENTMAP OFF COLUMN owner_name FORMAT a75 HEADING 'Owner Name' ENTMAP OFF COLUMN job_name FORMAT a75 HEADING 'Job Name' ENTMAP OFF COLUMN session_type FORMAT a75 HEADING 'Session Type' ENTMAP OFF COLUMN START_TIME FORMAT a140 HEADING '        START_TIME        ' ENTMAP OFF COLUMN time_remaining FORMAT 9,999,999,999,999 HEADING 'Time Remaining (min.)' ENTMAP OFF COLUMN sofar FORMAT 9,999,999,999,999 HEADING 'Bytes Completed So Far' ENTMAP OFF COLUMN totalwork FORMAT 9,999,999,999,999 HEADING 'Total Bytes for Job' ENTMAP OFF COLUMN pct_completed HEADING '% Completed' ENTMAP OFF SET DEFINE ON -- BREAK ON report ON instance_name_print ON owner_name ON job_name SELECT '
' || i.instance_name || '
' instance_name_print , dj.owner_name owner_name , dj.job_name job_name , ds.type session_type , '
' || TO_CHAR(sl.START_TIME,'mm/dd/yyyy HH24:MI:SS') || '
' START_TIME , ROUND(sl.time_remaining/60,0) time_remaining , sl.sofar sofar , sl.totalwork totalwork , '
' || TRUNC(ROUND((sl.sofar/sl.totalwork) * 100, 1)) || '%
' pct_completed FROM gv$datapump_job dj , gv$datapump_session ds , gv$session s , gv$instance i , gv$session_longops sl WHERE s.inst_id = i.inst_id AND ds.inst_id = i.inst_id AND dj.inst_id = i.inst_id AND sl.inst_id = i.inst_id AND s.saddr = ds.saddr AND dj.job_id = ds.job_id AND sl.sid = s.sid AND sl.serial# = s.serial# AND ds.type = 'MASTER' ORDER BY i.instance_name , dj.owner_name , dj.job_name , ds.type; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - Database Performance - | -- +----------------------------------------------------------------------------+ -- +============================================================================+ -- | | -- | <<<<< AUTOMATIC WORKLOAD REPOSITORY - (AWR) >>>>> | -- | | -- +============================================================================+ -- +====================================================================================================================+ -- | -- | <<<<< Database Performance Analysis >>>>> | -- | | -- +====================================================================================================================+ host echo start...Database Performance Analysis. . prompt prompt

Database Performance Analysis
prompt

host echo " AWR. . ." prompt prompt AWR


prompt

prompt prompt AWRStatistics


CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_number FORMAT a100 HEADING 'Instance|Name' ENTMAP OFF COLUMN snap_time FORMAT a22 HEADING 'Stat Time' ENTMAP OFF COLUMN mem_read FORMAT 999,999,999,999,999 HEADING 'Memory Reads(MB)' ENTMAP OFF COLUMN disk_read FORMAT 999,999,999,999,999 HEADING 'Disk Reads(MB)' ENTMAP OFF COLUMN disk_write FORMAT 999,999,999,999,999 HEADING 'Disk Writes(KB)' ENTMAP OFF COLUMN log_account FORMAT 999,999,999,999,999 HEADING 'Log Volume(KB)' ENTMAP OFF COLUMN hard_parse FORMAT 999,999,999,999,999 HEADING 'Hard Parse(Item)' ENTMAP OFF COLUMN total_parse FORMAT 999,999,999,999,999 HEADING 'Analyze(Item)' ENTMAP OFF COLUMN trans FORMAT 999,999,999,999,999 HEADING 'Transactions' ENTMAP OFF COLUMN cpu_time FORMAT 999,999,999,999,999 HEADING 'CPU(Sec)' ENTMAP OFF -- BREAK ON report ON instance_number with pv AS (SELECT row_number() over(partition by instance_number, stat_name ORDER BY snap_id asc) row_no, snap_time, snap_id, instance_number, stat_name AS name, value FROM (SELECT cast(c.end_interval_time AS date) snap_time, a.snap_id, a.instance_number, b.stat_name, a.value FROM sys.wrh$_sysstat a, sys.wrh$_stat_name b, sys.WRM$_SNAPSHOT C WHERE a.dbid = b.dbid AND a.stat_id = b.stat_id AND a.snap_id = c.snap_id AND a.dbid = c.dbid AND a.instance_number = c.instance_number AND b.stat_name in ('session logical reads', 'physical reads', 'execute count', 'redo size', 'parse count (hard)', 'parse count (total)', 'physical writes', 'user commits', 'user rollbacks', 'CPU used by this session') AND c.end_interval_time>sysdate -7) ) SELECT '
' || instance_number || '
' instance_number, TO_CHAR(snap_time,'yyyy-mm-dd hh24:mi:ss') snap_time, round(sum(DECODE(name, 'session logical reads', value, 0)) * 8 / 1024) mem_read , round(sum(DECODE(name, 'physical reads', value, 0)) * 8 / 1024) disk_read , round(sum(DECODE(name, 'physical writes', value, 0)) * 8) disk_write , round(sum(DECODE(name, 'redo size', value, 0)) / 1024) log_account , round(sum(DECODE(name, 'parse count (hard)', value, 0))) hard_parse , round(sum(DECODE(name, 'parse count (total)', value, 0))) total_parse , round(sum(DECODE(name, 'user commits', value, 'user rollbacks', value, 0))) trans, round(sum(DECODE(name, 'CPU used by this session', value * bet_time / 100, 0))) cpu_time FROM (SELECT b.snap_id, b.snap_time, b.instance_number, b.name, round(b.value - a.value) / ((b.snap_time - a.snap_time) * 24 * 60 * 60) value, (b.snap_time - a.snap_time) * 24 * 60 * 60 bet_time FROM (SELECT row_no + 1 rowno, instance_number, snap_time, name, value FROM pv) a, (SELECT row_no rowno, instance_number, snap_id, snap_time, name, value FROM pv) b WHERE a.rowno = b.rowno AND a.name = b.name AND a.instance_number = b.instance_number ) GROUP BY instance_number, TO_CHAR(snap_time,'yyyy-mm-dd hh24:mi:ss') ORDER BY instance_number, snap_time desc; -- +----------------------------------------------------------------------------+ -- | - AWR SNAPSHOT SETTINGS - | -- +----------------------------------------------------------------------------+ prompt prompt Instances found in the "Workload Repository" prompt The instance running this report (&_instance_name) is indicated in "GREEN" CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN dbbid FORMAT a75 HEAD 'Database ID' ENTMAP OFF COLUMN dbb_name FORMAT a75 HEAD 'Database Name' ENTMAP OFF COLUMN instt_name FORMAT a75 HEAD 'Instance Name' ENTMAP OFF COLUMN instt_num FORMAT 9999999999 HEAD 'Instance Number' ENTMAP OFF COLUMN host FORMAT a75 HEAD 'Host' ENTMAP OFF COLUMN host_platform FORMAT a125 HEAD 'Host Platform' ENTMAP OFF SELECT DISTINCT (CASE WHEN cd.dbid = wr.dbid AND cd.name = wr.db_name AND ci.instance_number = wr.instance_number AND ci.instance_name = wr.instance_name THEN '
' || wr.dbid || '
' ELSE '
' || wr.dbid || '
' END) dbbid, wr.db_name dbb_name, wr.instance_name instt_name, wr.instance_number instt_num, wr.host_name host, cd.platform_name host_platform FROM cdb_hist_database_instance wr, v$database cd, v$instance ci ORDER BY wr.instance_name; prompt
[Back to Contents]

prompt AWRParameter Config Status


prompt ● Current Status prompt Use the DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS procedure to modify the interval prompt of the snapshot generation AND how long the snapshots are retained in the Workload Repository. The prompt default interval is 60 minutes AND can be set to a value between 10 minutes AND 5,256,000 (1 year). prompt The default retention period is 10,080 minutes (7 days) AND can be set to a value between prompt 1,440 minutes (1 day) AND 52,560,000 minutes (100 years). prompt EnableAWRMust satisfy below3Conditions: prompt ① STATISTICS_LEVELValue isTYPICALOr ALL prompt ② SELECT * FROM dba_hist_wr_control In,snap_intervalCannot be infinite,Generalexec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL => 60); prompt ③ SELECT SYSDATE - d.end_interval_time FROM dba_hist_snapshot d WHERE d.snap_id = (SELECT MAX(snap_id) FROM dba_hist_snapshot); Must >0,If less than0You can manually generate snapshots a few times to solve this:exec dbms_workload_repository.create_snapshot(); CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN dbbid FORMAT a75 HEAD 'Database ID' ENTMAP OFF COLUMN dbb_name FORMAT a75 HEAD 'Database Name' ENTMAP OFF COLUMN snap_interval FORMAT a75 HEAD 'Snap Interval' ENTMAP OFF COLUMN retention FORMAT a75 HEAD 'Retention Period' ENTMAP OFF COLUMN topnsql FORMAT a75 HEAD 'Top N SQL' ENTMAP OFF SELECT '
' || s.dbid || '
' dbbid, d.name dbb_name, s.snap_interval snap_interval, s.retention retention, s.topnsql FROM cdb_hist_wr_control s, v$database d WHERE s.dbid = d.dbid ORDER BY dbbid; prompt prompt ● History Status(Get Recent7Days Snapshot,Only Top50Rows) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a75 HEADING 'Instance_Name' ENTMAP OFF COLUMN snap_id FORMAT a75 HEADING 'Snap ID' ENTMAP OFF COLUMN end_interval_time FORMAT a160 HEADING '        End_Interval_Time        ' ENTMAP OFF COLUMN begin_interval_time FORMAT a140 HEADING '       Begin_Interval_Time       ' ENTMAP OFF COLUMN startup_time FORMAT a140 HEADING '        startup_time        ' ENTMAP OFF COLUMN elapsed_time FORMAT 999,999,999.99 HEADING 'Elapsed_Time_(min) ' ENTMAP OFF COLUMN db_time FORMAT 999,999,999.99 HEADING 'DB_Time (min) ' ENTMAP OFF COLUMN pct_db_time FORMAT a75 HEADING '  % DB_Time  ' ENTMAP OFF COLUMN cpu_time FORMAT 999,999,999.99 HEADING '  CPU Time (min)  ' ENTMAP OFF COLUMN RETENTION FORMAT a100 HEADING '    RETENTION    ' ENTMAP OFF COLUMN awr_report FORMAT a500 HEADING '                                        awr_report                                        ' ENTMAP OFF SET DEFINE ON -- BREAK ON instance_name_print ON startup_time SELECT con_id, '
' || instance_name || '
' instance_name_print, '
' || snap_id || '
' snap_id, '
' || startup_time || '
' startup_time, '
' || begin_interval_time || '
' begin_interval_time, '
' || end_interval_time || '
' end_interval_time, elapsed_time, db_time, '
' || pct_db_time || ' %
' pct_db_time, snap_interval, retention, topnsql, flush_elapsed, snap_level, error_count, awr_report FROM (SELECT s.con_id, i.instance_name, s.snap_id, TO_CHAR(s.startup_time, 'YYYY-MM-DD HH24:MI:SS') startup_time, TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD HH24:MI:SS') begin_interval_time, TO_CHAR(s.end_interval_time, 'YYYY-MM-DD HH24:MI:SS') end_interval_time, ROUND(EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60, 2) elapsed_time, ROUND((e.value - b.value) / 1000000 / 60, 2) db_time, ROUND(((((e.value - b.value) / 1000000 / 60) / (EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60)) * 100), 2) pct_db_time, (SELECT (nb.snap_interval) FROM CDB_hist_wr_control nb where nb.CON_ID=s.con_id) snap_interval, (SELECT (nb.retention) FROM CDB_hist_wr_control nb where nb.CON_ID=s.con_id) retention, (SELECT nb.topnsql FROM CDB_hist_wr_control nb where nb.CON_ID=s.con_id) topnsql, --TO_CHAR(s.startup_time, 'YYYY-MM-DD HH24:MI:SS.ff') startup_time, -- TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD HH24:MI:SS.ff') begin_interval_time, -- TO_CHAR(s.end_interval_time, 'YYYY-MM-DD HH24:MI:SS.ff') end_interval_time, s.flush_elapsed flush_elapsed, s.snap_level, s.error_count, --d.snap_flag, 'SELECT * FROM table(dbms_workload_repository.awr_report_html(' || s.dbid || ',' || s.instance_number || ',' || (s.snap_id - 1) || ',' || (s.snap_id) || '));' awr_report, (DENSE_RANK() OVER(partition by s.instance_number order by s.instance_number, s.snap_id DESC)) RK FROM CDB_hist_snapshot s LEFT OUTER JOIN gv$instance i on (i.instance_number = s.instance_number) LEFT OUTER JOIN CDB_hist_sys_time_model e on (e.snap_id = s.snap_id AND e.instance_number = s.instance_number and s.CON_ID = e.CON_ID AND e.stat_name = 'DB time') LEFT OUTER JOIN CDB_hist_sys_time_model b on (b.snap_id + 1 = s.snap_id AND e.stat_id = b.stat_id AND e.instance_number = b.instance_number and s.con_id = b.con_id) WHERE s.end_interval_time > sysdate - 7) nv WHERE rk <= 50 ORDER BY con_id, instance_name_print, to_number(nv.snap_id) desc; prompt
[Back to Contents]

prompt Database Server Host Info


prompt
[Ref:Database Server Host Info]

prompt

[Back to Contents]

prompt prompt AWRIn Viewload profile


prompt NOTE: Near7Days SinceAWRIn Viewload profileInfo CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN snap_date FORMAT a100 HEADING '      snap_date      ' ENTMAP OFF COLUMN cpu_time FORMAT 999,999,999.99 HEADING 'CPU Time (min)' ENTMAP OFF COLUMN snap_time_range FORMAT a340 HEADING '                  SNAP_TIME_RANGE                  ' ENTMAP OFF COLUMN end_interval_time FORMAT a140 HEADING '        End_Interval_Time        ' ENTMAP OFF COLUMN startup_time FORMAT a140 HEADING '        startup_time        ' ENTMAP OFF SET DEFINE ON with tmp_s as (SELECT curr_redo - last_redo redosize, curr_logicalreads - last_logicalreads logicalreads, curr_physicalreads - last_physicalreads physicalreads, curr_executes - last_executes executes, curr_parse - last_parse parse, curr_hardparse - last_hardparse hardparse, DECODE((curr_transactions - last_transactions), 0, NULL, (curr_transactions - last_transactions)) transactions, round(((currtime + 0) - (lasttime + 0)) * 3600 * 24, 0) seconds, TO_CHAR(currtime, 'yyyy-mm-dd') snap_date, TO_CHAR(currtime, 'hh24:mi') currtime, TO_CHAR(lasttime, 'YYYY-MM-DD HH24:MI') || '~' || TO_CHAR(currtime, 'YYYY-MM-DD HH24:MI') snap_time_range, currsnap_id endsnap_id, TO_CHAR(startup_time, 'yyyy-mm-dd hh24:mi:ss') startup_time, sessions || '~' || currsessions sessions, Cursors1 || '~' || currCursors Cursors2, instance_number FROM (SELECT a.redo last_redo, a.logicalreads last_logicalreads, a.physicalreads last_physicalreads, a.executes last_executes, a.parse last_parse, a.hardparse last_hardparse, a.transactions last_transactions, a.sessions, trunc(a.Cursors / a.sessions, 2) Cursors1, lead(a.redo, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) curr_redo, lead(a.logicalreads, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) curr_logicalreads, lead(a.physicalreads, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) curr_physicalreads, lead(a.executes, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) curr_executes, lead(a.parse, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) curr_parse, lead(a.hardparse, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) curr_hardparse, lead(a.transactions, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) curr_transactions, b.end_interval_time lasttime, lead(b.end_interval_time, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) currtime, lead(b.snap_id, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) currsnap_id, lead(a.sessions, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) currsessions, lead(trunc(a.Cursors / a.sessions, 2), 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) currCursors, b.startup_time, b.instance_number FROM (SELECT snap_id, dbid, instance_number, SUM(DECODE(stat_name, 'redo size', VALUE, 0)) redo, SUM(DECODE(stat_name, 'session logical reads', VALUE, 0)) logicalreads, SUM(DECODE(stat_name, 'physical reads', VALUE, 0)) physicalreads, SUM(DECODE(stat_name, 'execute count', VALUE, 0)) executes, SUM(DECODE(stat_name, 'parse count (total)', VALUE, 0)) parse, SUM(DECODE(stat_name, 'parse count (hard)', VALUE, 0)) hardparse, SUM(DECODE(stat_name, 'user rollbacks', VALUE, 'user commits', VALUE, 0)) transactions, SUM(DECODE(stat_name, 'logons current', VALUE, 0)) sessions, SUM(DECODE(stat_name, 'opened cursors current', VALUE, 0)) Cursors FROM dba_hist_sysstat WHERE stat_name IN ('redo size', 'session logical reads', 'physical reads', 'execute count', 'user rollbacks', 'user commits', 'parse count (hard)', 'parse count (total)', 'logons current', 'opened cursors current') GROUP BY snap_id, dbid, instance_number) a, dba_hist_snapshot b WHERE a.snap_id = b.snap_id AND a.dbid = b.dbid AND a.instance_number = b.instance_number AND b.end_interval_time > SYSDATE - 7 ORDER BY end_interval_time)), tmp_t as (SELECT lead(a.value, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) - a.value db_time, lead(b.snap_id, 1, NULL) over(PARTITION BY b.instance_number, b.startup_time ORDER BY b.end_interval_time) endsnap_id, b.snap_id, b.instance_number FROM dba_hist_sys_time_model a, dba_hist_snapshot b WHERE a.snap_id = b.snap_id AND a.dbid = b.dbid AND a.instance_number = b.instance_number AND a.stat_name = 'DB time'), tmp_ash as (SELECT inst_id, snap_id, count(1) counts FROM (SELECT n.instance_number inst_id, n.snap_id, n.session_id, n.session_serial# FROM dba_hist_active_sess_history n GROUP BY n.instance_number, n.snap_id, n.session_id, n.session_serial#) nt GROUP BY nt.inst_id, nt.snap_id) SELECT s.snap_date, s.instance_number inst_id, snap_time_range, t.snap_id || '~' || (t.snap_id + 1) snap_id_range, DECODE(s.redosize, NULL, '--shutdown or end--', s.currtime) "TIME", startup_time, TO_CHAR(round(s.seconds / 60, 2)) "Elapsed(min)", round(t.db_time / 1000000 / 60, 2) "DB_time(min)", s.sessions, (SELECT counts FROM tmp_ash nnt WHERE s.instance_number = nnt.inst_id AND nnt.snap_id = t.snap_id) || '~' || (SELECT counts FROM tmp_ash nnt WHERE s.instance_number = nnt.inst_id AND nnt.snap_id = t.snap_id + 1) active_session, s.Cursors2 "Cursors/Session", s.redosize redo, round(s.redosize / s.seconds, 2) "redo/s", round(s.redosize / s.transactions, 2) "redo/t", s.logicalreads logical, round(s.logicalreads / s.seconds, 2) "logical/s", round(s.logicalreads / s.transactions, 2) "logical/t", physicalreads physical, round(s.physicalreads / s.seconds, 2) "phy/s", round(s.physicalreads / s.transactions, 2) "phy/t", s.executes execs, round(s.executes / s.seconds, 2) "execs/s", round(s.executes / s.transactions, 2) "execs/t", s.parse, round(s.parse / s.seconds, 2) "parse/s", round(s.parse / s.transactions, 2) "parse/t", s.hardparse, round(s.hardparse / s.seconds, 2) "hardparse/s", round(s.hardparse / s.transactions, 2) "hardparse/t", s.transactions trans, round(s.transactions / s.seconds, 2) "trans/s" FROM tmp_s s, tmp_t t WHERE s.endsnap_id = t.endsnap_id AND t.instance_number = s.instance_number ORDER BY s.instance_number, s.snap_date DESC, snap_id DESC, TIME ASC; prompt
[Back to Contents]

prompt prompt The LatestAWRReport


SET DEFINE ON prompt SELECT * FROM table(dbms_workload_repository.awr_report_html(&_dbid,&_instance_number,&_snap_id,&_snap_id1)); prompt prompt
[Ref:The LatestAWRReport]

prompt

[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - AWR SNAPSHOT SIZE ESTIMATES - | -- +----------------------------------------------------------------------------+ prompt prompt AWR Snapshot Size Estimates


SET DEFINE ON DECLARE CURSOR get_instances IS SELECT COUNT(DISTINCT instance_number) FROM sys.wrm$_database_instance; CURSOR get_wr_control_info IS SELECT snapint_num, retention_num FROM sys.wrm$_wr_control; CURSOR get_snaps IS SELECT SUM(all_snaps) , SUM(good_snaps) , SUM(today_snaps) , SYSDATE - MIN(begin_interval_time) FROM (SELECT 1 AS all_snaps , (CASE WHEN s.status = 0 THEN 1 ELSE 0 END) AS good_snaps , (CASE WHEN (s.end_interval_time > SYSDATE - 1) THEN 1 ELSE 0 END) AS today_snaps , CAST(s.begin_interval_time AS DATE) AS begin_interval_time FROM sys.wrm$_snapshot s ); CURSOR sysaux_occ_usage IS SELECT occupant_name , schema_name , space_usage_kbytes/1024 space_usage_mb FROM v$sysaux_occupants ORDER BY space_usage_kbytes DESC , occupant_name; mb_format CONSTANT VARCHAR2(30) := '99,999,990.0'; kb_format CONSTANT VARCHAR2(30) := '999,999,990'; pct_format CONSTANT VARCHAR2(30) := '990.0'; snapshot_interval NUMBER; retention_interval NUMBER; all_snaps NUMBER; awr_size NUMBER; snap_size NUMBER; awr_average_size NUMBER; est_today_snaps NUMBER; awr_size_past24 NUMBER; good_snaps NUMBER; today_snaps NUMBER; num_days NUMBER; num_instances NUMBER; BEGIN OPEN get_instances; FETCH get_instances INTO num_instances; CLOSE get_instances; OPEN get_wr_control_info; FETCH get_wr_control_info INTO snapshot_interval, retention_interval; CLOSE get_wr_control_info; OPEN get_snaps; FETCH get_snaps INTO all_snaps, good_snaps, today_snaps, num_days; CLOSE get_snaps; FOR occ_rec IN sysaux_occ_usage LOOP IF (occ_rec.occupant_name = 'SM/AWR') THEN awr_size := occ_rec.space_usage_mb; END IF; END LOOP; snap_size := awr_size/all_snaps; awr_average_size := snap_size*86400/snapshot_interval; today_snaps := today_snaps / num_instances; IF (num_days < 1) THEN est_today_snaps := ROUND(today_snaps / num_days); ELSE est_today_snaps := today_snaps; END IF; awr_size_past24 := snap_size * est_today_snaps; DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('' ); DBMS_OUTPUT.PUT_LINE('' ); IF (num_instances > 1) THEN DBMS_OUTPUT.PUT_LINE('' ); END IF; DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('' ); DBMS_OUTPUT.PUT_LINE('' ); IF (num_instances > 1) THEN DBMS_OUTPUT.PUT_LINE('' ); END IF; DBMS_OUTPUT.PUT_LINE('
Estimates based on ' || ROUND(snapshot_interval/60) || ' minute snapshot intervals
AWR size/day' || TO_CHAR(awr_average_size, mb_format) || ' MB(' || TRIM(TO_CHAR(snap_size*1024, kb_format)) || ' K/snap * ' || ROUND(86400/snapshot_interval) || ' snaps/day)
AWR size/wk' || TO_CHAR(awr_average_size * 7, mb_format) || ' MB(size_per_day * 7) per instance
AWR size/wk' || TO_CHAR(awr_average_size * 7 * num_instances, mb_format) || ' MB(size_per_day * 7) per database
Estimates based on ' || ROUND(today_snaps) || ' snaps in past 24 hours
AWR size/day' || TO_CHAR(awr_size_past24, mb_format) || ' MB(' || TRIM(TO_CHAR(snap_size*1024, kb_format)) || ' K/snap AND ' || ROUND(today_snaps) || ' snaps in past ' || ROUND(least(num_days*24,24),1) || ' hours)
AWR size/wk' || TO_CHAR(awr_size_past24 * 7, mb_format) || ' MB(size_per_day * 7) per instance
AWR size/wk' || TO_CHAR(awr_size_past24 * 7 * num_instances, mb_format) || ' MB(size_per_day * 7) per database
'); END; / prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - AWR BASELINES - | -- +----------------------------------------------------------------------------+ prompt prompt AWR Baselines


prompt Use the DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE procedure to create a named baseline. prompt A baseline (also known AS a preserved snapshot set) is a pair of AWR snapshots that represents a prompt specific period of database usage. The Oracle database server will exempt the AWR snapshots prompt assigned to a specific baseline FROM the automated purge routine. The main purpose of a baseline prompt is to preserve typical run-time statistics in the AWR repository which can then be compared to prompt current performance or similar periods in the past. CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN dbbid FORMAT a75 HEAD 'Database ID' ENTMAP OFF COLUMN dbb_name FORMAT a75 HEAD 'Database Name' ENTMAP OFF COLUMN baseline_id HEAD 'Baseline ID' ENTMAP OFF COLUMN baseline_name FORMAT a75 HEAD 'Baseline Name' ENTMAP OFF COLUMN start_snap_id HEAD 'Beginning Snapshot ID' ENTMAP OFF COLUMN start_snap_time FORMAT a75 HEAD 'Beginning Snapshot Time' ENTMAP OFF COLUMN end_snap_id HEAD 'Ending Snapshot ID' ENTMAP OFF COLUMN end_snap_time FORMAT a75 HEAD 'Ending Snapshot Time' ENTMAP OFF SET DEFINE ON SELECT '
' || b.dbid || '
' dbbid, d.name dbb_name, b.baseline_id baseline_id, baseline_name baseline_name, b.start_snap_id start_snap_id, '
' || TO_CHAR(b.start_snap_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_snap_time, b.end_snap_id end_snap_id, '
' || TO_CHAR(b.end_snap_time, 'mm/dd/yyyy HH24:MI:SS') || '
' end_snap_time FROM dba_hist_baseline b, v$database d WHERE b.dbid = d.dbid ORDER BY dbbid, b.baseline_id; prompt
[Back to Contents]

-- +----------------------------------------------------------------------------+ -- | - ENABLED TRACES - | -- +----------------------------------------------------------------------------+ prompt prompt Enabled Traces


prompt End-to-End Application Tracing FROM View DBA_ENABLED_TRACES. prompt
  • Trace Type: Possible values are CLIENT_ID, SESSION, SERVICE, SERVICE_MODULE, SERVICE_MODULE_ACTION, AND DATABASE, based on the type of tracing enabled. prompt
  • Primary ID: Specific client identifier (username) or service name. prompt

    prompt Application tracing is enabled using the DBMS_MONITOR package AND the following procedures: prompt

  • CLIENT_ID_TRACE_ENABLE: Enable tracing based on client identifier (username). prompt
  • CLIENT_ID_TRACE_DISABLE: Disable client identifier tracing. prompt
  • SESSION_TRACE_ENABLE: Enable tracing based on SID AND SERIAL# of V$SESSION. prompt
  • SESSION_TRACE_DISABLE: Disable session tracing. prompt
  • SERV_MOD_ACT_TRACE_ENABLE: Enable tracing for a given combination of service name, module, AND action. prompt
  • SERV_MOD_ACT_TRACE_DISABLE: Disable service, module, AND action tracing. prompt
  • DATABASE_TRACE_ENABLE: Enable tracing for the entire database. prompt
  • DATABASE_TRACE_DISABLE: Disable database tracing. prompt

    prompt Hint: In a shared environment WHERE you have more than one session to trace, it is prompt possible to end up with many trace files WHEN tracing is enabled (i.e. connection pools). prompt Oracle10g introduces the trcsess command-line utility to combine all the relevant prompt trace files based on a session or client identifier or the service name, module name, and prompt action name hierarchy combination. The output trace file FROM the trcsess command can then be prompt sent to tkprof for a formatted output. Type trcsess at the command-line without any arguments to prompt show the parameters AND usage. CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN trace_type FORMAT a75 HEADING 'Trace Type' ENTMAP OFF COLUMN primary_id FORMAT a75 HEADING 'Primary ID' ENTMAP OFF COLUMN qualifier_id1 FORMAT a75 HEADING 'Module Name' ENTMAP OFF COLUMN qualifier_id2 FORMAT a75 HEADING 'Action Name' ENTMAP OFF COLUMN waits FORMAT a75 HEADING 'Waits?' ENTMAP OFF COLUMN binds FORMAT a75 HEADING 'Binds?' ENTMAP OFF COLUMN instance_name_print FORMAT a75 HEADING 'Instance_Name' ENTMAP OFF SELECT con_id,'

    ' || trace_type || '
    ' trace_type, '
    ' || NVL(primary_id, '
    ') || '
    ' primary_id, '
    ' || NVL(qualifier_id1, '
    ') || '
    ' qualifier_id1, '
    ' || NVL(qualifier_id2, '
    ') || '
    ' qualifier_id2, '
    ' || waits || '
    ' waits, '
    ' || binds || '
    ' binds, '
    ' || NVL(instance_name, '
    ') || '
    ' instance_name_print FROM cdb_enabled_traces ORDER BY con_id,trace_type, primary_id, qualifier_id1, qualifier_id2; prompt
    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - ENABLED AGGREGATIONS - | -- +----------------------------------------------------------------------------+ prompt prompt Enabled Aggregations


    prompt Statistics Aggregation FROM View DBA_ENABLED_AGGREGATIONS. prompt
  • Aggregation Type: Possible values are CLIENT_ID, SERVICE_MODULE, AND SERVICE_MODULE_ACTION, based on the type of statistics being gathered. prompt
  • Primary ID: Specific client identifier (username) or service name. prompt

    prompt Statistics aggregation is enabled using the DBMS_MONITOR package AND the following procedures. prompt Note that statistics gathering is global for the database AND is persistent across instance starts prompt AND restarts. prompt

  • CLIENT_ID_STAT_ENABLE: Enable statistics gathering based on client identifier (username). prompt
  • CLIENT_ID_STAT_DISABLE: Disable client identifier statistics gathering. prompt
  • SERV_MOD_ACT_STAT_ENABLE: Enable statistics gathering for a given combination of service name, module, AND action. prompt
  • SERV_MOD_ACT_STAT_DISABLE: Disable service, module, AND action statistics gathering. prompt

    prompt Hint: While the DBA_ENABLED_AGGREGATIONS provides global statistics for currently enabled prompt statistics, several other views can be used to query statistics aggregation values: V$CLIENT_STATS, prompt V$SERVICE_STATS, V$SERV_MOD_ACT_STATS, AND V$SERVICEMETRIC. CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN aggregation_type FORMAT a75 HEADING 'Aggregation Type' ENTMAP OFF COLUMN primary_id FORMAT a75 HEADING 'Primary ID' ENTMAP OFF COLUMN qualifier_id1 FORMAT a75 HEADING 'Module Name' ENTMAP OFF COLUMN qualifier_id2 FORMAT a75 HEADING 'Action Name' ENTMAP OFF SELECT con_id,'

    ' || aggregation_type || '
    ' aggregation_type, '
    ' || NVL(primary_id, '
    ') || '
    ' primary_id, '
    ' || NVL(qualifier_id1, '
    ') || '
    ' qualifier_id1, '
    ' || NVL(qualifier_id2, '
    ') || '
    ' qualifier_id2 FROM cdb_enabled_aggregations ORDER BY con_id,aggregation_type, primary_id, qualifier_id1, qualifier_id2; prompt
    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - ASH SNAPSHOT SETTINGS - | -- +----------------------------------------------------------------------------+ prompt prompt ASHSnapshot Status


    prompt ● History Status(Get Recent7Days Snapshot) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a75 HEADING 'Instance_Name' ENTMAP OFF COLUMN end_interval_time FORMAT a140 HEADING '         End_Interval_Time         ' ENTMAP OFF COLUMN begin_interval_time FORMAT a140 HEADING '        Begin_Interval_Time        ' ENTMAP OFF COLUMN startup_time FORMAT a180 HEADING '          STARTUP_TIME          ' ENTMAP OFF COLUMN elapsed_time FORMAT 999,999,999.99 HEADING 'Elapsed Time (min)' ENTMAP OFF COLUMN db_time FORMAT 999,999,999.99 HEADING 'DB Time (min)' ENTMAP OFF COLUMN pct_db_time FORMAT a75 HEADING '% DB Time' ENTMAP OFF COLUMN cpu_time FORMAT 999,999,999.99 HEADING 'CPU Time (min)' ENTMAP OFF COLUMN RETENTION FORMAT a140 HEADING '      RETENTION      ' ENTMAP OFF COLUMN ash_report FORMAT a500 HEADING '                                     ash_report                                     ' ENTMAP OFF SET DEFINE ON SELECT * FROM (SELECT d.INSTANCE_NUMBER inst_id, d.snap_id, d.dbid, (SELECT (nb.snap_interval) FROM dba_hist_wr_control nb) snap_interval, (SELECT (nb.retention) FROM dba_hist_wr_control nb) retention, TO_CHAR(d.startup_time, 'YYYY-MM-DD HH24:MI:SS.ff') startup_time, TO_CHAR(d.begin_interval_time, 'YYYY-MM-DD HH24:MI:SS.ff') begin_interval_time, TO_CHAR(d.end_interval_time, 'YYYY-MM-DD HH24:MI:SS.ff') end_interval_time, (d.flush_elapsed) flush_elapsed, d.snap_level, d.error_count, d.snap_flag, 'SELECT * FROM table(dbms_workload_repository.ash_report_html(' || d.dbid || ',' || d.instance_number || ', (SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id =' || (d.SNAP_ID - 1) || ') , (SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id =' || (d.SNAP_ID) || ')));' ash_report, (DENSE_RANK() OVER(partition by instance_number ORDER BY d.instance_number, d.snap_id DESC)) RK FROM dba_hist_ash_snapshot d WHERE d.end_interval_time > sysdate - 7 ORDER BY d.INSTANCE_NUMBER, d.snap_id DESC) t WHERE t.rk <= 50 ORDER BY t.inst_id, t.snap_id DESC; prompt
    [Back to Contents]

    prompt prompt The LatestASHReport


    SET DEFINE ON prompt NOTE: SQLScript : SELECT * FROM table(dbms_workload_repository.ash_report_html(&_dbid,&_instance_number,(SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id = &_ash_snap_id AND a.INSTANCE_NUMBER= &_instance_number ),(SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id = &_ash_snap_id1 AND a.INSTANCE_NUMBER= &_instance_number))); prompt prompt
    [Data Reference:ASHData]

    prompt

    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - ADDM SNAPSHOT SETTINGS - | -- +----------------------------------------------------------------------------+ prompt prompt The LatestADDM


    alter session set nls_language='SIMPLIFIED CHINESE'; DECLARE task_name VARCHAR2(50) := 'HEALTH_CHECK_BY_LHR'; task_desc VARCHAR2(50) := 'HEALTH_CHECK_BY_LHR'; task_id NUMBER; begin begin dbms_advisor.delete_task(task_name); exception WHEN others then null; end; dbms_advisor.create_task('ADDM', task_id, task_name, task_desc, null); dbms_advisor.set_task_parameter(task_name, 'START_SNAPSHOT', &_snap_id); dbms_advisor.set_task_parameter(task_name, 'END_SNAPSHOT', &_snap_id1); dbms_advisor.set_task_parameter(task_name, 'INSTANCE', &_instance_number); dbms_advisor.set_task_parameter(task_name, 'DB_ID', &_dbid); dbms_advisor.execute_task(task_name); exception WHEN others then null; END; / prompt prompt NOTE: SQLScript: SELECT dbms_advisor.get_task_report('HEALTH_CHECK_BY_LHR', 'TEXT', 'ALL') addm_results FROM DUAL; SET MARKUP html TABLE 'width="60%" border="1" cellspacing="0px" style="border-collapse:collapse;" ' SELECT '' addm_results FROM DUAL; SET MARKUP html TABLE 'width="auto" border="1" cellspacing="0px" style="border-collapse:collapse;" ' alter session set nls_language='&_nls_language'; prompt prompt NOTE: English VerADDM [Next Item] [Back to Contents]

    alter session set nls_language='AMERICAN'; SELECT '

    ' || dbms_advisor.get_task_report('HEALTH_CHECK_BY_LHR', 'TEXT', 'ALL') || '
    ' addm_results FROM DUAL; alter session set nls_language='&_nls_language'; --prompt
    [Data Reference:ADDMData]

    prompt

    [Back to Contents]

    host echo " Hot Block. . . ." prompt prompt Hot Block


    prompt NOTE: This part requiressysUser grants check user onx$bhquery permission on,SQL: CREATE OR REPLACE VIEW bh AS SELECT * FROM sys.x$bh; create or replace public synonym x$bh for bh; prompt NOTE: If this part is too slow,Collect system statistics before executing:exec dbms_stats.gather_dictionary_stats; exec dbms_stats.gather_fixed_objects_stats; prompt CLEAR COLUMNS COMPUTES SET DEFINE OFF prompt ● Hot Block(Summary) SELECT /*+rule */ e.CON_ID, e.owner, e.segment_name, e.segment_type, sum(b.tch) sum_tch FROM cdb_extents e, (SELECT * FROM (SELECT con_id, addr, ts#, file#, dbarfil, dbablk, tch FROM SYS.X$BH ORDER BY tch DESC) WHERE ROWNUM <= 10) b WHERE e.CON_ID= b.con_id and e.relative_fno = b.dbarfil AND e.block_id <= b.dbablk AND e.block_id + e.blocks > b.dbablk AND e.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY e.CON_ID, e.owner, e.segment_name, e.segment_type ORDER BY e.CON_ID,sum_tch desc; prompt prompt ● Hot Block(Expand,Unsummarized) SELECT /*+rule */ distinct e.con_id,e.owner, e.segment_name, e.segment_type, dbablk,b.tch FROM cdb_extents e, (SELECT * FROM (SELECT con_id,addr, ts#, file#, dbarfil, dbablk, tch FROM SYS.X$BH ORDER BY tch DESC) WHERE ROWNUM <= 10) b WHERE e.con_id=b.con_id and e.relative_fno = b.dbarfil AND e.block_id <= b.dbablk AND e.block_id + e.blocks > b.dbablk AND e.owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY e.con_id, tch desc; prompt
    [Back to Contents]

    host echo " Statistics. . ." prompt prompt prompt Statistics


    prompt

    prompt prompt Are statistics collected automatically


    prompt ● Oracle 10gdefault time window is:Every weekday night10to next day morning6Dot,Dur.8Hour;All weekend time, i.e., collected all day on weekends(Friday Night10to Monday morning6Dot)。 prompt ● Oracle 11gand later versions default time window is:Every weekday night10to next day morning2Dot,Dur.4Hour;Every Saturday Morning6to Sunday morning2Dot,Sunday Morning6to Monday morning2Dot,Last for20Hours。 CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN NEXT_START_DATE FORMAT a140 HEADING '       NEXT_START_DATE       ' ENTMAP OFF COLUMN LAST_START_DATE FORMAT a140 HEADING '       LAST_START_DATE       ' ENTMAP OFF SET DEFINE ON SELECT C.* FROM CDB_AUTOTASK_CLIENT C ORDER BY C.CON_ID; prompt ● Details of automatic statistics collection SELECT A.CON_ID, A.WINDOW_NAME, TO_CHAR(WINDOW_NEXT_TIME, 'YYYY-MM-DD HH24:MI:SS') WINDOW_NEXT_TIME, WINDOW_ACTIVE, AUTOTASK_STATUS, OPTIMIZER_STATS, SEGMENT_ADVISOR, SQL_TUNE_ADVISOR, --HEALTH_MONITOR, B.REPEAT_INTERVAL, B.DURATION, B.ENABLED, B.RESOURCE_PLAN FROM CDB_AUTOTASK_WINDOW_CLIENTS A, (SELECT T1.CON_ID, T1.WINDOW_NAME, T1.REPEAT_INTERVAL, T1.DURATION, T1.ENABLED, T1.RESOURCE_PLAN FROM CDB_SCHEDULER_WINDOWS T1, CDB_SCHEDULER_WINGROUP_MEMBERS T2 WHERE T1.WINDOW_NAME = T2.WINDOW_NAME AND T1.CON_ID = T2.CON_ID AND T2.WINDOW_GROUP_NAME IN ('MAINTENANCE_WINDOW_GROUP', 'BSLN_MAINTAIN_STATS_SCHED')) B WHERE A.WINDOW_NAME = B.WINDOW_NAME AND A.CON_ID = B.CON_ID ORDER BY A.CON_ID; prompt ● Automatic statistics collectionJOBRun Error Logs CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN ACTUAL_START_DATE FORMAT a140 HEADING '       ACTUAL_START_DATE       ' ENTMAP OFF COLUMN LOG_DATE FORMAT a140 HEADING '       LOG_DATE       ' ENTMAP OFF COLUMN RUN_DURATION FORMAT a140 HEADING '       RUN_DURATION       ' ENTMAP OFF SET DEFINE ON SELECT * FROM (SELECT n.CON_ID, JRD.LOG_ID, JRD.JOB_NAME, N.JOB_CLASS, TO_CHAR(JRD.ACTUAL_START_DATE, 'YYYY-MM-DD HH24:MI:SS') ACTUAL_START_DATE, TO_CHAR(JRD.LOG_DATE, 'YYYY-MM-DD HH24:MI:SS') LOG_DATE, JRD.STATUS, JRD.ERROR#, JRD.RUN_DURATION, JRD.ADDITIONAL_INFO FROM cdb_SCHEDULER_JOB_LOG N, cdb_SCHEDULER_JOB_RUN_DETAILS JRD WHERE N.LOG_ID = JRD.LOG_ID and n.CON_ID = jrd.CON_ID AND N.JOB_NAME LIKE 'ORA$AT_OS_OPT_%' and JRD.ACTUAL_START_DATE>=sysdate-15 and jrd.STATUS<>'SUCCEEDED' ORDER BY jrd.log_id DESC) WHERE ROWNUM <= 50; prompt
    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - OBJECTS WITHOUT STATISTICS - | -- +----------------------------------------------------------------------------+ prompt prompt Objects Without Statistics


    CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN owner FORMAT a95 HEAD 'Owner' ENTMAP OFF COLUMN object_type FORMAT a20 HEAD 'Object Type' ENTMAP OFF COLUMN count FORMAT 999,999,999,999 HEAD 'Count' ENTMAP OFF -- BREAK ON report ON owner COMPUTE count LABEL 'Total: ' OF object_name ON report SELECT a.con_id, '
    ' || owner ||'
    ' owner, 'Table' object_type, count(*) count1 FROM cdb_tables a WHERE last_analyzed IS NULL AND partitioned = 'NO' AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY a.con_id,owner, 'Table' UNION all SELECT a.con_id, '
    ' || owner ||'
    ' owner, 'Index' object_type, count(*) count1 FROM cdb_indexes a WHERE last_analyzed IS NULL AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND partitioned = 'NO' GROUP BY a.con_id,a.con_id,owner, 'Index' UNION all SELECT a.con_id, '
    ' || table_owner ||'
    ' owner, 'Table Partition' object_type, count(*) count1 FROM cdb_tab_partitions a WHERE last_analyzed IS NULL AND table_owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY a.con_id,table_owner, 'Table Partition' UNION all SELECT a.con_id, '
    ' || index_owner ||'
    ' owner, 'Index Partition' object_type, count(*) count1 FROM cdb_ind_partitions a WHERE last_analyzed IS NULL AND index_owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') GROUP BY a.con_id,index_owner, 'Index Partition' ORDER BY con_id, owner, object_type,count1; prompt
    [Back to Contents]

    prompt prompt Tables requiring stats collection [Next Item]


    prompt NOTE: Tables that have never had statistics collected or1Tables without statistics collected in months prompt prompt ● Overall Status
    CLEAR COLUMNS COMPUTES SET DEFINE OFF -- BREAK ON report COMPUTE SUM label 'Total:' OF counts never_analyze expired_analyze ON report SELECT CON_ID,OWNER, count(1) counts, sum(case WHEN d.last_analyzed is null then 1 else 0 end) never_analyze, sum(case WHEN d.last_analyzed IS NOT NULL then 1 else 0 end) expired_analyze FROM (SELECT CON_ID,owner, table_name, PARTITION_NAME, OBJECT_TYPE, GLOBAL_STATS, last_analyzed FROM (SELECT t.con_id, owner, table_name, t.PARTITION_NAME, t.OBJECT_TYPE, t.GLOBAL_STATS, t.last_analyzed, DENSE_RANK() over(ORDER BY last_analyzed) rn FROM cdb_tab_statistics t WHERE (t.last_analyzed is null or t.last_analyzed < SYSDATE - 15) AND table_name NOT LIKE 'BIN$%' AND table_name NOT LIKE '%TMP%' AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND t.SUBPARTITION_NAME is null AND (t.con_id,t.OWNER, t.TABLE_NAME) in (SELECT dtm.con_id, dtm.table_owner, dtm.table_name FROM cdb_tab_modifications dtm WHERE dtm.inserts > 100 or dtm.updates > 100 or dtm.deletes > 100)) WHERE (rn <= 50 or LAST_ANALYZED is null) ORDER BY OWNER, table_name, PARTITION_NAME) d GROUP BY CON_ID,OWNER ORDER BY CON_ID,OWNER,counts desc; prompt prompt ● Detailed Status
    prompt NOTE: 1Tables without stats in a month (Top N)100Sheet,Get all tables without statistics CLEAR COLUMNS COMPUTES SET DEFINE OFF column GLOBAL_STATS format a15 SELECT CON_ID,owner, table_name, PARTITION_NAME, OBJECT_TYPE, GLOBAL_STATS, last_analyzed FROM (SELECT CON_ID, owner, table_name, t.PARTITION_NAME, t.OBJECT_TYPE, t.GLOBAL_STATS, t.last_analyzed, DENSE_RANK() over(ORDER BY last_analyzed) rn FROM CDB_tab_statistics t WHERE (t.last_analyzed is null or t.last_analyzed < SYSDATE - 15) AND table_name NOT LIKE 'BIN$%' AND table_name NOT LIKE '%TMP%' AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') AND t.SUBPARTITION_NAME is null AND (T.CON_ID,t.OWNER, t.TABLE_NAME) in (SELECT DTM.CON_ID,dtm.table_owner, dtm.table_name FROM CDB_tab_modifications dtm WHERE dtm.inserts > 100 or dtm.updates > 100 or dtm.deletes > 100)) WHERE (rn <= 100 or LAST_ANALYZED is null) ORDER BY CON_ID,OWNER, table_name, PARTITION_NAME; prompt
    [Back to Contents]

    prompt prompt Temp tables with statistics collected[Previous Item]


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT CON_ID,owner, table_name, t.last_analyzed, t.num_rows, t.blocks FROM CDB_tables t where t.temporary = 'Y' AND last_analyzed is null AND owner NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ; prompt
    [Back to Contents]

    prompt prompt Tables or Indexes with locked stats[Previous Item]


    prompt prompt ● Overall Status
    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT CON_ID, T.OWNER index_owner, T.TABLE_OWNER, T.OBJECT_TYPE, COUNT(1) COUNTS FROM (SELECT CON_ID,D.OWNER, D.INDEX_NAME, D.TABLE_OWNER, D.TABLE_NAME, D.PARTITION_NAME, D.SUBPARTITION_NAME, D.OBJECT_TYPE FROM CDB_IND_STATISTICS D WHERE STATTYPE_LOCKED = 'ALL' AND D.OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') UNION ALL SELECT CON_ID,'', '', D.OWNER, D.TABLE_NAME, D.PARTITION_NAME, D.SUBPARTITION_NAME, D.OBJECT_TYPE FROM CDB_TAB_STATISTICS D WHERE STATTYPE_LOCKED = 'ALL' AND D.OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ) T GROUP BY CON_ID,T.OWNER, T.TABLE_OWNER, T.OBJECT_TYPE ORDER BY CON_ID,T.OBJECT_TYPE, COUNTS DESC; prompt prompt ● Detailed Status
    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM ( SELECT CON_ID,D.OWNER, D.INDEX_NAME, D.TABLE_OWNER, D.TABLE_NAME, D.PARTITION_NAME, D.SUBPARTITION_NAME, D.OBJECT_TYPE, DENSE_RANK() OVER(PARTITION BY TABLE_OWNER ORDER BY d.num_rows DESC) RN FROM CDB_IND_STATISTICS D WHERE STATTYPE_LOCKED = 'ALL' AND D.OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') UNION ALL SELECT CON_ID,'', '', D.OWNER, D.TABLE_NAME, D.PARTITION_NAME, D.SUBPARTITION_NAME, D.OBJECT_TYPE, DENSE_RANK() OVER(PARTITION BY OWNER ORDER BY d.num_rows DESC) RN FROM CDB_TAB_STATISTICS D WHERE STATTYPE_LOCKED = 'ALL' AND D.OWNER NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ) WHERE rn<=5; prompt
    [Back to Contents]

    -- +============================================================================+ -- | | -- | <<<<< SESSIONS >>>>> | -- | | -- +============================================================================+ host echo " Session. . ." prompt prompt Session


    prompt

    -- +----------------------------------------------------------------------------+ -- | - CURRENT SESSIONS - | -- +----------------------------------------------------------------------------+ prompt prompt Session Overview(Current)


    CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a45 HEADING 'Instance_Name' ENTMAP OFF COLUMN thread_number_print FORMAT a45 HEADING 'Thread Number' ENTMAP OFF COLUMN count FORMAT a45 HEADING 'Current No. of Processes' ENTMAP OFF COLUMN value FORMAT a45 HEADING 'Max No. of Processes' ENTMAP OFF COLUMN pct_usage FORMAT a45 HEADING '% Usage' ENTMAP OFF SELECT '
    ' || a.instance_name || '
    ' instance_name_print, '
    ' || a.thread# || '
    ' thread_number_print, '
    ' || TO_CHAR(a.count) || '
    ' count, '
    ' || b.value || '
    ' value, '
    ' || TO_CHAR(ROUND(100 * (a.count / b.value), 2)) || '%
    ' pct_usage FROM (SELECT count(*) count, a1.inst_id, a2.instance_name, a2.thread# FROM gv$session a1, gv$instance a2 WHERE a1.inst_id = a2.inst_id GROUP BY a1.inst_id, a2.instance_name, a2.thread#) a, (SELECT value, inst_id FROM gv$parameter WHERE name = 'processes') b WHERE a.inst_id = b.inst_id ORDER BY a.instance_name; prompt
    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - USER SESSION MATRIX - | -- +----------------------------------------------------------------------------+ prompt prompt Session Status List(Current)


    prompt User sessions (excluding SYS AND background processes) CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN instance_name_print FORMAT a75 HEADING 'Instance_Name' ENTMAP OFF COLUMN thread_number_print FORMAT a75 HEADING 'Thread Number' ENTMAP OFF COLUMN username FORMAT a79 HEADING 'Oracle User' ENTMAP OFF COLUMN num_user_sess FORMAT 999,999,999,999 HEADING 'Total Number of Logins' ENTMAP OFF COLUMN count_a FORMAT 999,999,999 HEADING 'Active Logins' ENTMAP OFF COLUMN count_i FORMAT 999,999,999 HEADING 'Inactive Logins' ENTMAP OFF COLUMN count_k FORMAT 999,999,999 HEADING 'Killed Logins' ENTMAP OFF SET DEFINE ON -- BREAK ON report ON instance_name_print ON thread_number_print SELECT '
    ' || i.instance_name ||'
    ' instance_name_print, '
    ' || i.thread# ||'
    ' thread_number_print, '
    ' ||NVL(sess.username, '[B.G. Process]') || '
    ' username, count(*) num_user_sess, NVL(act.count, 0) count_a, NVL(inact.count, 0) count_i, NVL(killed.count, 0) count_k FROM gv$session sess, gv$instance i, (SELECT count(*) count, NVL(username, '[B.G. Process]') username, inst_id FROM gv$session WHERE status = 'ACTIVE' GROUP BY username, inst_id) act, (SELECT count(*) count, NVL(username, '[B.G. Process]') username, inst_id FROM gv$session WHERE status = 'INACTIVE' GROUP BY username, inst_id) inact, (SELECT count(*) count, NVL(username, '[B.G. Process]') username, inst_id FROM gv$session WHERE status = 'KILLED' GROUP BY username, inst_id) killed WHERE sess.inst_id = i.inst_id AND (NVL(sess.username, '[B.G. Process]') = act.username(+) AND sess.inst_id = act.inst_id(+)) AND (NVL(sess.username, '[B.G. Process]') = inact.username(+) AND sess.inst_id = inact.inst_id(+)) AND (NVL(sess.username, '[B.G. Process]') = killed.username(+) AND sess.inst_id = killed.inst_id(+)) AND sess.username NOT IN ('SYS') GROUP BY i.instance_name, i.thread#, sess.username, act.count, inact.count, killed.count ORDER BY i.instance_name, i.thread#, sess.username; prompt
    [Back to Contents]

    host echo " HistoryACTIVESession Count. . . ." prompt prompt HistoryACTIVESession Count


    prompt ● HistoryACTIVESession Count(Show by Snapshot)
    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT T.CON_ID, t.inst_id, TIME, t.snap_id, count(1) counts1 FROM (SELECT n.con_id, n.instance_number inst_id, n.snap_id, n.session_id, n.session_serial#, TO_CHAR(n.sample_time, 'YYYY-MM-DD') TIME FROM CDB_hist_active_sess_history n WHERE n.sample_time >= sysdate - 7 GROUP BY n.con_id, n.instance_number, n.snap_id, n.session_id, n.session_serial#, TO_CHAR(n.sample_time, 'YYYY-MM-DD')) t GROUP BY T.CON_ID, t.inst_id, t.snap_id, TIME ORDER BY T.CON_ID, t.inst_id, t.snap_id desc; prompt prompt ● HistoryACTIVESession Count(Show by Hour)
    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT con_id, a.inst_id inst_id, SUBSTR(SAMPLE_TIME, 1, 10) Day, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '00', 1, 0)) H00, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '01', 1, 0)) H01, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '02', 1, 0)) H02, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '03', 1, 0)) H03, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '04', 1, 0)) H04, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '05', 1, 0)) H05, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '06', 1, 0)) H06, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '07', 1, 0)) H07, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '08', 1, 0)) H08, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '09', 1, 0)) H09, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '10', 1, 0)) H10, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '11', 1, 0)) H11, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '12', 1, 0)) H12, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '13', 1, 0)) H13, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '14', 1, 0)) H14, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '15', 1, 0)) H15, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '16', 1, 0)) H16, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '17', 1, 0)) H17, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '18', 1, 0)) H18, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '19', 1, 0)) H19, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '20', 1, 0)) H20, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '21', 1, 0)) H21, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '22', 1, 0)) H22, sum(DECODE(SUBSTR(SAMPLE_TIME, -2, 2), '23', 1, 0)) H23, COUNT(*) TOTAL FROM (SELECT n.con_id, n.instance_number inst_id, n.session_id, n.session_serial#, TO_CHAR(SAMPLE_TIME, 'YYYY-MM-DD HH24') SAMPLE_TIME FROM cdb_hist_active_sess_history n WHERE N.SAMPLE_TIME >= SYSDATE - 30 GROUP BY con_id, n.instance_number, n.session_id, n.session_serial#, TO_CHAR(SAMPLE_TIME, 'YYYY-MM-DD HH24')) a GROUP BY con_id, inst_id, SUBSTR(SAMPLE_TIME, 1, 10) ORDER BY con_id, inst_id, SUBSTR(SAMPLE_TIME, 1, 10) desc; prompt
    [Back to Contents]

    prompt prompt Longest Login Time10Sessions


    CLEAR COLUMNS COMPUTES SET DEFINE OFF prompt
    [Back to Contents]

    prompt prompt Exceed10Sessions unresponsive for hours


    CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN LOGON_TIME FORMAT a140 HEADING '       LOGON_TIME       ' ENTMAP OFF COLUMN kill_session FORMAT a300 HEADING '                     KILL_SESSION_SQL                     ' ENTMAP OFF SET DEFINE ON SELECT A.INST_ID, A.USERNAME, A.LOGON_TIME, A.STATUS, A.SID, A.SERIAL#, (SELECT NB.SPID FROM GV$PROCESS NB WHERE NB.ADDR = A.PADDR AND NB.INST_ID = A.INST_ID) SPID, (SELECT TRUNC(NB.PGA_USED_MEM / 1024 / 1024) FROM GV$PROCESS NB WHERE NB.ADDR = A.PADDR AND NB.INST_ID = A.INST_ID) PGA_USED_MEM, (A.MODULE || '--' || A.ACTION || '--' || A.PROGRAM || '--' || A.CLIENT_IDENTIFIER || '--' || A.CLIENT_INFO || '--' || A.SERVICE_NAME) SESSION_TYPE, A.OSUSER, ROUND(A.LAST_CALL_ET / 60 / 60, 2) TOTAL_H, 'ALTER SYSTEM DISCONNECT SESSION ''' || A.SID || ',' || A.SERIAL# || ''' IMMEDIATE' KILL_SESSION FROM GV$SESSION A WHERE A.STATUS IN ('INACTIVE') AND A.USERNAME IS NOT NULL AND A.USERNAME NOT IN ('SYS') AND A.LAST_CALL_ET >= 60 * 60 * 10 ORDER BY A.INST_ID, A.LAST_CALL_ET DESC, A.USERNAME, A.LOGON_TIME; prompt
    [Back to Contents]

    prompt prompt Sessions with most commits


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT * FROM (SELECT T1.INST_ID, T1.SID, T1.VALUE, T2.NAME, DENSE_RANK() OVER(ORDER BY T1.VALUE DESC) RANK_ORDER FROM GV$SESSTAT T1, GV$STATNAME T2 WHERE T2.NAME LIKE '%user commits%' AND T1.STATISTIC# = T2.STATISTIC# AND T1.INST_ID = T2.INST_ID AND VALUE >= 10000) WHERE RANK_ORDER <= 20 ORDER BY INST_ID, VALUE DESC; prompt
    [Back to Contents]

    prompt prompt 30In MinutesCPUSessions with longest wait/CPU


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT t.*, s.sid, s.serial#, s.machine, s.program, s.osuser FROM (SELECT b.con_id, b.INST_ID, c.USERNAME, a.event, TO_CHAR(a.cnt) AS seconds, a.sql_id, --dbms_lob.substr(b.sql_fulltext, 100, 1) sqltext , b.SQL_TEXT FROM (SELECT ROWNUM rn, t.* FROM (SELECT s.con_id, s.INST_ID, DECODE(s.session_state, 'WAITING', s.event, 'Cpu + Wait For Cpu') Event, s.sql_id, s.user_id, COUNT(*) CNT FROM gv$active_session_history s WHERE sample_time > SYSDATE - 15 / 1440 GROUP BY s.con_id, INST_ID, s.user_id, DECODE(s.session_state, 'WAITING', s.event, 'Cpu + Wait For Cpu'), s.sql_id ORDER BY CNT DESC) t WHERE ROWNUM < 20) a, gv$sqlarea b, cdb_users c WHERE a.sql_id = b.sql_id AND a.user_id = c.user_id AND a.INST_ID = b.INST_ID and b.con_id=c.con_id and a.con_id=b.con_id AND c.username NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY CNT DESC) t, gv$session s WHERE t.sql_id = s.sql_id(+) AND t.INST_ID = s.INST_ID(+) and t.con_id=s.con_id(+) ORDER BY t.con_id,t.INST_ID ; prompt
    [Back to Contents]

    prompt prompt Lock


    prompt

    prompt prompt ViewLOCKLock Status


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT /*+ RULE */ o.con_id, INST_ID, LS.OSUSER OS_USER_NAME, LS.USERNAME USER_NAME, DECODE(LS.TYPE, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX', 'Transaction enqueue lock', 'UL', 'User supplied lock') LOCK_TYPE, O.OBJECT_NAME OBJECT, DECODE(LS.LMODE, 1, NULL, 2, 'Row Share', 3, 'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', NULL) LOCK_MODE, O.OWNER, LS.SID, LS.SERIAL# SERIAL_NUM, LS.ID1, LS.ID2 FROM cdb_OBJECTS O, (SELECT s.con_id, s.INST_ID, S.OSUSER, S.USERNAME, L.TYPE, L.LMODE, S.SID, S.SERIAL#, L.ID1, L.ID2 FROM gV$SESSION S, gV$LOCK L WHERE S.SID = L.SID AND s.INST_ID=l.INST_ID and s.con_id=l.con_id) LS WHERE O.OBJECT_ID = LS.ID1 and o.con_id=ls.con_id AND O.OWNER <> 'SYS' ORDER BY o.con_id, INST_ID, O.OWNER, O.OBJECT_NAME; prompt
    [Back to Contents]

    prompt prompt Check who is locking who


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT /*+no_merge(a) no_merge(b) */ a.INST_ID, b.INST_ID, (SELECT username FROM v$session WHERE sid = a.sid) blocker, a.sid, 'is blocking', (SELECT username FROM v$session WHERE sid = b.sid) blockee, b.sid FROM gv$lock a, gv$lock b WHERE a.block = 1 AND b.request > 0 AND a.id1 = b.id1 AND a.id2 = b.id2 ORDER BY a.sid; prompt
    [Back to Contents]

    prompt ● Fromv$SESSIONQuery


    prompt NOTE: Common data dictionary views related to locks areDBA_DML_LOCKS、DBA_DDL_LOCKS、V$LOCK、DBA_LOCK、V$LOCKED_OBJECT。V$LOCKED_OBJECTRecorded isDMLLock Info,But not recordedDDLLock。V$LOCKAndDBA_LOCKSAndDBA_LOCKcontent is same,DBA_LOCKSIsDBA_LOCKSynonym of。 SELECT A.CON_ID, A.INST_ID, A.TADDR, A.LOCKWAIT, A.ROW_WAIT_OBJ#, A.ROW_WAIT_FILE#, A.ROW_WAIT_BLOCK#, A.ROW_WAIT_ROW#, (SELECT D.OWNER || '|' || D.OBJECT_NAME || '|' || D.OBJECT_TYPE FROM CDB_OBJECTS D WHERE D.OBJECT_ID = A.ROW_WAIT_OBJ# AND D.CON_ID=A.CON_ID AND ROWNUM <= 1) OBJECT_NAME, A.EVENT, A.P1, A.P2, A.P3, CHR(BITAND(P1, -16777216) / 16777215) || CHR(BITAND(P1, 16711680) / 65535) "LOCK", BITAND(P1, 65535) "MODE", TRUNC(P2 / POWER(2, 16)) AS XIDUSN, BITAND(P2, TO_NUMBER('FFFF', 'XXXX')) + 0 AS XIDSLOT, P3 XIDSQN, A.SID, A.BLOCKING_SESSION, A.SADDR, DBMS_ROWID.ROWID_CREATE(1, 77669, 8, 2799, 0) REQUEST_ROWID, (SELECT B.SQL_TEXT FROM GV$SQL B WHERE B.SQL_ID = NVL(A.SQL_ID, A.PREV_SQL_ID) AND B.CON_ID=A.CON_ID AND ROWNUM <= 1) SQL_TEXT FROM GV$SESSION A WHERE A.BLOCKING_SESSION IS NOT NULL ORDER BY A.CON_ID, A.INST_ID; prompt
    [Back to Contents]

    prompt prompt Cursor Usage


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT D.CON_ID, d.INST_ID, sid, COUNT(*) cnt FROM gv$open_cursor d GROUP BY D.CON_ID,d.INST_ID, sid HAVING COUNT(*) >= 1000 ORDER BY D.CON_ID, d.INST_ID, cnt DESC; prompt
    [Back to Contents]

    prompt prompt Parallel Process Completion


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT sl.INST_ID, s.client_info, sl.message, sl.sid, sl.serial#, p.spid, round(sl.sofar / sl.totalwork * 100, 2) "% Complete" FROM gv$session_longops sl, gv$session s, gv$process p WHERE p.addr = s.paddr AND sl.sid = s.sid AND sl.serial# = s.serial# AND sl.INST_ID = s.INST_ID AND sl.INST_ID = p.INST_ID AND opname LIKE 'RMAN%' AND opname NOT LIKE '%aggregate%' AND totalwork != 0 AND sofar <> totalwork; prompt
    [Back to Contents]

    prompt prompt Memory Usage


    prompt

    prompt prompt Query Shared Memory Usage


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT count(*) ,round(sum(sharable_mem)/1024/1024,2) sharable_mem_M FROM v$db_object_cache a; prompt
    [Back to Contents]

    prompt prompt PGAProcess consuming most


    CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN LOGON_TIME FORMAT a160 HEADING '        LOGON_TIME        ' ENTMAP OFF COLUMN kill_session FORMAT a500 HEADING '        kill_session        ' ENTMAP OFF SET DEFINE ON SELECT * FROM (SELECT p.INST_ID, p.spid, p.pid, s.sid, s.serial#, s.status, trunc(p.pga_alloc_mem/1024/1024) pga_alloc_mem_m, s.username, s.osuser, s.program, s.SQL_ID FROM gv$process p, gv$session s WHERE s.paddr(+) = p.addr AND p.INST_ID = s.INST_ID AND s.USERNAME not in ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY p.pga_alloc_mem DESC) WHERE ROWNUM < 21 ORDER BY INST_ID, pga_alloc_mem_m DESC; SELECT a.INST_ID, A.USERNAME, A.LOGON_TIME, A.STATUS, A.SID, A.SERIAL#, SPID, PGA_USED_MEM PGA_USED_MEM, (A.MODULE || '--' || A.ACTION || '--' || A.PROGRAM || '--' || a.CLIENT_IDENTIFIER || '--' || a.CLIENT_INFO || '--' || a.SERVICE_NAME) session_type, A.OSUSER, round(a.LAST_CALL_ET / 60 / 60, 2) total_h, 'ALTER SYSTEM DISCONNECT SESSION ''' || a.SID || ',' || a.serial# || ''' IMMEDIATE' kill_session FROM gv$session A, (SELECT NNB.ADDR, NNB.INST_ID, trunc(PGA_USED_MEM / 1024 / 1024) PGA_USED_MEM, NNB.BACKGROUND, nnb.spid, DENSE_RANK() OVER(ORDER BY NNB.PGA_USED_MEM DESC) rank_order FROM gv$process NNB WHERE NNB.BACKGROUND is null) B WHERE B.ADDR = a.PADDR AND B.INST_ID = a.INST_ID AND B.PGA_USED_MEM > 1 AND rank_order <= 10 AND a.USERNAME not in ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') ORDER BY a.INST_ID, rank_order DESC, a.USERNAME, a.LOGON_TIME; prompt
    [Back to Contents]

    prompt prompt Hit Ratio


    prompt

    prompt prompt buffer cache Hit Ratio


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT A.INST_ID, sum(physical_reads) physical_reads, sum(db_block_gets) db_block_gets, TO_CHAR(sum(consistent_gets)) consistent_gets, round(DECODE(DECODE((sum(db_block_gets) + sum(consistent_gets)), 0, 0, (sum(physical_reads) / (sum(db_block_gets) + sum(consistent_gets)))), 0, 0, 1 - DECODE((sum(db_block_gets) + sum(consistent_gets)), 0, 0, (sum(physical_reads) / (sum(db_block_gets) + sum(consistent_gets))))), 4) * 100 || '%' "Hit Ratio" FROM Gv$buffer_pool_statistics A GROUP BY A.INST_ID; prompt
    [Back to Contents]

    prompt prompt librarycacheHit Ratio


    prompt NOTE: If lower than95%,Need to adjust application to use bind variables,Or adjust database parametershared_pool_sizeSize of CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT a.inst_id, sum(gets) gets, sum(gethits) gethits, round(sum(gethits) * 100 / sum(gets),2) gets_Hit_Ratio, sum(pins) pins, sum(pinhits) pinhits, round(sum(pinhits) *100 / sum(pins),2) Pins_Hit_Ratio FROM gv$librarycache a group by a.inst_id; SELECT a.inst_id,namespace , sum(gets) gets, sum(gethits) gethits, round(DECODE(sum(gets),0,0,sum(gethits)*100 / sum(gets)),2) gets_Hit_Ratio, sum(pins) pins, sum(pinhits) pinhits, round(DECODE(sum(pins),0,0,sum(pinhits)*100 / sum(pins)),2) Pins_Hit_Ratio, sum(RELOADS) RELOADS, sum(INVALIDATIONS) INVALIDATIONS FROM gv$librarycache a GROUP BY a.inst_id,namespace ORDER BY namespace; prompt
    [Back to Contents]

    prompt prompt Data Dictionary Buffer Hit Ratio


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT A.INST_ID, ROUND((SUM(GETS-GETMISSES-USAGE-FIXED))/SUM(GETS)*100,2) DATA_DICTIONARY_CACHE FROM GV$ROWCACHE A GROUP BY A.INST_ID; SELECT A.INST_ID, parameter , sum(gets) , sum(getmisses) , 100*sum(gets - getmisses) / sum(gets) pct_succ_gets , sum(modifications) updates FROM GV$ROWCACHE A WHERE gets > 10 GROUP BY A.INST_ID, parameter; prompt
    [Back to Contents]

    prompt prompt latchHit Ratio of


    CLEAR COLUMNS COMPUTES SET DEFINE OFF SELECT A.INST_ID, sum(gets), sum(misses), round(1 - sum(misses) / sum(gets), 4) FROM Gv$latch A GROUP BY A.INST_ID; prompt
    [Back to Contents]

    host echo " Wait Event. . ." prompt prompt Other


    prompt

    prompt prompt Wait Event


    prompt ● Wait Event(Current)
    CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT a.INST_ID, a.WAIT_CLASS#, a.WAIT_CLASS, a.EVENT, COUNT(1) counts FROM gv$session a WHERE a.WAIT_CLASS <> 'Idle' GROUP BY a.INST_ID, a.WAIT_CLASS#, a.WAIT_CLASS, a.EVENT ORDER BY a.INST_ID, counts DESC; prompt
    [Back to Contents]

    prompt ● Wait Event(cdb_hist_active_sess_history)


    CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN END_INTERVAL_TIME FORMAT a160 HEADING '        END_INTERVAL_TIME        ' ENTMAP OFF COLUMN BEGIN_INTERVAL_TIME FORMAT a140 HEADING '       BEGIN_INTERVAL_TIME       ' ENTMAP OFF COLUMN STARTUP_TIME FORMAT a160 HEADING '        STARTUP_TIME        ' ENTMAP OFF COLUMN EVENT FORMAT a300 HEADING '                 EVENT                 ' ENTMAP OFF COLUMN SESSION_INFO FORMAT a300 HEADING '                        SESSION_INFO                        ' ENTMAP OFF SET DEFINE ON SELECT V.CON_ID, V.INSTANCE_NUMBER, V.SNAP_ID, TO_CHAR(S.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') BEGIN_INTERVAL_TIME, TO_CHAR(S.END_INTERVAL_TIME, 'YYYY-MM-DD HH24:MI:SS') END_INTERVAL_TIME, TO_CHAR(S.STARTUP_TIME, 'YYYY-MM-DD HH24:MI:SS') STARTUP_TIME, EVENT, WAIT_CLASS, SESSION_STATE, SESSION_TYPE, SESSION_INFO, SQL_ID, COUNTS FROM (SELECT D.CON_ID, D.INSTANCE_NUMBER, D.SNAP_ID, D.EVENT, D.WAIT_CLASS, D.SESSION_STATE, D.SESSION_TYPE, D.PROGRAM || '--' || D.MODULE || '--' || D.ACTION SESSION_INFO, D.SQL_ID, COUNT(1) COUNTS, DENSE_RANK() OVER(PARTITION BY D.INSTANCE_NUMBER ORDER BY COUNT(1) DESC) RN FROM CDB_HIST_ACTIVE_SESS_HISTORY D WHERE D.EVENT IS NOT NULL AND D.WAIT_CLASS <> 'Idle' AND D.SQL_ID IS NOT NULL GROUP BY D.CON_ID, D.INSTANCE_NUMBER, D.SNAP_ID, D.EVENT, D.WAIT_CLASS, D.SESSION_STATE, D.SESSION_TYPE, D.SQL_ID, (D.PROGRAM || '--' || D.MODULE || '--' || D.ACTION)) V, CDB_HIST_SNAPSHOT S WHERE V.INSTANCE_NUMBER = S.INSTANCE_NUMBER AND V.SNAP_ID = S.SNAP_ID AND RN <= 20 AND COUNTS > 20 ORDER BY V.CON_ID, V.INSTANCE_NUMBER, V.SNAP_ID DESC, V.COUNTS DESC; prompt
    [Back to Contents]

    prompt prompt ● Non-idle Wait Events(History Summary)


    CLEAR COLUMNS COMPUTES SET DEFINE OFF prompt
    [Back to Contents]

    -- +============================================================================+ -- | | -- | <<<<< NETWORKING >>>>> | -- | | -- +============================================================================+ prompt prompt

    Networking
    -- +----------------------------------------------------------------------------+ -- | - MTS DISPATCHER STATISTICS - | -- +----------------------------------------------------------------------------+ prompt prompt MTS Dispatcher Statistics
    prompt Dispatcher rate CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN name HEADING 'Name' ENTMAP OFF COLUMN avg_loop_rate HEADING 'Avg|Loop|Rate' ENTMAP OFF COLUMN avg_event_rate HEADING 'Avg|Event|Rate' ENTMAP OFF COLUMN avg_events_per_loop HEADING 'Avg|Events|Per|Loop' ENTMAP OFF COLUMN avg_msg_rate HEADING 'Avg|Msg|Rate' ENTMAP OFF COLUMN avg_svr_buf_rate HEADING 'Avg|Svr|Buf|Rate' ENTMAP OFF COLUMN avg_svr_byte_rate HEADING 'Avg|Svr|Byte|Rate' ENTMAP OFF COLUMN avg_svr_byte_per_buf HEADING 'Avg|Svr|Byte|Per|Buf' ENTMAP OFF COLUMN avg_clt_buf_rate HEADING 'Avg|Clt|Buf|Rate' ENTMAP OFF COLUMN avg_clt_byte_rate HEADING 'Avg|Clt|Byte|Rate' ENTMAP OFF COLUMN avg_clt_byte_per_buf HEADING 'Avg|Clt|Byte|Per|Buf' ENTMAP OFF COLUMN avg_buf_rate HEADING 'Avg|Buf|Rate' ENTMAP OFF COLUMN avg_byte_rate HEADING 'Avg|Byte|Rate' ENTMAP OFF COLUMN avg_byte_per_buf HEADING 'Avg|Byte|Per|Buf' ENTMAP OFF COLUMN avg_in_connect_rate HEADING 'Avg|In|Connect|Rate' ENTMAP OFF COLUMN avg_out_connect_rate HEADING 'Avg|Out|Connect|Rate' ENTMAP OFF COLUMN avg_reconnect_rate HEADING 'Avg|Reconnect|Rate' ENTMAP OFF SELECT name, avg_loop_rate, avg_event_rate, avg_events_per_loop, avg_msg_rate, avg_svr_buf_rate, avg_svr_byte_rate, avg_svr_byte_per_buf, avg_clt_buf_rate, avg_clt_byte_rate, avg_clt_byte_per_buf, avg_buf_rate, avg_byte_rate, avg_byte_per_buf, avg_in_connect_rate, avg_out_connect_rate, avg_reconnect_rate FROM v$dispatcher_rate ORDER BY name; COLUMN protocol HEADING 'Protocol' ENTMAP OFF COLUMN total_busy_rate HEADING 'Total Busy Rate' ENTMAP OFF prompt Dispatcher busy rate SELECT a.network protocol , (SUM(a.BUSY) / (SUM(a.BUSY) + SUM(a.IDLE))) total_busy_rate FROM v$dispatcher a GROUP BY a.network; prompt
    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - MTS DISPATCHER RESPONSE QUEUE WAIT STATS - | -- +----------------------------------------------------------------------------+ prompt prompt ● MTS Dispatcher Response Queue Wait Stats


    CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN type HEADING 'Type' ENTMAP OFF COLUMN avg_wait HEADING 'Avg Wait Time Per Response' ENTMAP OFF SELECT a.type, DECODE(SUM(a.totalq), 0, 'NO RESPONSES', SUM(a.wait) / SUM(a.totalq) || ' HUNDREDTHS OF SECONDS') avg_wait FROM v$queue a WHERE a.type = 'DISPATCHER' GROUP BY a.type; prompt
    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - MTS SHARED SERVER WAIT STATISTICS - | -- +----------------------------------------------------------------------------+ prompt prompt ● MTS Shared Server Wait Statistics


    CLEAR COLUMNS COMPUTES SET DEFINE ON COLUMN avg_wait HEADING 'Average Wait Time Per Request' ENTMAP OFF SELECT DECODE(a.totalq, 0, 'No Requests', a.wait / a.totalq || ' HUNDREDTHS OF SECONDS') avg_wait FROM v$queue a WHERE a.type = 'COMMON'; prompt
    [Back to Contents]

    -- +============================================================================+ -- | | -- | <<<<< Health Check Report Results >>>>> | -- | | -- +============================================================================+ prompt prompt

    Health Check Report Results
    prompt prompt Health Check Report Results
    CLEAR COLUMNS COMPUTES SET DEFINE OFF SET DEFINE ON SELECT '
    ' || rownuM || '
    ' ID, '
    ' || WARING_LEVEL || '
    ' WARING_LEVEL, v.CHECK_TYPE, v.CHECK_MESSAGE, v.CHECK_MESSAGE_DETAIL_LINK FROM (select SUBSTR(health_check_results, instr(health_check_results, '|', 1) + 1, 1) WARING_LEVEL, SUBSTR(health_check_results, instr(health_check_results, '|', 1, 2) + 1, INSTR(health_check_results, '|', 1, 3) - instr(health_check_results, '|', 1, 2) - 1) CHECK_TYPE, SUBSTR(health_check_results, INSTR(health_check_results, '|', 1, 3) + 1, INSTR(health_check_results, '|', 1, 4) - INSTR(health_check_results, '|', 1, 3) - 1) CHECK_MESSAGE, SUBSTR(health_check_results, INSTR(health_check_results, '|', 1, 4) + 1) CHECK_MESSAGE_DETAIL_LINK from (select case when (SELECT COUNT(1) FROM V$PARAMETER D WHERE D.NAME = 'spfile' AND D.VALUE IS NOT NULL) = 0 then (select 1 || '|' || 5 || '|' || 'Check Service Overview.Parameter File' || '|' || 'Database not usingspfileFile,Strongly Recommend CreatespfileFile' || '|' || '
    [Ref:All Initialization Parameters]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end AS health_check_results from dual UNION ALL select case when (SELECT SUM(COUNTS) FROM (SELECT COUNT(1) COUNTS FROM CDB_DATA_FILES D WHERE D.ONLINE_STATUS = 'OFFLINE' UNION ALL SELECT COUNT(1) FROM CDB_TEMP_FILES D WHERE D.STATUS = 'OFFLINE')) > 0 then (select 2 || '|' || 1 || '|' || 'Check Service Overview.Tablespace Status.Datafile Status' || '|' || 'Database hasOFFLINEdatafiles with status,Recommend fixing this immediately' || '|' || '

    [Ref:Datafile Status]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(1) FROM V$ASM_DISKGROUP DI WHERE (DI.TOTAL_MB - DI.FREE_MB) / DI.TOTAL_MB >= 0.95) > 0 then (select 3 || '|' || 3 || '|' || 'Check Service Overview.ASMDisk Monitor' || '|' || 'ASMInsufficient Disk Space' || '|' || '

    [Ref:ASMDisk Group Usage]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT SUM(COUNTS) FROM (SELECT COUNT(1) COUNTS FROM CDB_SCHEDULER_JOB_LOG D WHERE D.OWNER NOT like '%SYS%' AND D.STATUS <> 'SUCCEEDED' AND D.LOG_DATE >= SYSDATE - 15 UNION ALL SELECT COUNT(1) FROM CDB_JOBS D WHERE D.SCHEMA_USER NOT like '%SYS%' AND D.FAILURES > 0 AND D.LAST_DATE >= SYSDATE - 15)) > 0 then (select 4 || '|' || 5 || '|' || 'Check Service Overview.JOBStatus' || '|' || 'In Last MonthJOBErrors Occurred,Please check if business data is affectedJOB' || '|' || '

    [Ref:Job Run Status]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT count(1) FROM v$backup_set) < 2 then (select 5 || '|' || 2 || '|' || 'Check Service Details.RMANInfo' || '|' || 'Database NoRMANBackup Info,Strongly recommended to backup the database' || '|' || '

    [Ref:RMANInfo]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (select count(*) from (select l.force_matching_signature, max(l.sql_id || l.child_number) max_sql_child, dense_rank() over(order by count(*) desc) ranking, count(*) counts from gv$sql l where l.force_matching_signature <> 0 and l.parsing_schema_name NOT IN ('SYS','SYSTEM','PUBLIC','MDSYS','DBSNMP','SCOTT','LHR','LHR2','DB_MONITOR','OUTLN','MGMT_VIEW','FLOWS_FILES','ORDSYS','EXFSYS','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','HR','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','APEX_040200','DVSYS','LBACSYS','GSMADMIN_INTERNAL','AUDSYS','OJVMSYS','SYS$UMF','GGSYS','DBSFWUSER','DVF','GSMCATUSER','SYSBACKUP','REMOTE_SCHEDULER_AGENT','GSMUSER','SYSRAC','SYSKM','SYSDG') group by l.force_matching_signature having count(*) > 10)) > 0 then (select 6 || '|' || 2 || '|' || 'Check Service Details.SQLMonitor.Unused Bind VariablesSQLStatement' || '|' || 'Unused Bind VariablesSQLStatement will causelibrarycacheHit Ratio Decrease,Reduce System Perf' || '|' || '

    [Ref:Unused Bind VariablesSQLStatement]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(*) FROM (SELECT AL.THREAD#, ADS.DEST_ID, ADS.DEST_NAME, MAX((SELECT ADS.TYPE || ' ' || AD.TARGET FROM V$ARCHIVE_DEST AD WHERE AD.DEST_ID = ADS.DEST_ID)) TARGET, ADS.DATABASE_MODE, ADS.STATUS, ADS.ERROR, ADS.RECOVERY_MODE, ADS.DB_UNIQUE_NAME, ADS.DESTINATION, (SELECT MAX(SEQUENCE#) FROM V$LOG NA WHERE NA.THREAD# = AL.THREAD#) CURRENT_SEQ#, MAX(SEQUENCE#) LAST_ARCHIVED, MAX(CASE WHEN AL.APPLIED = 'YES' AND ADS.TYPE <> 'LOCAL' THEN AL.SEQUENCE# END) APPLIED_SEQ#, '' APPLIED_SCN FROM (SELECT * FROM V$ARCHIVED_LOG V WHERE V.RESETLOGS_CHANGE# = (SELECT D.RESETLOGS_CHANGE# FROM V$DATABASE D)) AL, V$ARCHIVE_DEST_STATUS ADS WHERE AL.DEST_ID(+) = ADS.DEST_ID AND ADS.STATUS != 'INACTIVE' GROUP BY AL.THREAD#, ADS.DEST_ID, ADS.DEST_NAME, ADS.STATUS, ADS.ERROR, ADS.TYPE, ADS.DATABASE_MODE, ADS.RECOVERY_MODE, ADS.DB_UNIQUE_NAME, ADS.DESTINATION) WHERE TARGET NOT LIKE '%LOCAL%' AND (ERROR IS NOT NULL OR STATUS <> 'VALID' OR CURRENT_SEQ# > APPLIED_SEQ# + 2)) > 0 then (select 7 || '|' || 2 || '|' || 'Check Service Details.DGLibrary' || '|' || 'DatabaseDGDB Running Abnormal,Click right link to viewDGDB Details' || '|' || '

    [Ref:DGLibrary]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(1) FROM CDB_OBJECTS WHERE OWNER NOT IN ('PUBLIC') AND STATUS <> 'VALID') > 0 then (select 8 || '|' || 4 || '|' || 'Database Objects.Invalid Object' || '|' || 'Invalid objects in database,Recommend Recompile' || '|' || '

    [Ref:Invalid Object]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(1) FROM (SELECT ROUND((SUM(A.SPACE * (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'db_block_size'))) / 1024 / 1024, 2) SIZE_M FROM CDB_RECYCLEBIN A) WHERE SIZE_M > 1024) > 0 then (select 9 || '|' || 4 || '|' || 'Database Objects.Other Objects.Recycle Bin Status' || '|' || 'Useless objects in recycle bin' || '|' || '

    [Ref:Recycle Bin Status]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(1) FROM CDB_HIST_ACTIVE_SESS_HISTORY D, CDB_USERS A WHERE D.USER_ID = A.USER_ID AND D.CON_ID=A.CON_ID AND USERNAME NOT LIKE '%SYS%' AND D.EVENT LIKE 'enq: SQ%') > 0 then (select 10 || '|' || 2 || '|' || 'Database Objects.Other Objects.SequencecacheLess Than20' || '|' || 'Database SequencecacheValue <20,May be accompanied byenq: SQ - contentionWait Event' || '|' || '

    [SequencecacheLess Than20]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(1) FROM gv$session A WHERE A.STATUS IN ('INACTIVE') AND A.USERNAME IS NOT NULL AND A.USERNAME not in ('SYS') AND A.LAST_CALL_ET >= 60 * 60 * 10) > 0 then (select 11 || '|' || 2 || '|' || 'Database Performance Analysis.Session.Exceed10Sessions unresponsive for hours' || '|' || 'Exceed10Sessions unresponsive for hours can be considered to bekillkill to free resources' || '|' || '

    [Ref:Exceed10Sessions unresponsive for hours]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (select count(*) from (SELECT g.inst_id,sum(pinhits) / sum(pins) FROM Gv$librarycache g group by g.inst_id having sum(pinhits) / sum(pins)<0.95)) >0 then (select 12 || '|' || 2 || '|' || 'Database Performance Analysis.Memory Usage.Hit Ratio' || '|' || 'Below 95%,Need to adjust application to use bind variables,Or adjust database parametershared_pool_sizeSize of' || '|' || '

    [Ref:librarycache Overall Hit Ratio]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT count(1) FROM (SELECT TABLESPACE_NAME,d.CON_ID, SUM(BYTES) all_bytes FROM cdb_data_files d GROUP BY TABLESPACE_NAME,d.CON_ID) a, (SELECT TABLESPACE_NAME,d.CON_ID,SUM(BYTES) FREESIZ FROM cdb_free_space d GROUP BY TABLESPACE_NAME,d.CON_ID) b where a.TABLESPACE_NAME = b.TABLESPACE_NAME and a.con_id=b.con_id and round((a.all_bytes - b.FREESIZ) / a.all_bytes, 2) > 0.98) > 0 then (select 13 || '|' || 1 || '|' || 'Check Service Overview.Tablespace Status.Tablespace Status Info' || '|' || 'If tablespace usage >98%,Consider increasing tablespace size' || '|' || '

    [Ref:Tablespace Status Info]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT SUM(COUNTS) FROM (SELECT COUNT(1) COUNTS FROM CDB_AUTOTASK_CLIENT D WHERE CLIENT_NAME ='auto optimizer stats collection' UNION ALL SELECT COUNT(1) FROM (SELECT A.WINDOW_NAME, TO_CHAR(WINDOW_NEXT_TIME,'YYYY-MM-DD HH24:MI:SS') WINDOW_NEXT_TIME, WINDOW_ACTIVE, AUTOTASK_STATUS, OPTIMIZER_STATS, SEGMENT_ADVISOR, SQL_TUNE_ADVISOR, B.REPEAT_INTERVAL, B.DURATION, B.ENABLED, B.RESOURCE_PLAN FROM CDB_AUTOTASK_WINDOW_CLIENTS A, (SELECT T1.CON_ID, T1.WINDOW_NAME, T1.REPEAT_INTERVAL, T1.DURATION, T1.ENABLED, T1.RESOURCE_PLAN FROM CDB_SCHEDULER_WINDOWS T1, CDB_SCHEDULER_WINGROUP_MEMBERS T2 WHERE T1.WINDOW_NAME=T2.WINDOW_NAME AND T1.CON_ID=T2.CON_ID AND T2.WINDOW_GROUP_NAME IN ('MAINTENANCE_WINDOW_GROUP', 'BSLN_MAINTAIN_STATS_SCHED')) B WHERE A.WINDOW_NAME = B.WINDOW_NAME AND A.CON_ID = B.CON_ID) AA WHERE AA.AUTOTASK_STATUS = 'ENABLED')) <> (SELECT count(*)*8 FROM v$containers a WHERE a.NAME<>'PDB$SEED' AND A.OPEN_MODE='READ WRITE' ) then (select 14 || '|' || 2 || '|' || 'Database Performance Analysis.Statistics.Are statistics collected automatically' || '|' || 'Database statistics automatic collection is not enabled,Strongly recommend enabling this feature' || '|' || '

    [Ref:Are statistics collected automatically]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(*) FROM v$diag_alert_ext T WHERE T.MESSAGE_TEXT LIKE '%ORA-%' AND trim(t.COMPONENT_ID) = 'rdbms' and t.FILENAME LIKE '%' ||sys_context('USERENV', 'INSTANCE_NAME') || '%' AND t.ORIGINATING_TIMESTAMP >= sysdate - 7) > 0 then (select 15 || '|' || 2 || '|' || 'Database Objects.Other Objects.Alert Log' || '|' || 'Database Alert Log hasoraError,Please check alert log details' || '|' || '

    [Ref:Alert Log]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(*) FROM v$pdbs a where a.OPEN_MODE in ('MOUNTED') or a.RESTRICTED='YES') > 0 then (select 16 || '|' || 2 || '|' || 'Database Overall Summary.Database Basic Info.PDBStatus' || '|' || 'PDBStatus Incorrect' || '|' || '

    [Ref:PDBStatus]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual UNION ALL select case when (SELECT COUNT(*) FROM V$CONTROLFILE a) < 2 then (select 17 || '|' || 2 || '|' || 'Check Service Overview.Tablespace Status.Control File' || '|' || 'Control file not mirrored,Recommend mirroring control file' || '|' || '

    [Ref:Control File]

    ' CHECK_MESSAGE_DETAIL_LINK from dual) end from dual ) where SUBSTR(health_check_results, instr(health_check_results, '|', 1) + 1, 1) is not null) V; prompt

    [Back to Contents][Errors generated during health check script execution]

    host echo Generate latestAWRReport.... ------------------------------------------------------------------------------------------------------------------------- ------------------------------ Generate latestAWRReport ------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------- set termout off set echo off set feedback off set verify off set wrap on set trimspool on set serveroutput off set escape off set sqlblanklines off SET MARKUP HTML OFF PREFORMAT OFF entmap on set linesize 4000 ; set pagesize 0 ; set newpage 1 ; set feed off; set heading off prompt


    prompt
    prompt prompt ● The LatestAWRReport
    prompt NOTE: SQLScript : SELECT * FROM table(dbms_workload_repository.awr_report_html(&_dbid,&_instance_number,&_snap_id,&_snap_id1)); prompt             SELECT * FROM table(dbms_workload_repository.awr_report_html(&_dbid,&_instance_number,&_snap_id,&_snap_id1)); prompt             prompt
    [Back to Contents][Back toAWR]

    host echo Generate latestASHReport.... ------------------------------------------------------------------------------------------------------------------------- ------------------------------ Generate latestASHReport ------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------- set termout off set echo off set feedback off set verify off set wrap on set trimspool on set serveroutput off set escape off set sqlblanklines off SET MARKUP HTML OFF PREFORMAT OFF entmap on set linesize 4000 ; set pagesize 0 ; set newpage 1 ; set feed off; set heading off prompt


    prompt
    prompt prompt ● The LatestASHReport
    prompt NOTE: SQLScript : SELECT * FROM table(dbms_workload_repository.ash_report_html(&_dbid,&_instance_number,(SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id = &_ash_snap_id),(SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id = &_ash_snap_id1))); prompt             SELECT * FROM table(dbms_workload_repository.ash_report_html(&_dbid, &_instance_number, (SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id = &_ash_snap_id AND a.INSTANCE_NUMBER = &_instance_number), (SELECT a.end_interval_time FROM dba_hist_ash_snapshot a WHERE a.snap_id = &_ash_snap_id1 AND a.INSTANCE_NUMBER = &_instance_number))); prompt             prompt
    [Back to Contents] [Back toASH]

    host echo Generate the longest running SQLSQLReport.... ------------------------------------------------------------------------------------------------------------------------- ------------------------------ Generate the longest running SQLSQLReport ------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------- set termout off set echo off set feedback off set verify off set wrap on set trimspool on set serveroutput off set escape off set sqlblanklines off SET MARKUP HTML OFF PREFORMAT OFF entmap on set linesize 4000 ; set pagesize 0 ; set newpage 1 ; set feed off; set heading off prompt


    prompt
    prompt prompt ● The one with longest execution timeSQLReport
    prompt NOTE: SQLScript : SELECT * FROM table(dbms_workload_repository.awr_sql_report_html(&_dbid,&_instance_number, &_snap_id,&_snap_id1, &_sqlid)) ; prompt             SELECT * FROM table(dbms_workload_repository.awr_sql_report_html(&_dbid,&_instance_number, &_snap_id,&_snap_id1, &_sqlid)); prompt             prompt
    [Back to Contents] [Back toSQLPart]

    host echo Database script execution finished.... ------------------------------------------------------------------------------------------------------------------------- ------------------------------ Report End ------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------- COLUMN date_time_end NEW_VALUE _date_time_end NOPRINT SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') date_time_end FROM dual; prompt


    prompt
    Database Health Check Report End
    prompt prompt NOTE: End Time:&_date_time_end prompt prompt prompt
    [Back to Contents]

    -- +----------------------------------------------------------------------------+ -- | - Error Checks in Report - | -- +----------------------------------------------------------------------------+ prompt


    prompt
    set termout off set echo off set feedback off set heading off set verify off set wrap on set trimspool on set serveroutput on set escape on set sqlblanklines on set ARRAYSIZE 500 set pagesize 50000 set linesize 32767 set numwidth 18 set long 2000000000 LONGCHUNKSIZE 100000 clear buffer computes columns alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:mi:ss'; set termout off set heading on set markup html on spool on preformat off entmap on - head ' - &_dbname1 Check Report - ' - body 'BGCOLOR="#C0C0C0"' SET MARKUP html TABLE 'border="1" summary="Script output" cellspacing="0px" style="border-collapse:collapse;" ' set markup html on ENTMAP OFF prompt prompt Errors generated during health check script execution
    prompt NOTE: This part is not part of the health check report content,Only for executor to debug script,Individual errors are normal CLEAR COLUMNS COMPUTES SET DEFINE OFF COLUMN username FORMAT a10 HEADING 'username' ENTMAP OFF COLUMN timestamp FORMAT a180 HEADING '           timestamp           ' ENTMAP OFF SET DEFINE ON SELECT d.username, to_char(d.timestamp,'YYYY-MM-DD HH24:MI:SS') timestamp, D.SCRIPT, d.identifier, D.MESSAGE, D.STATEMENT FROM SPERRORLOG d WHERE identifier='LHR_DB_HEALTHCHECK'; prompt
    [Back to Contents][Health Check Report Results]

    SPOOL OFF set errorlogging off delete from sperrorlog where identifier='LHR_DB_HEALTHCHECK'; COMMIT; SET TERMOUT ON SET MARKUP HTML OFF PREFORMAT OFF entmap on prompt prompt Health check report generated in current directory(Please ensure currentOSUser has write permission on current directory): &_reporttitle..html prompt Health Check Script Finished! exit EXIT

  •