0
点赞
收藏
分享

微信扫一扫

oracle巡检sql

小禹说财 2022-08-05 阅读 189

SET DEF ^
SET AUTOPRINT ON
SET ECHO OFF FEED OFF VER OFF SHOW OFF HEA OFF LIN 2000 NEWP NONE PAGES 0 SQLC MIX TAB ON TRIMS ON TI OFF TIMI OFF ARRAY 100 NUMF "" SQLP SQL> SUF sql BLO . RECSEP OFF APPI OFF;
SET LONG 20000 LONGCHUNK 20000COL database_name_short NEW_V database_name_short FOR A10;
SELECT UPPER(SUBSTR(SYS_CONTEXT('USERENV', 'DB_NAME'), 1, 10)) database_name_short FROM DUAL;
SELECT SUBSTR('^^database_name_short.', 1, INSTR('^^database_name_short..', '.') - 1) database_name_short FROM DUAL;
SELECT TRANSLATE('^^database_name_short.',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ''`~!@#$%^*()-_=+[]{}\|;:",.<>/?'||CHR(0)||CHR(9)||CHR(10)||CHR(13)||CHR(38),
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') database_name_short FROM DUAL;
COL host_name_short NEW_V host_name_short FOR A30;
SELECT SUBSTR(SYS_CONTEXT('USERENV', 'SERVER_HOST'), 1, 30) host_name_short FROM DUAL;
SELECT SUBSTR('^^host_name_short.', 1, INSTR('^^host_name_short..', '.') - 1) host_name_short FROM DUAL;
SELECT TRANSLATE('^^host_name_short.',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ''`~!@#$%^*()-_=+[]{}\|;:",.<>/?'||CHR(0)||CHR(9)||CHR(10)||CHR(13)||CHR(38),
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') host_name_short FROM DUAL;
COL rdbms_version NEW_V rdbms_version FOR A17;
SELECT version rdbms_version FROM v$instance;
COL rdbms_role NEW_V rdbms_role FOR A7;
select substr(DATABASE_ROLE,-7,7) rdbms_role from v$database;
COL rdbms_type NEW_V rdbms_type FOR A7;
select decode(PARALLEL,'YES','RAC_'||INSTANCE_NUMBER,'NO','SINGLE') rdbms_type from v$instance;
COL time_stamp NEW_V time_stamp FOR A15;
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') time_stamp FROM DUAL;variable L_DBID number;
variable L_INST_NUM number;
variable beg_snap number;
variable end_snap number;
variable snap_sec number;
variable orabase varchar2(4000);
variable orahome varchar2(4000);begin
select (extract(hour from snap_interval)*60+extract(minute from snap_interval))*60 into :snap_sec from dba_hist_wr_control;
select max(snap_id)-5 into :beg_snap from dba_hist_snapshot;
select max(snap_id) into :end_snap from dba_hist_snapshot;
select dbid into :L_DBID from v$database;
select instance_number into :L_INST_NUM from v$instance;
end;
/EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',FALSE);
alter session set nls_timestamp_format='YYYY-MM-DD HH24:MI:SS';
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';SPO dbcheck_087_^^database_name_short._^^rdbms_role._^^rdbms_type._^^host_name_short._^^rdbms_version._^^time_stamp..html;
PRO <html>
PRO
PRO <head>
PRO <title>dbcheck_^^database_name_short._^^rdbms_role._^^rdbms_type._^^host_name_short._^^rdbms_version._^^time_stamp..html</title>
PRO
PRO <style type="text/css">
PRO body {font:8pt Arial,Helvetica,Verdana,Geneva,sans-serif; color:black; background:white;}
PRO pre {font:8pt Monaco,"Courier New",Courier,monospace;}
PRO h1 {font-size:15pt; font-weight:bold; color:#000000;}
PRO h2 {font-size:10pt; font-weight:bold; color:#000000;}
PRO li {font-size:8pt; font-weight:bold; color:#336699; padding:0.1em 0 0 0;}
PRO table {font-size:8pt; color:black; background:white;}
PRO th {font-weight:bold; background:#336699; color:#ffffff; vertical-align:bottom; padding-left:3pt; padding-right:3pt; padding-top:1pt; padding-bottom:1pt;}
PRO th.l {font-weight:bold; background:#986634; color:#ffffff; vertical-align:bottom; padding-left:3pt; padding-right:3pt; padding-top:1pt; padding-bottom:1pt;}
PRO a {font-weight:bold; text-decoration: none; color: white;}
PRO td {text-align:left; background:#ffffff; vertical-align:top; padding-left:3pt; padding-right:3pt; padding-top:1pt; padding-bottom:1pt; }
PRO td.w {font:8pt Arial,Helvetica,Geneva,sans-serif;color:black;background:White; vertical-align:top;}
PRO td.y {font:8pt Arial,Helvetica,Geneva,sans-serif;color:black;background:#FFFFCC; vertical-align:top;}
PRO td.x {font:8pt Arial,Helvetica,Geneva,sans-serif;color:black;background:#FF99CC; vertical-align:top;}
PRO td.c {text-align:center;}
PRO td.l {text-align:left;}
PRO td.r {text-align:right;}
PRO font.n {font-size:8pt; font-style:italic; color:#336699;}
PRO font.f {font-size:8pt; color:#999999;}
PRO </style>
PRO
PRO </head>
PRO <body>
PRO <h1>Oracle Database Health Check Report v0.8.7 - ^^database_name_short. </h1>
PRO <h2>Support Oracle Database Version 11gR2,12c,18c</h2>
PRO <h2>Oracle<h2>
PRO <h2>dbcheck<h2>
PRO <hr />
PRO <h2> </h2>
PROPRO <h1>Main Report</h1>
PRO <ul>
PRO <li><a style="color:#663300" href="#10">1. Database Information</a></li>
PRO <li><a style="color:#663300" href="#20">2. Schema Information</a></li>
PRO <li><a style="color:#663300" href="#30">3. ASM Configure</a></li>
PRO <li><a style="color:#663300" href="#40">4. Performance</a></li>
PRO <li><a style="color:#663300" href="#50">5. Backup and Recover</a></li>
PRO </ul>
PRO <hr />
PROPRO <a name="10"></a>
PRO <h1>1. Database Information</h1>
PRO <ul>
PRO <li><a style="color:#663300" href="#101">1.1 Database Info</a></li>
PRO <li><a style="color:#663300" href="#102">1.2 Database Size Detail</a></li>
PRO <li><a style="color:#663300" href="#103">1.3 Database Component and Patch</a></li>
PRO <li><a style="color:#663300" href="#104">1.4 Database Parameter</a></li>
PRO <li><a style="color:#663300" href="#105">1.5 Memory Info</a></li>
PRO <li><a style="color:#663300" href="#106">1.6 SGA Dynamic Components</a></li>
PRO <li><a style="color:#663300" href="#107">1.7 Control File</a></li>
PRO <li><a style="color:#663300" href="#108">1.8 Log File</a></li>
PRO <li><a style="color:#663300" href="#109">1.9 Tablespace Usage</a></li>
PRO <li><a style="color:#663300" href="#110">1.10 Datafile Information</a></li>
PRO <li><a style="color:#663300" href="#113">1.11 Resource Limit</a></li>
PRO <li><a style="color:#663300" href="#114">1.12 Serivce</a></li>
PRO <li><a style="color:#663300" href="#115">1.13 SYSDBA User</a></li>
PRO <li><a style="color:#663300" href="#117">1.14 Autotask</a></li>
PRO <li><a style="color:#663300" href="#118">1.15 DST Check</a></li>
PRO <li><a style="color:#663300" href="#119">1.16 Audit</a></li>
PRO </ul>
PRO <hr />PRO <a name="101"></a>
PRO <h2>1.1 Database Info</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="200">Option</th>
PRO <th width="600">Values</th>
PRO </tr>
SELECT '<tr><td class=y>'||'DB Name' ||'</td><td>'||value||'</td></tr>' from v$parameter where name='db_name';
SELECT '<tr><td class=y>'||'DB Unique name' ||'</td><td>'||value||'</td></tr>' from v$parameter where name='db_unique_name';
SELECT '<tr><td class=y>'||'Instance Name' ||'</td><td>'||listagg(instance_name,' & ') within group (order by instance_name)||'</td></tr>' from gv$instance;
SELECT '<tr><td class=y>'||'DB Startup Time' ||'</td><td>'||to_char(startup_time, 'YYYY-MM-DD HH24:MI:SS')||'</td></tr>' from v$instance;
SELECT '<tr><td class=y>'||'CPU Information' ||'</td><td>'||(select to_char(value)||' Sockets, ' T from v$osstat where stat_name='NUM_CPU_SOCKETS')||(select to_char(value)||' Cores, ' T from v$osstat where stat_name='NUM_CPU_CORES')||(select TO_CHAR(value)||' Threads. ' T FROM v$osstat WHERE stat_name='NUM_CPUS')||'</td></tr>' from dual;
SELECT '<tr><td class=y>'||'Physical Memory Size' ||'</td><td>'||min(to_char(round(value/1024/1024,0)))||' MB</td></tr>' from gv$osstat where stat_name='PHYSICAL_MEMORY_BYTES';
SELECT '<tr><td class=y>'||'OS Platform' ||'</td><td>'||dbms_utility.port_string||'</td></tr>' from dual;
SELECT '<tr><td class=y>'||'RDBMS Release' ||'</td><td>'||banner||'</td></tr>' from v$version where rownum < 2;
SELECT '<tr><td class=y>'||'NLS_TERRITORY' ||'</td><td>'||value||'</td></tr>' from v$nls_parameters where parameter='NLS_TERRITORY';
SELECT '<tr><td class=y>'||'NLS_LANGUAGE' ||'</td><td>'||value||'</td></tr>' from v$nls_parameters where parameter='NLS_LANGUAGE';
SELECT '<tr><td class=y>'||'NLS_CHARACTERSET' ||'</td><td>'||value||'</td></tr>' from v$nls_parameters where parameter='NLS_CHARACTERSET';
SELECT '<tr><td class=y>'||'NLS_NCHAR_CHARACTERSET' ||'</td><td>'||value||'</td></tr>' from v$nls_parameters where parameter='NLS_NCHAR_CHARACTERSET';
SELECT '<tr><td class=y>'||'DB_BLOCK_SIZE' ||'</td><td>'||value||'</td></tr>' from v$parameter where name='db_block_size';
SELECT '<tr><td class=y>'||'Number of Concurrent Users' ||'</td><td>'||count(*)||'</td></tr>' from gv$session where username is not null;
SELECT '<tr><td class=y>'||'Number of Active Concurrent Users'||'</td><td>'||count(*)||'</td></tr>' from gv$session where username is not null and sid not in (select sid from v$mystat) and status='ACTIVE';
SELECT '<tr><td class=y>'||'Redo Log Generation Rate (KB/H)' ||'</td><td>'||TO_CHAR(SUM(BLOCKS*BLOCK_SIZE)/1024/168,99999999.99)||'</td></tr>' from V$ARCHIVED_LOG where FIRST_TIME > sysdate -7;
SELECT '<tr><td class=y>'||'Max Object ID' ||'</td><td '||case when max(data_object_id)>100000000 then 'class=x' else null end||'>'||max(data_object_id)||'</td></tr>' from dba_objects;
SELECT '<tr><td class=y>'||'Current SCN' ||'</td><td '||case when current_scn>5000000000000 then 'class=x' else null end||'>'||current_scn||'</td></tr>' from v$database;
SELECT '<tr><td class=y>'||'Max SCN Increment per Sec' ||'</td><td '||case when round(max(scn_inc)/:snap_sec)>10000 then 'class=x' else null end||'>'||round(max(scn_inc)/:snap_sec) ||'</td></tr>' from (select snap_id,c1-lag(c1, 1) over(order by snap_id) scn_inc from(select SNAP_ID,sum(VALUE) c1 from DBA_HIST_SYSSTAT where STAT_NAME='calls to kcmgas' group by snap_id));
SELECT '<tr><td class=y>'||'SCN Health Check(Days)' ||'</td><td '||case when v.indicator < 10 then 'class=x' else null end||'>'||v.indicator||'</td></tr>' from (select current_scn,indicator from (select to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') DATE_TIME, current_scn,trunc((((((to_number(to_char(sysdate,'YYYY'))-1988)*12*31*24*60*60)+((to_number(to_char(sysdate,'MM'))-1)*31*24*60*60)+(((to_number(to_char(sysdate,'DD'))-1))*24*60*60)+(to_number(to_char(sysdate,'HH24'))*60*60)+(to_number(to_char(sysdate,'MI'))*60)+(to_number(to_char(sysdate,'SS'))) ) * (16*1024)) - current_scn ) / (16*1024*60*60*24)) indicator from v$database)) v;
SELECT '<tr><td class=y>'||'Datafile File Number Useage(%)' ||'</td><td '||case when round(100*(select count(*) from dba_data_files)/(select value from v$parameter where name='db_files'),2)>80 then 'class=x' else null end||'>'||round(100*(select count(*) from dba_data_files)/(select value from v$parameter where name='db_files'),2)||'</td></tr>' from dual;
SELECT '<tr><td class=y>'||'Bitcoin Hacker Checking' ||'</td><td '||case when count(*)>0 then 'class=x' else null end||'>'||count(*)||'</td></tr>' from dba_objects where object_name like '%DBMS_CORE_INTERNAL%' or object_name like '%DBMS_SYSTEM_INTERNAL%' or object_name like '%DBMS_SUPPORT_INTERNAL%' or object_name like '%DBMS_STANDARD_FUN9%';
SELECT '<tr><td class=y>'||'Force Logging Enabled?' ||'</td><td>'||force_logging||'</td></tr>' from v$database;
SELECT '<tr><td class=y>'||'Supplemental Log Enabled?' ||'</td><td>'||supplemental_log_data_min||'</td></tr>' from v$database;
SELECT '<tr><td class=y>'||'Flashback Enabled?' ||'</td><td '||case when flashback_on = 'YES' then 'class=x' else null end||'>'||flashback_on||'</td></tr>' from v$database;
SELECT '<tr><td class=y>'||'Archiving Enabled?' ||'</td><td '||case when decode(log_mode,'ARCHIVELOG','YES','NO') = 'NO' then 'class=x' else null end||'>'||decode(log_mode,'ARCHIVELOG','YES','NO')||'</td></tr>' from v$database;
PRO </table> PRO <a name="102"></a>
PRO <h2>1.2 Database Size Detail</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="100">ID </th>
PRO <th width="100">Segment </th>
PRO <th width="100">Contorlfile </th>
PRO <th width="100">Tablespace </th>
PRO <th width="100">Datafile </th>
PRO <th width="100">Tempfile </th>
PRO <th width="100">Online Logfile </th>
PRO <th width="100">Standby Logfile</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.id ||'</td>'||CHR(10)||
'<td>'||v.segment ||'</td>'||CHR(10)||
'<td>'||v.contorlfile||'</td>'||CHR(10)||
'<td>'||v.tablespaces||'</td>'||CHR(10)||
'<td>'||v.datafile ||'</td>'||CHR(10)||
'<td>'||v.tempfile ||'</td>'||CHR(10)||
'<td>'||v.onlinelog ||'</td>'||CHR(10)||
'<td>'||v.standbylog ||'</td>'||CHR(10)||
'</tr>'
FROM (select '1.Object Count' id,
(select count(*) from dba_segments) segment,
(select count(*) from v$controlfile) contorlfile,
(select count(*) from v$tablespace) tablespaces,
(select count(*) from dba_data_files) datafile,
(select count(*) from dba_temp_files) tempfile,
(select count(*) from v$logfile where TYPE='ONLINE') onlinelog,
(select count(*) from v$logfile where TYPE='STANDBY') standbylog
from dual
union all
select '2.Size(GB)',
(select round(sum(bytes)/1024/1024/1024,2) from dba_segments),
(select round(sum(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024/1024) from v$controlfile),
null,
(select round(sum(bytes)/1024/1024/1024,2) from dba_data_files),
(select round(sum(bytes)/1024/1024/1024,2) from dba_temp_files),
(select round(sum((bytes*cnt)/1024/1024/1024),2) from
(select l.group#,s.bytes,count(l.member) cnt from V$logfile l,v$log s
where l.group#=s.group# and l.TYPE='ONLINE' group by l.group#,s.bytes)),
(select round(sum((bytes*cnt)/1024/1024/1024),2) from
(select l.group#,s.bytes,count(l.member) cnt from V$logfile l,v$standby_log s
where l.group#=s.group# and l.TYPE='STANDBY' group by l.group#,s.bytes))
from dual order by 1) v;
PRO </table> PRO <a name="1021"></a>
PRO <h2>1.21 Database Size Detail for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="100">ID </th>
PRO <th width="100">Segment </th>
PRO <th width="100">Contorlfile </th>
PRO <th width="100">Tablespace </th>
PRO <th width="100">Datafile </th>
PRO <th width="100">Tempfile </th>
PRO <th width="100">Online Logfile </th>
PRO <th width="100">Standby Logfile</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.id ||'</td>'||CHR(10)||
'<td>'||v.segment ||'</td>'||CHR(10)||
'<td>'||v.contorlfile||'</td>'||CHR(10)||
'<td>'||v.tablespaces||'</td>'||CHR(10)||
'<td>'||v.datafile ||'</td>'||CHR(10)||
'<td>'||v.tempfile ||'</td>'||CHR(10)||
'<td>'||v.onlinelog ||'</td>'||CHR(10)||
'<td>'||v.standbylog ||'</td>'||CHR(10)||
'</tr>'
FROM (select '1.Object Count' id,
(select count(*) from cdb_segments) segment,
(select count(*) from v$controlfile) contorlfile,
(select count(*) from v$tablespace) tablespaces,
(select count(*) from cdb_data_files) datafile,
(select count(*) from cdb_temp_files) tempfile,
(select count(*) from v$logfile where TYPE='ONLINE') onlinelog,
(select count(*) from v$logfile where TYPE='STANDBY') standbylog
from dual
union all
select '2.Size(GB)',
(select round(sum(bytes)/1024/1024/1024,2) from cdb_segments),
(select round(sum(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024/1024) from v$controlfile),
null,
(select round(sum(bytes)/1024/1024/1024,2) from cdb_data_files),
(select round(sum(bytes)/1024/1024/1024,2) from cdb_temp_files),
(select round(sum((bytes*cnt)/1024/1024/1024),2) from
(select l.group#,s.bytes,count(l.member) cnt from V$logfile l,v$log s
where l.group#=s.group# and l.TYPE='ONLINE' group by l.group#,s.bytes)),
(select round(sum((bytes*cnt)/1024/1024/1024),2) from
(select l.group#,s.bytes,count(l.member) cnt from V$logfile l,v$standby_log s
where l.group#=s.group# and l.TYPE='STANDBY' group by l.group#,s.bytes))
from dual order by 1) v;
PRO </table>PRO <a name="103"></a>
PRO <h2>1.3 Database Component and Patch</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="20%">Component ID </th>
PRO <th width="40%">Component Name</th>
PRO <th width="10%">Version </th>
PRO <th width="10%">Status </th>
PRO <th width="20%">Modify Time </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.comp_id ||'</td>'||CHR(10)||
'<td>'||v.comp_name||'</td>'||CHR(10)||
'<td>'||v.version ||'</td>'||CHR(10)||
'<td '||case when v.status != 'VALID' then 'class=x' else null end||'>'||v.status||'</td>'||CHR(10)||
'<td>'||to_char(to_date(v.modified,'DD-Mon-YYYY HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')||'</td>'||CHR(10)||
'</tr>'
FROM (select comp_id,comp_name,version,status,modified from dba_registry order by 1) v;
PRO <tr>
PRO <th width="20%">Patch ID </th>
PRO <th width="40%">Comments </th>
PRO <th width="10%">Version </th>
PRO <th width="10%">Action </th>
PRO <th width="20%">Action Time</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.id ||'</td>'||CHR(10)||
'<td>'||v.comments ||'</td>'||CHR(10)||
'<td>'||v.version ||'</td>'||CHR(10)||
'<td>'||v.action ||'</td>'||CHR(10)||
'<td>'||v.action_time||'</td>'||CHR(10)||
'</tr>'
FROM (select id,comments,version,action,action_time from dba_registry_history order by action_time) v;
PRO </table> PRO <a name="104"></a>
PRO <h2>1.4 Database Parameter</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="15%">Name </th>
PRO <th width="10%">Sid </th>
PRO <th width="25%">Spfile Value </th>
PRO <th width="25%">Current Value</th>
PRO <th width="25%">Check Detail </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name||'</td>'||CHR(10)||
'<td>'||v.sid ||'</td>'||CHR(10)||
'<td>'||v.spvalue||'</td>'||CHR(10)||
'<td '||case when v.name='processes' and v.value<500 then 'class=x'
when v.name='sessions' and v.value<500 then 'class=x'
when v.name='db_files' and v.value<500 then 'class=x'
when v.name='spfile' and v.value is null then 'class=x'
when v.name='optimizer_adaptive_features' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='optimizer_adaptive_plans' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='optimizer_adaptive_statistics' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='_optimizer_use_feedback' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='max_string_size' and decode(upper(value),'STANDARD','NO','YES')='NO' then 'class=x'
when v.name='statistics_level' and decode(upper(value),'TYPICAL','YES','NO')='NO' then 'class=x'
when v.name='control_file_record_keep_time' and v.value<10 then 'class=x'
when v.name='_use_adaptive_log_file_sync' and decode(value,'FALSE','YES','NO')='NO' then 'class=x'
when v.name='fast_start_parallel_rollback' and decode(value,'HIGH','NO','YES')='NO' then 'class=x'
when v.name='_datafile_write_errors_crash_instance' and decode(value,'FALSE','YES','NO')='NO' then 'class=x'
when v.name='max_dump_file_size' and decode(value,'unlimited','NO','YES')='NO' then 'class=x'
when v.name='parallel_max_servers' and v.value > (select value*4 from v$parameter where name='cpu_count') then 'class=x'
when v.name='deferred_segment_creation' and decode(upper(value),'TRUE','NO','YES')='NO' then 'class=x'
when v.name='open_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME IN ('opened cursors current', 'session cursor cache count') AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'class=x'
when v.name='session_cached_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME ='session cursor cache count' AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'class=x'
else null end||'>'||v.value||'</td>'||CHR(10)||
'<td>'||case when v.name='processes' and v.value<500 then 'Processes is small than 500.'
when v.name='sessions' and v.value<500 then 'Sessions is small than 500.'
when v.name='db_files' and v.value<500 then 'Db_files is small than 500.'
when v.name='spfile' and v.value is null then 'Instance Not Starup from SPFILE.'
when v.name='optimizer_adaptive_features' and decode(value,'TRUE','NO','YES')='NO' then 'Optimizer_adaptive is Enabled,Plan may be Change.'
when v.name='optimizer_adaptive_plans' and decode(value,'TRUE','NO','YES')='NO' then 'optimizer_adaptive_plans is Enabled,Plan may be Change.'
when v.name='optimizer_adaptive_statistics' and decode(value,'TRUE','NO','YES')='NO' then 'optimizer_adaptive_statistics is Enabled,Plan may be Change.'
when v.name='_optimizer_use_feedback' and decode(value,'TRUE','NO','YES')='NO' then 'Optimizer Feedback is Enabled,Plan may be Change.'
when v.name='max_string_size' and decode(upper(value),'STANDARD','NO','YES')='NO' then 'VARCHAR2 Maximum Not Support 32k.'
when v.name='statistics_level' and decode(upper(value),'TYPICAL','YES','NO')='NO' then 'Statistics Level is not Typical.'
when v.name='control_file_record_keep_time' and v.value<10 then 'Controlfile Record Maybe to Small.'
when v.name='_use_adaptive_log_file_sync' and decode(value,'FALSE','YES','NO')='NO' then 'OLTP Should not used Adaptive Log File Sync.'
when v.name='fast_start_parallel_rollback' and decode(value,'HIGH','NO','YES')='NO' then 'Parallel Rollback is HIGH.'
when v.name='_datafile_write_errors_crash_instance' and decode(value,'FALSE','YES','NO')='NO' then 'Instance May Crash when Datafile Write Failed.'
when v.name='max_dump_file_size' and decode(value,'unlimited','NO','YES')='NO' then 'Max Size of Tracefile is Unlimited.'
when v.name='parallel_max_servers' and v.value > (select value*4 from v$parameter where name='cpu_count') then 'Max Parallel Processed is seting too High.'
when v.name='deferred_segment_creation' and decode(upper(value),'TRUE','NO','YES')='NO' then 'Deferred Segment Creation Not Disable, EXPDP may report Error.'
when v.name='open_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME IN ('opened cursors current', 'session cursor cache count') AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'Open Cursor is over 80% Full.'
when v.name='session_cached_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME ='session cursor cache count' AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'session_cached_cursors Sholud Be inc.'
else null end||'</td>'||CHR(10)||
'</tr>'
FROM (select distinct s.name,s.sid,s.value spvalue,p.value value from v$spparameter s,gv$parameter p
where s.name=p.name
and (s.value is not null
or (p.name in ('statistics_level','processes','sessions','db_files','spfile','optimizer_adaptive_features','optimizer_adaptive_plans',
'optimizer_adaptive_statistics','max_string_size','control_file_record_keep_time','_use_adaptive_log_file_sync','fast_start_parallel_rollback',
'_datafile_write_errors_crash_instance','max_dump_file_size','parallel_max_servers','deferred_segment_creation','_optimizer_use_feedback',
'open_cursors','session_cached_cursors')))
and p.name not in ('thread','instance_name','instance_number','undo_tablespace','local_listener','remote_listener','lisneter_network','control_files')
order by s.name) v;
PRO </table> PRO <a name="1041"></a>
PRO <h2>1.41 Database Parameter for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="15%">Con Name </th>
PRO <th width="15%">Name </th>
PRO <th width="10%">Sid </th>
PRO <th width="25%">Spfile Value </th>
PRO <th width="25%">Current Value</th>
PRO <th width="25%">Check Detail </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||con_name||'</td>'||CHR(10)||
'<td>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.sid ||'</td>'||CHR(10)||
'<td>'||v.spvalue||'</td>'||CHR(10)||
'<td '||case when v.name='processes' and v.value<500 then 'class=x'
when v.name='sessions' and v.value<500 then 'class=x'
when v.name='db_files' and v.value<500 then 'class=x'
when v.name='spfile' and v.value is null then 'class=x'
when v.name='optimizer_adaptive_features' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='optimizer_adaptive_plans' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='optimizer_adaptive_statistics' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='_optimizer_use_feedback' and decode(value,'TRUE','NO','YES')='NO' then 'class=x'
when v.name='max_string_size' and decode(upper(value),'STANDARD','NO','YES')='NO' then 'class=x'
when v.name='statistics_level' and decode(upper(value),'TYPICAL','YES','NO')='NO' then 'class=x'
when v.name='control_file_record_keep_time' and v.value<10 then 'class=x'
when v.name='_use_adaptive_log_file_sync' and decode(value,'FALSE','YES','NO')='NO' then 'class=x'
when v.name='fast_start_parallel_rollback' and decode(value,'HIGH','NO','YES')='NO' then 'class=x'
when v.name='_datafile_write_errors_crash_instance' and decode(value,'FALSE','YES','NO')='NO' then 'class=x'
when v.name='max_dump_file_size' and decode(value,'unlimited','NO','YES')='NO' then 'class=x'
when v.name='parallel_max_servers' and v.value > (select value*4 from v$parameter where name='cpu_count') then 'class=x'
when v.name='deferred_segment_creation' and decode(upper(value),'TRUE','NO','YES')='NO' then 'class=x'
when v.name='open_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME IN ('opened cursors current', 'session cursor cache count') AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'class=x'
when v.name='session_cached_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME ='session cursor cache count' AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'class=x'
else null end||'>'||v.value||'</td>'||CHR(10)||
'<td>'||case when v.name='processes' and v.value<500 then 'Processes is small than 500.'
when v.name='sessions' and v.value<500 then 'Sessions is small than 500.'
when v.name='db_files' and v.value<500 then 'Db_files is small than 500.'
when v.name='spfile' and v.value is null then 'Instance Not Starup from SPFILE.'
when v.name='optimizer_adaptive_features' and decode(value,'TRUE','NO','YES')='NO' then 'Optimizer_adaptive is Enabled,Plan may be Change.'
when v.name='optimizer_adaptive_plans' and decode(value,'TRUE','NO','YES')='NO' then 'optimizer_adaptive_plans is Enabled,Plan may be Change.'
when v.name='optimizer_adaptive_statistics' and decode(value,'TRUE','NO','YES')='NO' then 'optimizer_adaptive_statistics is Enabled,Plan may be Change.'
when v.name='_optimizer_use_feedback' and decode(value,'TRUE','NO','YES')='NO' then 'Optimizer Feedback is Enabled,Plan may be Change.'
when v.name='max_string_size' and decode(upper(value),'STANDARD','NO','YES')='NO' then 'VARCHAR2 Maximum Not Support 32k.'
when v.name='statistics_level' and decode(upper(value),'TYPICAL','YES','NO')='NO' then 'Statistics Level is not Typical.'
when v.name='control_file_record_keep_time' and v.value<10 then 'Controlfile Record Maybe to Small.'
when v.name='_use_adaptive_log_file_sync' and decode(value,'FALSE','YES','NO')='NO' then 'OLTP Should not used Adaptive Log File Sync.'
when v.name='fast_start_parallel_rollback' and decode(value,'HIGH','NO','YES')='NO' then 'Parallel Rollback is HIGH.'
when v.name='_datafile_write_errors_crash_instance' and decode(value,'FALSE','YES','NO')='NO' then 'Instance May Crash when Datafile Write Failed.'
when v.name='max_dump_file_size' and decode(value,'unlimited','NO','YES')='NO' then 'Max Size of Tracefile is Unlimited.'
when v.name='parallel_max_servers' and v.value > (select value*4 from v$parameter where name='cpu_count') then 'Max Parallel Processed is seting too High.'
when v.name='deferred_segment_creation' and decode(upper(value),'TRUE','NO','YES')='NO' then 'Deferred Segment Creation Not Disable, EXPDP may report Error.'
when v.name='open_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME IN ('opened cursors current', 'session cursor cache count') AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'Open Cursor is over 80% Full.'
when v.name='session_cached_cursors' and v.value*0.8 < (SELECT MAX(SUM(S.VALUE)) FROM V$STATNAME N, V$SESSTAT S WHERE N.NAME ='session cursor cache count' AND S.STATISTIC# = N.STATISTIC# GROUP BY S.SID) then 'session_cached_cursors Sholud Be inc.'
else null end||'</td>'||CHR(10)||
'</tr>'
FROM (select distinct c.name con_name,s.name,s.sid,s.value spvalue,p.value value from v$spparameter s,gv$parameter p,v$containers c
where s.name=p.name
and s.con_id = c.con_id
and (s.value is not null
or (p.name in ('statistics_level','processes','sessions','db_files','spfile','optimizer_adaptive_features','optimizer_adaptive_plans',
'optimizer_adaptive_statistics','max_string_size','control_file_record_keep_time','_use_adaptive_log_file_sync','fast_start_parallel_rollback',
'_datafile_write_errors_crash_instance','max_dump_file_size','parallel_max_servers','deferred_segment_creation','_optimizer_use_feedback',
'open_cursors','session_cached_cursors')))
and p.name not in ('thread','instance_name','instance_number','undo_tablespace','local_listener','remote_listener','lisneter_network','control_files')
order by s.name) v;
PRO </table> PRO <a name="105"></a>
PRO <h2>1.5 Memory Info</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="35%">Option</th>
PRO <th width="65%">Values</th>
PRO </tr>
SELECT '<tr><td class=y>Physical Memory Size</td><td>' ||'' ||TO_CHAR(ROUND(value/1024/1024,0)) ||' MB</td></tr>' FROM v$osstat WHERE stat_name='PHYSICAL_MEMORY_BYTES';
SELECT '<tr><td class=y>SGA+PGA Used Percent(%)</td><td>'||'' ||ROUND(((a.value+b.value)/c.value)*100)||' </td></tr>' FROM (select value from v$pgastat where name='maximum PGA allocated') a,(select value from v$parameter where name='sga_max_size') b,(select value from v$osstat where stat_name='PHYSICAL_MEMORY_BYTES') c;
SELECT '<tr><td class=y>Granule Size</td><td>' ||'' ||TO_CHAR(ROUND(bytes/1024/1024,0)) ||' MB</td></tr>' from v$sgainfo where name='Granule Size';
SELECT '<tr><td class=y>@SGA Max Size</td><td>' ||'@ ' ||TO_CHAR(ROUND(value/1024/1024,0)) ||' MB</td></tr>' FROM v$parameter WHERE name='sga_max_size';
SELECT '<tr><td class=y>@SGA Target</td><td>' ||'@ ' ||TO_CHAR(ROUND(value/1024/1024,0)) ||' MB</td></tr>' FROM v$parameter WHERE name='sga_target';
SELECT '<tr><td class=y>@@'||name||'</td><td>' ||'@@ ' ||TO_CHAR(ROUND(bytes/1024/1024,0)) ||' MB</td></tr>' FROM v$sgainfo where name not in ('Granule Size');
SELECT '<tr><td class=y>@@@'||v.name||'</td><td>' ||'@@@ '||TO_CHAR(ROUND(v.bytes/1024/1024,0)) ||' MB</td></tr>' FROM (select name,bytes from v$sgastat where pool='shared pool' order by bytes desc) v where rownum < 6;
SELECT '<tr><td class=y>@PGA Target</td><td>' ||'@ ' ||TO_CHAR(ROUND(value/1024/1024,0)) ||' MB</td></tr>' FROM v$parameter WHERE name='pga_aggregate_target';
SELECT '<tr><td class=y>@@'||name||'</td><td>' ||'@@ ' ||TO_CHAR(ROUND(value/1024/1024,0)) ||' MB</td></tr>' FROM v$pgastat where unit='bytes';
PRO </table>PRO <a name="106"></a>
PRO <h2>1.6 SGA Dynamic Components</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="100">Component </th>
PRO <th width="100">Curr Granule </th>
PRO <th width="100">Min Granule </th>
PRO <th width="100">Max Granule </th>
PRO <th width="100">Granule Size </th>
PRO <th width="100">Oper Count </th>
PRO <th width="100">Last Oper Time</th>
PRO <th width="100">Last Oper Mode</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.component||'</td>'||CHR(10)||
'<td class=r>'||v.current_granule_count||'</td>'||CHR(10)||
'<td class=r>'||v.min_granule_count ||'</td>'||CHR(10)||
'<td class=r>'||v.max_granule_count ||'</td>'||CHR(10)||
'<td>'||v.granule_size||'</td>'||CHR(10)||
'<td '||case when v.oper_count > 20 then 'class="x r"' else 'class=r' end||'>'||v.oper_count||'</td>'||CHR(10)||
'<td>'||v.last_oper_time||'</td>'||CHR(10)||
'<td>'||v.last_oper_mode||'</td>'||CHR(10)||
'</tr>'
FROM (select component, current_size/granule_size current_granule_count,
min_size/granule_size min_granule_count,
max_size/granule_size max_granule_count,
granule_size, oper_count, last_oper_time,last_oper_mode
from v$sga_dynamic_components) v;
PRO <tr>
PRO <th width="100">Component </th>
PRO <th width="100">Oper Type </th>
PRO <th width="100">Start Time </th>
PRO <th width="100">Duration </th>
PRO <th width="100">Initial Size(MB)</th>
PRO <th width="100">Target Size(MB)</th>
PRO <th width="100">Final Size(MB)</th>
PRO <th width="100">Status </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.component ||'</td>'||CHR(10)||
'<td>'||v.oper_type ||'</td>'||CHR(10)||
'<td>'||v.start_time||'</td>'||CHR(10)||
'<td>'||v.duration ||'</td>'||CHR(10)||
'<td>'||v.init_size ||'</td>'||CHR(10)||
'<td>'||v.targ_size ||'</td>'||CHR(10)||
'<td>'||v.fini_size ||'</td>'||CHR(10)||
'<td>'||v.status ||'</td>'||CHR(10)||
'</tr>'
FROM (select component,oper_type,start_time,
to_char(round((end_time-start_time)*24*3600)) duration,
to_char(round(initial_size/1024/1024,0)) init_size,
to_char(round(target_size/1024/1024,0)) targ_size,
to_char(round(final_size/1024/1024,0)) fini_size,
status from v$sga_resize_ops
where oper_type in ('grow','shrink') and start_time > sysdate -7
union all
select '.',null,null,null,null,null,null,null from dual
order by start_time) v;
PRO </table>PRO <a name="107"></a>
PRO <h2>1.7 Control File</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>ID </th>
PRO <th>Control File Name</th>
PRO <th>Size(MB) </th>
PRO <th>Recode Count </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="80" class=y>'||v.rn||'</td>'||CHR(10)||
'<td>'||v.name||'</td>'||CHR(10)||
'<td '||case when v.sizemb > 512 then 'class="x r"' else 'class=r' end||'>'||v.sizemb||'</td>'||CHR(10)||
'<td '||case when v.cnt > 5000 then 'class="x r"' else 'class=r' end||'>'||v.cnt ||'</td>'||CHR(10)||
'</tr>'
FROM (with a as (select count(*) cnt from V$CONTROLFILE_RECORD_SECTION)
select rownum rn,name,to_char((block_size*file_size_blks/1024/1024),99999.99) sizemb,a.cnt from v$controlfile,a) v;
PRO </table>PRO <a name="108"></a>
PRO <h2>1.8 Log File</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th colspan="17">Check Item</th>
PRO <th colspan="9" >Check Detail</th>
PRO </tr>
SELECT '<tr><td colspan="17" class=y>'||'Are the on-line redo logs the same size?' ||'</td><td colspan="9" ' ||
case when decode(max(bytes)-min(bytes),0,'YES','NO') = 'NO' then 'class=x' else null end ||'>'||
decode(max(bytes)-min(bytes),0,'YES','NO') ||'</td></tr>' from v$log;
SELECT '<tr><td colspan="17" class=y>'||'Are the redo logs being multiplexed by Oracle?' ||'</td><td colspan="9" ' ||
case when decode(avg(members),2,'YES',3,'YES','NO') = 'NO' then 'class=x' else null end ||'>'||
decode(avg(members),2,'YES',3,'YES','NO') ||'</td></tr>' from v$log;
SELECT '<tr><td colspan="17" class=y>'||'RedoLog Size > 4*Log Buffer?' ||'</td><td colspan="9" '||
case when decode(sign((select min(bytes) from v$log) - 4 * value),-1, 'NO','YES')='NO' then 'class=x' else null end ||'>'||
decode(sign((select min(bytes) from v$log) - 4 * value),-1,'NO','YES') ||'</td></tr>' from v$parameter where name = 'log_buffer';
PRO <tr>
PRO <th>Dest ID</th>
PRO <th colspan="2" >Archiver </th>
PRO <th colspan="2" >Status </th>
PRO <th colspan="12">Destination </th>
PRO <th colspan="4" >DB Unique Name</th>
PRO <th colspan="2" >Affirm </th>
PRO <th colspan="3" >Transmit Mode</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.dest_id||'</td>'||CHR(10)||
'<td colspan="2" >'||v.archiver||'</td>'||CHR(10)||
'<td colspan="2" >'||v.status||'</td>'||CHR(10)||
'<td colspan="12">'||v.destination||'</td>'||CHR(10)||
'<td colspan="4" >'||v.db_unique_name||'</td>'||CHR(10)||
'<td colspan="2" '||case when v.affirm='YES' then 'class=x' else null end||'>'||v.affirm||'</td>'||CHR(10)||
'<td colspan="3" '||case when v.transmit_mode='SYNCHRONOUS' and v.dest_id>1 then 'class=x' else null end||'>'||v.transmit_mode||'</td>'||CHR(10)||
'</tr>'
FROM (select dest_id,archiver,status,destination,db_unique_name,affirm,transmit_mode from v$archive_dest where status='VALID') v;
PRO </table>PRO <a name="109"></a>
PRO <h2>1.9 Tablespace Usage</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Tablespace Name </th>
PRO <th>Tablespace Type </th>
PRO <th>BigFile </th>
PRO <th>File Number </th>
PRO <th>Used% </th>
PRO <th>Extent Able Used%</th>
PRO <th>Total(MB) </th>
PRO <th>Used(MB) </th>
PRO <th>Left(MB) </th>
PRO <th>Max Extent(MB) </th>
PRO <th>Is Autoextensible</th>
PRO <th>Max Frag(MB) </th>
PRO <th>FSFI </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.tbsname||'</td>'||CHR(10)||
'<td>'||v.tbstype||'</td>'||CHR(10)||
'<td '||case when v.bigfile = 'YES' then 'class=x' else null end||'>' ||v.bigfile||'</td>'||CHR(10)||
'<td>'||v.count_file ||'</td>'||CHR(10)||
'<td class=r>'||v.used_percent ||'</td>'||CHR(10)||
'<td '||case when (v.used_extent_able_percent > 80 and v.tbsname not like 'UNDO%') then 'class="x r"' else 'class=r' end||'>'||v.used_extent_able_percent||'</td>'||CHR(10)||
'<td class=r>'||v.total_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.used_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.left_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.max_extent_mb||'</td>'||CHR(10)||
'<td '||case when v.extent_able='MIXED' then 'class="x r"' else 'class=r' end||'>'||v.extent_able ||'</td>'||CHR(10)||
'<td '||case when (v.max_fragment_mb < 10 and v.extent_able='NO') then 'class="x r"' else 'class=r' end||'>'||v.max_fragment_mb||'</td>'||CHR(10)||
'<td '||case when (v.fsfi < 30 and v.extent_able='NO' and v.max_fragment_mb < 100 and v.total_mb > 1000) then 'class="x r"' else 'class=r' end||'>'||v.fsfi ||'</td>'||CHR(10)||
'</tr>'
FROM (select a.tablespace_name tbsname,'DATAFILE' tbstype, c.bigfile, a.count_file,
nvl(trunc((1-b.free/a.total)*100),100) used_percent,
nvl(trunc(((a.total-b.free)/decode(a.extent_total,0,a.total,a.extent_total))*100),100) used_extent_able_percent,
nvl(trunc(a.total),0) total_mb,
nvl(trunc(a.total-b.free), 0) used_mb,
nvl(trunc(b.free),0) left_mb,
nvl(trunc(a.extent_total),0) max_extent_mb,
case when a.extent_able=1 then 'YES' when a.extent_able=0 then 'NO' else 'MIXED' end extent_able,
nvl(trunc(max_fragment_mb),0) max_fragment_mb,
nvl(trunc(b.fsfi),0) fsfi
from (select tablespace_name,
sum(nvl(bytes,0))/1024/1024 total,
sum(decode(maxbytes,0,bytes,maxbytes))/1024/1024 extent_total,
avg(decode(autoextensible,'YES',1,'NO',0)) extent_able,
count(file_name) count_file
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(nvl(bytes,0))/1024/1024 free, max(BYTES/1024/1024) max_fragment_mb,
round(sqrt(max(blocks) / sum(blocks)) * (100 / sqrt(sqrt(count(blocks)))),2) fsfi
from dba_free_space
group by tablespace_name) b,
dba_tablespaces c
where a.tablespace_name = c.tablespace_name
and c.tablespace_name = b.tablespace_name(+)
order by tbsname) v;
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.tbsname||'</td>'||CHR(10)||
'<td>'||v.tbstype||'</td>'||CHR(10)||
'<td '||case when v.bigfile = 'YES' then 'class=x' else null end||'>' ||v.bigfile||'</td>'||CHR(10)||
'<td>'||v.count_file ||'</td>'||CHR(10)||
'<td '||case when v.used > 80 then 'class="x r"' else 'class=r' end||'>'||v.used||'</td>'||CHR(10)||
'<td '||case when v.used_extent_able_percent > 80 then 'class="x r"' else 'class=r' end||'>'||v.used_extent_able_percent||'</td>'||CHR(10)||
'<td class=r>'||v.total_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.used_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.left_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.max_extent_mb||'</td>'||CHR(10)||
'<td '||case when v.extent_able='MIXED' then 'class="x r"' else 'class=r' end||'>'||v.extent_able||'</td>'||CHR(10)||
'<td class=r>'||' '||'</td>'||CHR(10)||
'<td class=r>'||' '||'</td>'||CHR(10)||
'</tr>'
FROM (select d.tablespace_name tbsname,'TEMPFILE' tbstype, f.bigfile, d.count_file,
nvl(trunc((1-e.free/d.total)*100),100) used,
nvl(trunc(((d.total-e.free)/decode(d.extent_total,0,d.total,d.extent_total))*100),100) used_extent_able_percent,
nvl(trunc(d.total), 0) total_mb,
nvl(trunc(d.total-e.free), 0) used_mb,
nvl(trunc(e.free), 0) left_mb,
trunc(d.extent_total) max_extent_mb,
case when d.extent_able=1 then 'YES' when d.extent_able=0 then 'NO' else 'MIXED' end extent_able
from (select tablespace_name,
sum(nvl(bytes,0))/1024/1024 total,
sum(decode(maxbytes,0,bytes,maxbytes))/1024/1024 extent_total,
avg(decode(autoextensible,'YES',1,'NO',0)) extent_able,
count(file_name) count_file
from dba_temp_files
group by tablespace_name) d,
(select tablespace_name, sum(nvl(free_space,0))/1024/1024 free
from dba_temp_free_space
group by tablespace_name) e,
dba_tablespaces f
where d.tablespace_name = f.tablespace_name
and f.tablespace_name = e.tablespace_name(+)
order by tbsname) v;
PRO </table>
PRO <a name="1091"></a>
PRO <h2>1.91 Tablespace Usage for pdb</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Con Name </th>
PRO <th>Tablespace Name </th>
PRO <th>ALLOCATED(MB) </th>
PRO <th>USED(MB) </th>
PRO <th>use_% </th>
PRO <th>maxuse_% </th>
PRO </tr>
select CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||n.con_name||'</td>'||CHR(10)||
'<td>'||n.tablespace_name ||'</td>'||CHR(10)||
'<td>'||n.ALLOCATED_MB ||'</td>'||CHR(10)||
'<td>'||n.USED_MB ||'</td>'||CHR(10)||
'<td>'||n.FREE_MB ||'</td>'||CHR(10)||
'<td>'||n.USED_RATE||'</td>'||CHR(10)||
'</tr>'
from
(SELECT v.name con_name,
d.tablespace_name,
NVL(c.bytes / 1024 / 1024, 0) ALLOCATED_MB,
NVL(a.bytes - NVL(f.bytes, 0), 0) / 1024 / 1024 USED_MB,
NVL(c.bytes / 1024 / 1024, 0) - NVL(a.bytes - NVL(f.bytes, 0), 0) / 1024 / 1024 FREE_MB,
TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / c.bytes * 100, 0), '990.00')||'%' as USED_RATE
FROM cdb_tablespaces d,
v$containers v,
(select con_id,tablespace_name, sum(bytes) bytes from cdb_data_files group by con_id,tablespace_name) a,
(select con_id,tablespace_name, sum(bytes) bytes from cdb_free_space group by con_id,tablespace_name) f,
(select con_id,tablespace_name,sum(total_bytes) bytes from (select con_id,file_name,tablespace_name,case when ( AUTOEXTENSIBLE='YES') then MAXBYTES else bytes end total_bytes from cdb_data_files) group by con_id,tablespace_name) c
WHERE d.tablespace_name = c.tablespace_name(+)
AND d.tablespace_name = a.tablespace_name(+)
and d.tablespace_name = f.tablespace_name(+)
and d.con_id = v.con_id
and d.con_id = c.con_id(+)
and d.con_id = a.con_id(+)
and d.con_id = f.con_id(+)
AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')
order by used_rate desc) n;
PRO </table> PRO <a name="110"></a>
PRO <h2>1.10 Datafile Information</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Tablespace Name </th>
PRO <th>File Name </th>
PRO <th>Size(MB) </th>
PRO <th>Max Extent Size(MB)</th>
PRO <th>Is Autoextensible </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.tablespace_name||'</td>'||CHR(10)||
'<td>' ||v.file_name ||'</td>'||CHR(10)||
'<td '||case when (v.autoextensible='YES' and v.size_mb/v.max_size_mb > 80) then 'class="x r"' else 'class=r' end||'>'||v.size_mb||'</td>'||CHR(10)||
'<td class=r>'||v.max_size_mb ||'</td>'||CHR(10)||
'<td>' ||v.autoextensible ||'</td>'||CHR(10)||
'</tr>'
FROM (
select tablespace_name, file_name, trunc(bytes/1024/1024) size_mb,
trunc(maxbytes/1024/1024) max_size_mb, autoextensible from dba_data_files
union all
select tablespace_name, file_name, trunc(bytes/1024/1024) size_mb,
trunc(maxbytes/1024/1024) max_size_mb, autoextensible from dba_temp_files
order by 1,2) v;
PRO </table> PRO <a name="110"></a>
PRO <h2>1.10 Datafile Information for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Con Name </th>
PRO <th>Tablespace Name </th>
PRO <th>File Name </th>
PRO <th>Size(MB) </th>
PRO <th>Max Extent Size(MB)</th>
PRO <th>Is Autoextensible </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||con_name||'</td>'||CHR(10)||
'<td>' ||v.file_name ||'</td>'||CHR(10)||
'<td>' ||v.file_name ||'</td>'||CHR(10)||
'<td '||case when (v.autoextensible='YES' and v.size_mb/v.max_size_mb > 80) then 'class="x r"' else 'class=r' end||'>'||v.size_mb||'</td>'||CHR(10)||
'<td class=r>'||v.max_size_mb ||'</td>'||CHR(10)||
'<td>' ||v.autoextensible ||'</td>'||CHR(10)||
'</tr>'
FROM (
select c.name con_name,tablespace_name, file_name, trunc(bytes/1024/1024) size_mb,
trunc(maxbytes/1024/1024) max_size_mb, autoextensible from cdb_data_files d,v$containers c
where d.con_id = c.con_id
union all
select c.name con_name,tablespace_name, file_name, trunc(bytes/1024/1024) size_mb,
trunc(maxbytes/1024/1024) max_size_mb, autoextensible from cdb_temp_files d,v$containers c
where d.con_id = c.con_id
order by 1,2) v;
PRO </table> PRO <a name="111"></a>
PRO <h2>1.11 Resource Limit</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th class=y>Resource Name</th>
PRO <th class=y>Current </th>
PRO <th class=y>Max </th>
PRO <th class=y>Initial </th>
PRO <th class=y>Limit Value </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.RESOURCE_NAME||'</td>'||CHR(10)||
'<td width="80"'||case when v.CURRENT_UTILIZATION/decode(to_number(translate(v.LIMIT_VALUE,'UNLIMITED','10000000000')),'0','10000000000') > 0.8
then 'class="x r"' else 'class=r' end ||'>'||v.CURRENT_UTILIZATION||'</td>'||CHR(10)||
'<td width="80"'||case when v.MAX_UTILIZATION/decode(to_number(translate(v.LIMIT_VALUE,'UNLIMITED','10000000000')),'0','10000000000') > 0.5
then 'class="x r"' else 'class=r' end ||'>'||v.MAX_UTILIZATION ||'</td>'||CHR(10)||
'<td class=r width="80">'||v.INITIAL_ALLOCATION||'</td>'||CHR(10)||
'<td class=r width="80">'||v.LIMIT_VALUE ||'</td>'||CHR(10)||
'</tr>'
FROM (select RESOURCE_NAME,CURRENT_UTILIZATION,MAX_UTILIZATION,INITIAL_ALLOCATION,LIMIT_VALUE
from gv$resource_limit where INST_ID=(select instance_number from v$instance) order by 1,2) v;
PRO </table>PRO <a name="112"></a>
PRO <h2>1.12 Service</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Service Name </th>
PRO <th>Failover Method</th>
PRO <th>Failover Type </th>
PRO <th>Goal </th>
PRO <th>Clb Goal </th>
PRO <th>Dtp </th>
PRO <th>Session Cnt </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.failover_method||'</td>'||CHR(10)||
'<td>'||v.failover_type ||'</td>'||CHR(10)||
'<td>'||v.goal ||'</td>'||CHR(10)||
'<td>'||v.clb_goal ||'</td>'||CHR(10)||
'<td>'||v.dtp ||'</td>'||CHR(10)||
'<td>'||v.cnt ||'</td>'||CHR(10)||
'</tr>'
FROM (select s.name,s.failover_method,s.failover_type,s.goal,s.clb_goal,s.dtp,count(*) cnt
from dba_services s,v$session t where s.name = t.service_name (+)
group by s.name,s.failover_method,s.failover_type,s.goal,s.clb_goal,s.dtp order by 1) v;
PRO </table> PRO <a name="113"></a>
PRO <h2>1.13 SYSDBA User</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Username</th>
PRO <th>Sysdba </th>
PRO <th>Sysoper </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.username||'</td>'||CHR(10)||
'<td '||case when (v.username != 'SYS' and v.sysdba = 'TRUE') then 'class=x' else null end||'>'||v.sysdba ||'</td>'||CHR(10)||
'<td '||case when (v.username != 'SYS' and v.sysoper = 'TRUE') then 'class=x' else null end||'>'||v.sysoper||'</td>'||CHR(10)||
'</tr>'
FROM (select username,sysdba,sysoper from v$pwfile_users order by 1) v;
PRO </table>PRO <a name="115"></a>
PRO <h2>1.15 System Manager Role</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Grantee </th>
PRO <th>Granted Role</th>
PRO <th>Admin Option</th>
PRO <th>Default Role</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.grantee ||'</td>'||CHR(10)||
'<td '||case when (v.granted_role='DBA' and v.grantee not in ('SYS','SYSTEM')) then 'class=x' else null end||'>'||v.granted_role||'</td>'||CHR(10)||
'<td>'||v.admin_option||'</td>'||CHR(10)||
'<td>'||v.default_role||'</td>'||CHR(10)||
'</tr>'
FROM (select a.grantee, a.granted_role, a.admin_option, a.default_role from dba_role_privs a ,dba_users b
where b.username=a.grantee
and b.account_status='OPEN'
and a.granted_role in ('DBA','SYSDBA','SYSOPER','EXP_FULL_DATABASE','DELETE_CATALOG_ROLE')
order by a.granted_role) v;
PRO </table> PRO <a name="1131"></a>
PRO <h2>1.131 SYSDBA User for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Con Name</th>
PRO <th>Username</th>
PRO <th>Sysdba </th>
PRO <th>Sysoper </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||con_name ||'</td>'||CHR(10)||
'<td>'||v.grantee||'</td>'||CHR(10)||
'<td '||case when (v.granted_role='DBA' and v.grantee not in ('SYS','SYSTEM')) then 'class=x' else null end||'>'||v.granted_role||'</td>'||CHR(10)||
'<td>'||v.admin_option||'</td>'||CHR(10)||
'<td>'||v.default_role||'</td>'||CHR(10)||
'</tr>'
FROM (select c.name con_name,a.grantee, a.granted_role, a.admin_option, a.default_role from cdb_role_privs a ,cdb_users b,v$containers c
where b.username=a.grantee
and a.con_id = b.con_id
and a.con_id = c.con_id
and b.account_status='OPEN'
and a.granted_role in ('DBA','SYSDBA','SYSOPER','EXP_FULL_DATABASE','DELETE_CATALOG_ROLE')
order by a.con_id,a.granted_role) v;
PRO </table>PRO <a name="114"></a>
PRO <h2>1.13 Autotask</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Client Name</th>
PRO <th>Status </th>
PRO </tr>
SELECT CHR(10) || '<tr>' || CHR(10) || '<td class=y>' || v.client_name ||
'</td>' || CHR(10) || '<td ' || case
when v.client_name='auto optimizer stats collection' and v.status != 'ENABLED' then 'class=x'
when v.client_name='auto space advisor' and v.status = 'ENABLED' then 'class=x'
when v.client_name='sql tuning advisor' and v.status = 'ENABLED' then 'class=x'
else null end || '>' || v.status || '</td>' || CHR(10) ||
'</tr>'
FROM (select client_name,status from dba_autotask_client order by 1) v;
PRO </table> PRO <a name="114"></a>
PRO <h2>1.14 DST Check</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Timezone File Version </th>
PRO <th>TZ Version </th>
PRO <th>Dst Primary TT Version </th>
PRO <th>Dst Secondary TT Version</th>
PRO <th>Dst Upgrade State </th>
PRO <th>Dst All Same? </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.tz_file||'</td>'||CHR(10)||
'<td>'||v.tz_res ||'</td>'||CHR(10)||
'<td>'||v.dst_pri ||'</td>'||CHR(10)||
'<td>'||v.dst_sec ||'</td>'||CHR(10)||
'<td '||case when v.dst_stat != 'NONE' then 'class=x' else null end||'>'||v.dst_stat||'</td>'||CHR(10)||
'<td '||case when ((v.tz_res != v.dst_pri) or (v.tz_res != v.tz_file)) then 'class=x' else null end ||'>'||case when ((v.tz_res = v.dst_pri) and (v.tz_res = v.tz_file)) then 'TURE' else 'FLASE' end||'</td>'||CHR(10)||
'</tr>'
FROM (select (select VERSION from v$timezone_file) tz_file ,
(select TZ_VERSION from registry$database) tz_res,
(SELECT property_value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DST_PRIMARY_TT_VERSION') dst_pri,
(SELECT property_value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DST_SECONDARY_TT_VERSION') dst_sec,
(SELECT property_value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DST_UPGRADE_STATE') dst_stat
from dual) v;
PRO </table>PRO <a name="115"></a>
PRO <h2>1.15 Audit</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="200">Name </th>
PRO <th width="200">Value</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name||'</td>'||CHR(10)||
'<td' ||case
when name='audit_sys_operations' and value='TRUE' then
' class=x>'||value
else
'>'||value
end|| '</td>'||CHR(10) || '</tr>'
FROM (select name,value from v$parameter
where name in ('audit_file_dest','audit_sys_operations','audit_trail','audit_syslog_level')
order by 1) v;
PRO </table>PRO <a name="20"></a>
PRO <h1>2. Schema Information</h1>
PRO <u1>
PRO <li><a style="color:#663300" href="#201">2.1 Characterset</a></li>
PRO <li><a style="color:#663300" href="#202">2.2 Schema Info</a></li>
PRO <li><a style="color:#663300" href="#203">2.3 User Segment Size Check</a></li>
PRO <li><a style="color:#663300" href="#204">2.4 Profile</a></li>
PRO <li><a style="color:#663300" href="#205">2.5 Precreate Profiles</a></li>
PRO <li><a style="color:#663300" href="#206">2.6 Job</a></li>
PRO <li><a style="color:#663300" href="#207">2.7 Scheduler</a></li>
PRO <li><a style="color:#663300" href="#208">2.8 Object Count</a></li>
PRO <li><a style="color:#663300" href="#209">2.9 Object CNT</a></li>
PRO <li><a style="color:#663300" href="#210">2.10 Invalid Object</a></li>
PRO <li><a style="color:#663300" href="#211">2.11 External Tables</a></li>
PRO <li><a style="color:#663300" href="#212">2.12 Database Link</a></li>
PRO <li><a style="color:#663300" href="#213">2.13 Apps User Privs</a></li>
PRO <li><a style="color:#663300" href="#214">2.14 Role Privs</a></li>
PRO <li><a style="color:#663300" href="#215">2.15 Apps Bigger Index</a></li>
PRO <li><a style="color:#663300" href="#216">2.16 Quota</a></li>
PRO </u1>
PRO <hr />PRO <a name="201"></a>
PRO <h2>2.1 Characterset</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Parameter</th>
PRO <th>Value </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="200" class=y>'||v.parameter||'</td>'||CHR(10)||
'<td width="300" '||case when v.value not in ('AL32UTF8','ZHS16GBK','AL16UTF16','UTF8') then 'class=x' else null end||'>'||v.value||'</td>'||CHR(10)||
'</tr>'
FROM (select parameter,value from v$nls_parameters where parameter like 'NLS_%CHARACTERSET' order by 1,2) v;
PRO </table>PRO <a name="202"></a>
PRO <h2>2.2 Schema Info</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="200">Con Name</th>
PRO <th>Username </th>
PRO <th>Account Status </th>
PRO <th>Default Tablespace </th>
PRO <th>Temporary Tablespace</th>
PRO <th>Profile </th>
PRO <th>User Create Time </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||con_name||'</td>'||CHR(10)||
'<td>'||v.username||'</td>'||CHR(10)||
'<td '||case when v.created > (select CONTROLFILE_CREATED +1 from v$database) and v.account_status !='OPEN' or (v.username='SYSTEM' and v.account_status!='OPEN') then 'class=x' else null end||'>'||v.account_status||'</td>'||CHR(10)||
'<td '||case when v.created > (select CONTROLFILE_CREATED +1 from v$database) and v.default_tablespace in('SYSTEM','SYSAUX') then 'class=x' else null end||'>'||v.default_tablespace||'</td>'||CHR(10)||
'<td>'||v.temporary_tablespace||'</td>'||CHR(10)||
'<td>'||v.profile ||'</td>'||CHR(10)||
'<td '||case when v.created > (select CONTROLFILE_CREATED +1 from v$database) then 'class=x' else null end||'>'||v.created||'</td>'||CHR(10)||
'</tr>'
FROM (select b.name con_name,username,account_status,default_tablespace,temporary_tablespace,profile,created from cdb_users a,v$containers b where a.con_id = b.con_id order by 1) v;
PRO </table> PRO <a name="203"></a>
PRO <h2>2.3 User Segment Size Check</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th width="150">Owner</th>
PRO <th>Tablespace Name</th>
PRO <th>Segment Type </th>
PRO <th>Size(MB) </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.owner ||'</td>'||CHR(10)||
'<td '||case when v.tablespace_name in ('SYSTEM','SYSAUX') then 'class=x' else null end ||'>'||v.tablespace_name||'</td>'||CHR(10)||
'<td>'||v.segment_type ||'</td>'||CHR(10)||
'<td class=r>'||v.size_mb||'</td>'||CHR(10)||
'</tr>'
FROM (select owner,tablespace_name,segment_type,trunc(sum(bytes/1024/1024)) size_mb from dba_segments
where owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM',
'WFS_USR_ROLE','WMSYS','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL',
'DVSYS','LBACSYS')
group by rollup (owner,tablespace_name,segment_type)) v;
PRO </table> PRO <a name="2031"></a>
PRO <h2>2.31 User Segment Size Check for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th width="150">Con Name</th>
PRO <th>Owner </th>
PRO <th>Tablespace Name</th>
PRO <th>Segment Type </th>
PRO <th>Size(MB) </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||con_name ||'</td>'||CHR(10)||
'<td>'||v.owner ||'</td>'||CHR(10)||
'<td '||case when v.tablespace_name in ('SYSTEM','SYSAUX') then 'class=x' else null end ||'>'||v.tablespace_name||'</td>'||CHR(10)||
'<td>'||v.segment_type ||'</td>'||CHR(10)||
'<td class=r>'||v.size_mb||'</td>'||CHR(10)||
'</tr>'
FROM (select b.name con_name,a.owner,a.tablespace_name,a.segment_type,trunc(sum(a.bytes/1024/1024)) size_mb from cdb_segments a,v$containers b
where a.owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM',
'WFS_USR_ROLE','WMSYS','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL',
'DVSYS','LBACSYS')
and a.con_id = b.con_id
group by rollup (b.name,a.owner,a.tablespace_name,a.segment_type)) v;
PRO </table>PRO <a name="204"></a>
PRO <h2>2.4 Profile</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Profile</th>
PRO <th>Resource Name</th>
PRO <th>Limit </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.PROFILE||'</td>'||CHR(10)||
'<td>'|| v.RESOURCE_NAME ||'</td>'||CHR(10)||
'<td '|| case when v.LIMIT not in ('UNLIMITED','DEFAULT','ORA12C_STRONG_VERIFY_FUNCTION','ORA_STIG_PROFILE') then 'class=x' else null end || '>' || v.LIMIT || '</td>' || CHR(10) || '</tr>'
FROM (select PROFILE, RESOURCE_NAME, LIMIT from dba_profiles order by 1, 2) v;
PRO </table>PRO <a name="206"></a>
PRO <h2>2.6 Precreate Profiles</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th width="150">Profile</th>
PRO <th width="850">SQL_TODO</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.profile ||'</td>'||CHR(10)||
'<td width="850" style="word-break:break-all">'||v.sql_todo||'</td>'||CHR(10)||
'</tr>'
FROM (select profile, decode(PROFILE, 'DEFAULT','alter profile '||PROFILE||' limit '||reslist||';',
'MONITORING_PROFILE','alter profile '||PROFILE||' limit '||reslist||';',
'create profile '||PROFILE||' limit '||reslist||';') sql_todo from
(select profile, listagg(resource_name||' '||limit,' ') within group (order by resource_name||' '||limit) reslist
from dba_profiles where profile<>'ORA_STIG_PROFILE' group by profile
order by 1)) v;
PRO </table> PRO <a name="2041"></a>
PRO <h2>2.41 Profile for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Con Name</th>
PRO <th>Profile </th>
PRO <th>Resource Name</th>
PRO <th>Limit </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||con_name||'</td>'||CHR(10)||
'<td>'|| v.PROFILE ||'</td>'||CHR(10)||
'<td>'|| v.RESOURCE_NAME ||'</td>'||CHR(10)||
'<td '|| case when v.LIMIT not in ('UNLIMITED','DEFAULT','ORA12C_STRONG_VERIFY_FUNCTION','ORA_STIG_PROFILE') then 'class=x' else null end || '>' || v.LIMIT || '</td>' || CHR(10) || '</tr>'
FROM (select b.name con_name,PROFILE, RESOURCE_NAME, LIMIT from cdb_profiles a,v$containers b where a.con_id = b.con_id order by 1, 2) v;
PRO </table>PRO <a name="204"></a>
PRO <h2>2.4 Precreate Profiles</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th width="150">Profile</th>
PRO <th width="850">SQL_TODO</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.profile ||'</td>'||CHR(10)||
'<td width="850" style="word-break:break-all">'||v.sql_todo||'</td>'||CHR(10)||
'</tr>'
FROM (select profile, decode(PROFILE, 'DEFAULT','alter profile '||PROFILE||' limit '||reslist||';',
'MONITORING_PROFILE','alter profile '||PROFILE||' limit '||reslist||';',
'create profile '||PROFILE||' limit '||reslist||';') sql_todo from
(select profile, listagg(resource_name||' '||limit,' ') within group (order by resource_name||' '||limit) reslist
from dba_profiles where profile<>'ORA_STIG_PROFILE' group by profile
order by 1)) v;
PRO </table>PRO <a name="205"></a>
PRO <h2>2.5 Job</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Job Name </th>
PRO <th>Priv User</th>
PRO <th>What </th>
PRO <th>Status </th>
PRO <th>Next Date</th>
PRO <th>Interval </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>' ||v.job ||'</td>'||CHR(10)||
'<td width="150">' ||v.priv_user||'</td>'||CHR(10)||
'<td width="400" style="word-break:break-all" >'||v.what ||'</td>'||CHR(10)||
'<td width="100">'||v.status ||'</td>'||CHR(10)||
'<td>'||v.next_date||'</td>'||CHR(10)||
'<td>'||v.interval ||'</td>'||CHR(10)||
'</tr>'
FROM (select job,priv_user,what,decode(broken, 'Y', 'Broken', 'Normal') status,to_char(next_date, 'YYYY-MM-DD HH24:MI:SS') next_date,interval
FROM sys.dba_jobs) v;
PRO </table>PRO <a name="2051"></a>
PRO <h2>2.51 Job for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Con Name </th>
PRO <th>Job Name </th>
PRO <th>Priv User</th>
PRO <th>What </th>
PRO <th>Status </th>
PRO <th>Next Date</th>
PRO <th>Interval </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>' ||con_name ||'</td>'||CHR(10)||
'<td width="150">' ||v.job||'</td>'||CHR(10)||
'<td width="150">' ||v.priv_user||'</td>'||CHR(10)||
'<td width="400" style="word-break:break-all" >'||v.what ||'</td>'||CHR(10)||
'<td width="100">'||v.status ||'</td>'||CHR(10)||
'<td>'||v.next_date||'</td>'||CHR(10)||
'<td>'||v.interval ||'</td>'||CHR(10)||
'</tr>'
FROM (select b.name con_name,a.job,a.priv_user,a.what,decode(a.broken, 'Y', 'Broken', 'Normal') status,to_char(a.next_date, 'YYYY-MM-DD HH24:MI:SS') next_date,a.interval
FROM cdb_jobs a,v$containers b
where a.con_id = b.con_id) v;
PRO </table> PRO <a name="206"></a>
PRO <h2>2.6 Scheduler</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th width="300">Job Name </th>
PRO <th width="100">Err Code </th>
PRO <th width="100">CNT </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y width="150">' ||v.owner ||'</td>'||CHR(10)||
'<td width="300">'||v.job_name ||'</td>'||CHR(10)||
'<td width="100">'||v.error_code||'</td>'||CHR(10)||
'<td width="100">'||v.cnt ||'</td>'||CHR(10)||
'</tr>'
FROM (select owner,substr(job_name,1,17)||'*' job_name, error# error_code, count(*) cnt
from dba_scheduler_job_run_details where error# <> 0
and job_name like 'ORA$AT_OS_OPT_SY_%' or job_name like 'ORA$AT_SA_SPC_SY_%'
group by owner,substr(job_name,1,17)||'*',error# order by 1,2,3 ) v;
PRO </table>
PRO </td></tr>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th width="300">Job Name </th>
PRO <th width="100">Error Ecode </th>
PRO <th width="100">Session Id </th>
PRO <th width="150">Run Time </th>
PRO </tr>
SELECT CHR(10) || '<tr>' || CHR(10) ||
'<td class=y width="150">' ||v.owner || '</td>' || CHR(10) ||
'<td width="300">' || v.job_name || '</td>' || CHR(10) ||
'<td width="100">' || v.error_code || '</td>' || CHR(10) ||
'<td width="100">' || v.session_id || '</td>' || CHR(10) ||
'<td width="150">' || v.run_time || '</td>' || CHR(10) ||
'</tr>'
FROM (select owner,job_name,error# error_code,session_id,
to_char(log_date, 'yyyymmdd hh24:mi:ss') run_time
from dba_scheduler_job_run_details
where error# <> 0
and job_name not like 'ORA$AT_OS_OPT_SY_%'
and job_name not like 'ORA$AT_SA_SPC_SY_%') v;
PRO </table>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Owner </th>
PRO <th>Job Name </th>
PRO <th>State </th>
PRO <th>Enabled </th>
PRO <th>Last Date </th>
PRO <th>Schedule Name</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y width="150">'||v.owner||'</td>'||CHR(10)||
'<td width="300">'||v.job_name ||'</td>'||CHR(10)||
'<td width="100">'||v.state ||'</td>'||CHR(10)||
'<td width="100">'||v.enabled ||'</td>'||CHR(10)||
'<td width="150">'||v.lastdates||'</td>'||CHR(10)||
'<td>'||v.schedule_name||'</td>'||CHR(10)||
'</tr>'
FROM (select owner,job_name,state,enabled,to_char(last_start_date,'yyyy-mm-dd hh24:mi:ss') lastdates ,schedule_name
from dba_scheduler_jobs order by 1,2) v;
PRO </table>PRO <a name="2061"></a>
PRO <h2>2.61 Scheduler for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Con Name</th>
PRO <th width="150">Owner</th>
PRO <th width="300">Job Name </th>
PRO <th width="100">Err Code </th>
PRO <th width="100">CNT </th>
PRO </tr>
SELECT CHR(10) || '<tr>' || CHR(10) ||
'<td class=y width="150">' ||con_name || '</td>' || CHR(10) ||
'<td width="300">' || v.owner || '</td>' || CHR(10) ||
'<td width="300">' || v.job_name || '</td>' || CHR(10) ||
'<td width="100">' || v.error_code || '</td>' || CHR(10) ||
'<td width="100">' || v.session_id || '</td>' || CHR(10) ||
'<td width="150">' || v.run_time || '</td>' || CHR(10) ||
'</tr>'
FROM (select b.name con_name,a.owner,a.job_name,a.error# error_code,a.session_id,
to_char(log_date, 'yyyymmdd hh24:mi:ss') run_time
from cdb_scheduler_job_run_details a,v$containers b
where error# <> 0
and a.con_id = b.con_id
and job_name not like 'ORA$AT_OS_OPT_SY_%'
and job_name not like 'ORA$AT_SA_SPC_SY_%') v;
PRO </table>
PRO </td></tr>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th width="300">Job Name </th>
PRO <th width="100">Error Ecode </th>
PRO <th width="100">Session Id </th>
PRO <th width="150">Run Time </th>
PRO </tr>
SELECT CHR(10) || '<tr>' || CHR(10) ||
'<td class=y width="150">' ||v.owner || '</td>' || CHR(10) ||
'<td width="300">' || v.job_name || '</td>' || CHR(10) ||
'<td width="100">' || v.error_code || '</td>' || CHR(10) ||
'<td width="100">' || v.session_id || '</td>' || CHR(10) ||
'<td width="150">' || v.run_time || '</td>' || CHR(10) ||
'</tr>'
FROM (select owner,job_name,error# error_code,session_id,
to_char(log_date, 'yyyymmdd hh24:mi:ss') run_time
from dba_scheduler_job_run_details
where error# <> 0
and job_name not like 'ORA$AT_OS_OPT_SY_%'
and job_name not like 'ORA$AT_SA_SPC_SY_%') v;
PRO </table>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Con Name </th>
PRO <th>Owner </th>
PRO <th>Job Name </th>
PRO <th>State </th>
PRO <th>Enabled </th>
PRO <th>Last Date </th>
PRO <th>Schedule Name</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y width="150">'||v.name||'</td>'||CHR(10)||
'<td width="150">'||v.job_name ||'</td>'||CHR(10)||
'<td width="300">'||v.job_name ||'</td>'||CHR(10)||
'<td width="100">'||v.state ||'</td>'||CHR(10)||
'<td width="100">'||v.enabled ||'</td>'||CHR(10)||
'<td width="150">'||v.lastdates||'</td>'||CHR(10)||
'<td>'||v.schedule_name||'</td>'||CHR(10)||
'</tr>'
FROM (select c.name,owner,job_name,state,enabled,to_char(last_start_date,'yyyy-mm-dd hh24:mi:ss') lastdates ,schedule_name
from cdb_scheduler_jobs a,v$containers c where a.con_id=c.con_id order by 1,2) v;
PRO </table> PRO <a name="207"></a>
PRO <h2>2.7 Object Count</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Owner</th>
PRO <th>Object Type</th>
PRO <th>CNT</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.owner||'</td>'||CHR(10)||
'<td class=r>'||v.object_type||'</td>'||CHR(10)||
'<td class=r>'||v.cnt||'</td>'||CHR(10)||
'</tr>'
from
(select owner,object_type,count(*) cnt from dba_objects where status='VALID' and owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE','REMOTE_SCHEDULER_AGENT',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN','DVSYS','DVF','LBACSYS',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM','DBSFWUSER',
'WFS_USR_ROLE','WMSYS','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL','PERFSTAT')group by owner,c.name,object_type order by 1,2) v;
PRO </table> PRO <a name="2071"></a>
PRO <h2>2.71 Object Count for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Con Name</th>
PRO <th>Owner</th>
PRO <th>Object Type</th>
PRO <th>CNT</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.name||'</td>'||CHR(10)||
'<td class=r>'||v.owner||'</td>'||CHR(10)||
'<td class=r>'||v.object_type||'</td>'||CHR(10)||
'<td class=r>'||v.cnt||'</td>'||CHR(10)||
'</tr>'
from
(select c.name,owner,object_type,count(*) cnt from cdb_objects a,v$containers c where a.con_id=c.con_id and status='VALID' and owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE','REMOTE_SCHEDULER_AGENT',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN','DVSYS','DVF','LBACSYS',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM','DBSFWUSER',
'WFS_USR_ROLE','WMSYS','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL','PERFSTAT')group by owner,c.name,object_type order by 1,2,4) v;
PRO </table>PRO <a name="209"></a>
PRO <h2>2.09 Invalid Object</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th width="150">Invalid Check Item</th>
PRO <th width="80" >Owner </th>
PRO <th width="150">Object Name </th>
PRO <th width="150">Sub Object Name</th>
PRO <th width="100">Object Type </th>
PRO <th width="80" >Status </th>
PRO <th width="200">Create Time</th>
PRO <th width="200">Last DDL Time </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.invalid_type||'</td>'||CHR(10)||
'<td>'||v.owner ||'</td>'||CHR(10)||
'<td>'||v.object_name ||'</td>'||CHR(10)||
'<td>'||v.subobject_name||'</td>'||CHR(10)||
'<td>'||v.object_type ||'</td>'||CHR(10)||
'<td '||case when v.status is not null and v.owner not in ('LBACSYS','WMSYS','MDSYS') then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td width="200" style="word-break:break-all">'||v.created||'</td>'||CHR(10)||
'<td>'||v.last_ddl_time ||'</td>'||CHR(10)||
'</tr>'
FROM (select ' Invalid Object' invalid_type,owner,object_name,subobject_name,object_type,status,created,last_ddl_time from dba_objects
where status = 'INVALID'
and owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM',
'WFS_USR_ROLE','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL','PERFSTAT')
union all
select '.Invalid Object' invalid_type,null,null,null,null,null,null,null from dual
order by 1,2) v;
PRO <tr>
PRO <th width="150">Invalid Index Item</th>
PRO <th>Owner </th>
PRO <th>Index Name </th>
PRO <th>Index Type </th>
PRO <th>Partition Name </th>
PRO <th>Status </th>
PRO <th>Table Name </th>
PRO <th>Tablespace Name</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.invalid_type||'</td>'||CHR(10)||
'<td>'||v.index_owner ||'</td>'||CHR(10)||
'<td>'||v.index_name ||'</td>'||CHR(10)||
'<td>'||v.index_type ||'</td>'||CHR(10)||
'<td>'||v.partition_name ||'</td>'||CHR(10)||
'<td '||case when v.status is not null and v.index_owner not in ('LBACSYS','EXFSYS','WMSYS','MDSYS') then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td>'||v.table_name ||'</td>'||CHR(10)||
'<td>'||v.tablespace_name||'</td>'||CHR(10)||
'</tr>'
FROM (select ' Invalid Index' invalid_type,owner index_owner,
index_name, index_type,'N/A' partition_name,
status,table_name,tablespace_name
from dba_indexes where status = 'UNUSABLE'
union all
select ' Invalid Partition Index',a.index_owner,
a.index_name,b.index_type,a.partition_name,
a.status,b.table_name,a.tablespace_name
from dba_ind_partitions a, dba_indexes b
where a.index_name = b.index_name
and a.index_owner = b.owner
and a.status = 'UNUSABLE'
union all
select ' Invalid SubPartition Index',a.index_owner,
a.index_name,b.index_type,a.partition_name,
a.status,b.table_name,a.tablespace_name
from dba_ind_subpartitions a, dba_indexes b
where a.index_name = b.index_name
and a.index_owner = b.owner
and a.status = 'UNUSABLE'
union all
select '.Invalid Index',null,null,null,null,null,null,null from dual) v;
PRO <tr>
PRO <th width="150">Invalid Trigger Item</th>
PRO <th>Owner </th>
PRO <th>Trigger Name </th>
PRO <th>Trigger Type </th>
PRO <th>Triggering Event</th>
PRO <th>Status </th>
PRO <th>When Caluse </th>
PRO <th>Action Type </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.invalid_type||'</td>'||CHR(10)||
'<td>'||v.owner ||'</td>'||CHR(10)||
'<td>'||v.trigger_name ||'</td>'||CHR(10)||
'<td>'||v.trigger_type ||'</td>'||CHR(10)||
'<td>'||v.triggering_event||'</td>'||CHR(10)||
'<td '||case when v.status is not null and v.owner not in ('LBACSYS','WMSYS','MDSYS') then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td>'||v.when_clause ||'</td>'||CHR(10)||
'<td>'||v.action_type ||'</td>'||CHR(10)||
'</tr>'
FROM (select ' Invalid Trigger' invalid_type,owner,trigger_name, trigger_type,
triggering_event,status,when_clause,action_type
from dba_triggers where status='DISABLED' and owner<>'SYS'
union all
select '.Invalid Trigger',null,null,null,null,null,null,null from dual) v;
PRO <tr>
PRO <th width="150">Invalid Constraints Item</th>
PRO <th>Owner </th>
PRO <th>Constraint Name </th>
PRO <th>Constraint Type </th>
PRO <th>Table Name </th>
PRO <th>Status </th>
PRO <th>Deferred </th>
PRO <th>Delete Rule </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.invalid_type||'</td>'||CHR(10)||
'<td>'||v.owner ||'</td>'||CHR(10)||
'<td>'||v.constraint_name||'</td>'||CHR(10)||
'<td>'||v.constraint_type||'</td>'||CHR(10)||
'<td>'||v.table_name ||'</td>'||CHR(10)||
'<td '||case when v.status is not null then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td>'||v.deferred ||'</td>'||CHR(10)||
'<td>'||v.delete_rule ||'</td>'||CHR(10)||
'</tr>'
FROM (select ' Invalid Constraints' invalid_type,owner,constraint_name,constraint_type,
table_name,status,deferred,delete_rule
from dba_constraints where status='DISABLED' and owner not in('SYS','SYSTEM')
union all
select '.Invalid Constraints',null,null,null,null,null,null,null from dual) v;
PRO </table>PRO <a name="2091"></a>
PRO <h2>2.091 Invalid Object for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th width="80" >Con Name </th>
PRO <th width="150">Invalid Check Item</th>
PRO <th width="80" >Owner </th>
PRO <th width="150">Object Name </th>
PRO <th width="150">Sub Object Name</th>
PRO <th width="100">Object Type </th>
PRO <th width="80" >Status </th>
PRO <th width="200">Create Time</th>
PRO <th width="200">Last DDL Time </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.invalid_type ||'</td>'||CHR(10)||
'<td>'||v.owner ||'</td>'||CHR(10)||
'<td>'||v.object_name ||'</td>'||CHR(10)||
'<td>'||v.subobject_name||'</td>'||CHR(10)||
'<td>'||v.object_type ||'</td>'||CHR(10)||
'<td '||case when v.status is not null and v.owner not in ('LBACSYS','WMSYS','MDSYS') then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td width="200" style="word-break:break-all">'||v.created||'</td>'||CHR(10)||
'<td>'||v.last_ddl_time ||'</td>'||CHR(10)||
'</tr>'
FROM (select c.name,' Invalid Object' invalid_type,owner,object_name,subobject_name,object_type,status,created,last_ddl_time from cdb_objects a,v$containers c
where status = 'INVALID' and a.con_id=c.con_id
and owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM',
'WFS_USR_ROLE','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL','PERFSTAT')
union all
select '.Invalid Object' invalid_type,null,null,null,null,null,null,null,null from dual
order by 1,2) v;
PRO <tr>
PRO <th width="150">Con Name </th>
PRO <th>Invalid Index Item</th>
PRO <th>Owner </th>
PRO <th>Index Name </th>
PRO <th>Index Type </th>
PRO <th>Partition Name </th>
PRO <th>Status </th>
PRO <th>Table Name </th>
PRO <th>Tablespace Name</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.invalid_type||'</td>'||CHR(10)||
'<td>'||v.index_owner ||'</td>'||CHR(10)||
'<td>'||v.index_name ||'</td>'||CHR(10)||
'<td>'||v.index_type ||'</td>'||CHR(10)||
'<td>'||v.partition_name ||'</td>'||CHR(10)||
'<td '||case when v.status is not null and v.index_owner not in ('LBACSYS','EXFSYS','WMSYS','MDSYS') then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td>'||v.table_name ||'</td>'||CHR(10)||
'<td>'||v.tablespace_name||'</td>'||CHR(10)||
'</tr>'
FROM (select c.name,' Invalid Index' invalid_type,owner index_owner,
index_name, index_type,'N/A' partition_name,
status,table_name,tablespace_name
from cdb_indexes a,v$containers c where status = 'UNUSABLE' and a.con_id=c.con_id
union all
select c.name,' Invalid Partition Index',a.index_owner,
a.index_name,b.index_type,a.partition_name,
a.status,b.table_name,a.tablespace_name
from cdb_ind_partitions a, cdb_indexes b,v$containers c
where a.index_name = b.index_name
and a.index_owner = b.owner
and a.status = 'UNUSABLE'
and a.con_id=c.con_id
and a.con_id=b.con_id
union all
select c.name,' Invalid SubPartition Index',a.index_owner,
a.index_name,b.index_type,a.partition_name,
a.status,b.table_name,a.tablespace_name
from cdb_ind_subpartitions a, cdb_indexes b,v$containers c
where a.index_name = b.index_name
and a.index_owner = b.owner
and a.status = 'UNUSABLE'
and a.con_id=c.con_id
and a.con_id=b.con_id
union all
select '.Invalid Index',null,null,null,null,null,null,null,null from dual) v;
PRO <tr>
PRO <th width="150">Con Name </th>
PRO <th>Invalid Trigger Item</th>
PRO <th>Owner </th>
PRO <th>Trigger Name </th>
PRO <th>Trigger Type </th>
PRO <th>Triggering Event</th>
PRO <th>Status </th>
PRO <th>When Caluse </th>
PRO <th>Action Type </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.invalid_type||'</td>'||CHR(10)||
'<td>'||v.owner ||'</td>'||CHR(10)||
'<td>'||v.trigger_name ||'</td>'||CHR(10)||
'<td>'||v.trigger_type ||'</td>'||CHR(10)||
'<td>'||v.triggering_event||'</td>'||CHR(10)||
'<td '||case when v.status is not null and v.owner not in ('LBACSYS','WMSYS','MDSYS') then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td>'||v.when_clause ||'</td>'||CHR(10)|| '<td>'||v.action_type ||'</td>'||CHR(10)||
'</tr>'
FROM (select c.name,' Invalid Trigger' invalid_type,owner,trigger_name, trigger_type,
triggering_event,status,when_clause,action_type
from cdb_triggers a,v$containers c where status='DISABLED' and owner<>'SYS' and a.con_id=c.con_id
union all
select '.Invalid Trigger',null,null,null,null,null,null,null,null from dual) v;
PRO <tr>
PRO <th width="150">Con Name </th>
PRO <th>Invalid Constraints Item</th>
PRO <th>Owner </th>
PRO <th>Constraint Name </th>
PRO <th>Constraint Type </th>
PRO <th>Table Name </th>
PRO <th>Status </th>
PRO <th>Deferred </th>
PRO <th>Delete Rule </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.invalid_type||'</td>'||CHR(10)||
'<td>'||v.owner ||'</td>'||CHR(10)||
'<td>'||v.constraint_name||'</td>'||CHR(10)||
'<td>'||v.constraint_type||'</td>'||CHR(10)||
'<td>'||v.table_name ||'</td>'||CHR(10)||
'<td '||case when v.status is not null then 'class=x' else null end ||'>'||v.status ||'</td>'||CHR(10)||
'<td>'||v.deferred ||'</td>'||CHR(10)||
'<td>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.delete_rule ||'</td>'||CHR(10)||
'</tr>'
FROM (select c.name,' Invalid Constraints' invalid_type,owner,constraint_name,constraint_type,
table_name,status,deferred,delete_rule
from cdb_constraints a,v$containers c where status='DISABLED' and owner not in('SYS','SYSTEM') and a.con_id=c.con_id
union all
select '.Invalid Constraints',null,null,null,null,null,null,null,null from dual) v;
PRO </table>PRO <a name="210"></a>
PRO <h2>2.10 External Tables</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150" >Owner</th>
PRO <th>Default Directory Name</th>
PRO <th>Table Name</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.owner||'</td>'||CHR(10)||
'<td>'||v.default_directory_name||'</td>'||CHR(10)||
'<td>'||v.table_name||'</td>'||CHR(10)||
'</tr>'
FROM (select owner,default_directory_name,table_name from DBA_EXTERNAL_TABLES
where owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM',
'WFS_USR_ROLE','WMSYS','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL','PERFSTAT')
order by 1,2,3) v;
PRO </table>PRO <a name="212"></a>
PRO <h2>2.12 Database Link</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th>DB Link</th>
PRO <th>Username</th>
PRO <th>Host</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.owner||'</td>'||CHR(10)||
'<td>'||v.db_link||'</td>'||CHR(10)||
'<td class=r>'||v.username||'</td>'||CHR(10)||
'<td class=r>'||v.host||'</td>'||CHR(10)||
'</tr>'
FROM (select owner,db_link,username,host from dba_db_links order by 1,2) v;
PRO </table> PRO <a name="2111"></a>
PRO <h2>2.111 Database Link for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th>DB Link</th>
PRO <th>Username</th>
PRO <th>Host</th>
PRO <th>Con Name</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.name||'</td>'||CHR(10)||
'<td>'||v.owner||'</td>'||CHR(10)||
'<td>'||v.db_link||'</td>'||CHR(10)||
'<td class=r>'||v.username||'</td>'||CHR(10)||
'<td class=r>'||v.host||'</td>'||CHR(10)||

'</tr>'
FROM (select c.name,owner,db_link,username,host from cdb_db_links a,v$containers c where a.con_id=c.con_id order by 1,2) v;
PRO </table> PRO <a name="212"></a>
PRO <h2>2.12 Apps User Privs</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th width="100">Priv Type</th>
PRO <th width="100">Target Name</th>
PRO <th width="200">Privilege</th>
PRO <th width="80" >Grantable</th>
PRO <th width="500">SQL_TODO</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.grantor ||'</td>'||CHR(10)||
'<td>'||v.priv_type ||'</td>'||CHR(10)||
'<td>'||v.target_name||'</td>'||CHR(10)||
'<td width="200" style="word-break:break-all">'||v.grant_privs||'</td>'||CHR(10)||
'<td '||decode(v.grantable,'YES','class=x')||'>'||v.grantable||'</td>'||CHR(10)||
'<td width="500" style="word-break:break-all">'||v.sql_todo ||'</td>'||CHR(10)||
'</tr>'
FROM (select grantor, priv_type, target_name, grantable, grant_privs, sql_todo from
(select grantor, priv_type, target_name, grantable, grant_privs,
'grant '||grant_privs||'('||substr(target_name,instr(target_name,'.',1,2)+1)||
') on '||substr(target_name,1,instr(target_name,'.',1,2)-1)||
' to '||grantor||decode(grantable,'YES',' with grant option')||';' sql_todo
from (select grantor, 'COL_PRIV' priv_type, owner||'.'||table_name||'.'||column_name target_name, grantable,
listagg(privilege,',') within group (order by privilege) grant_privs
from dba_col_privs where grantor != owner group by grantor, owner||'.'||table_name||'.'||column_name, grantable)
union all
select grantor, priv_type, target_name, grantable, grant_privs,
'grant '||grant_privs||' on '||target_name||' to '||grantor||
decode(grantable,'YES',' with grant option')||';' sql_todo
from (select grantor, 'TAB_PRIV' priv_type, owner||'.'||table_name target_name, grantable,
listagg(privilege,',') within group (order by privilege) grant_privs
from dba_tab_privs where grantor != owner group by grantor, owner||'.'||table_name, grantable)
union all
select grantee, 'SYS_PRIV' priv_type, '', admin_option,
listagg(privilege,',') within group (order by privilege) grant_privs,
'grant '||listagg(privilege,',') within group (order by privilege)||
' to '||grantee||decode(admin_option,'YES',' with admin option')||';' sql_todo
from dba_sys_privs group by grantee,admin_option
union all
select grantee, 'ROL_PRIV' priv_type, '', admin_option,
listagg(granted_role,',') within group (order by granted_role) grant_roles,
'grant '||listagg(granted_role,',') within group (order by granted_role)||
' to '||grantee||decode(admin_option,'YES',' with admin option')||';' sql_todo
from dba_role_privs group by grantee,admin_option)
where grantor not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM','DV_ACCTMGR',
'WFS_USR_ROLE','WMSYS','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL','PERFSTAT',
'AUDIT_ADMIN','EM_EXPRESS_ALL','EM_EXPRESS_BASIC','GSMADMIN_ROLE','GSMCATUSER','GSMUSER','GSMUSER_ROLE',
'GSM_POOLADMIN_ROLE','SYSBACKUP','SYSBACKUP','SYSDG','SYSKM','XS$NULL','LBACSYS','RECOVERY_CATALOG_OWNER_VPD')
union all select '.',null,null,null,null,null from dual
order by 1,2,3,4) v;
PRO </table>PRO <a name="213"></a>
PRO <h2>2.13 Role Privs</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th width="100">Priv Type </th>
PRO <th width="100">Target Name</th>
PRO <th width="200" style="word-break:break-all">Privilege</th>
PRO <th width="80" >Grantable </th>
PRO <th width="500" style="word-break:break-all">SQL_TODO</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.role||'</td>'||CHR(10)||
'<td>'||v.priv_type||'</td>'||CHR(10)||
'<td>'||v.target_name||'</td>'||CHR(10)||
'<td>'||v.grant_privs||'</td>'||CHR(10)||
'<td '||decode(v.grantable,'YES','class=x')||'>'||v.grantable ||'</td>'||CHR(10)||
'<td>'||v.sql_todo ||'</td>'||CHR(10)||
'</tr>'
FROM (select role, priv_type, target_name, grant_privs, grantable, sql_todo from
(select role, priv_type, target_name, grantable, grant_privs,
'grant '||grant_privs||'('||substr(target_name,instr(target_name,'.',1,2)+1)||') on '||
substr(target_name,1,instr(target_name,'.',1,2)-1)||
' to '||role||decode(grantable,'YES',' with grant option')||';' sql_todo
from (select role, 'TAB_PRIV' priv_type, owner||'.'||table_name||'.'||column_name target_name, grantable,
listagg(privilege,',') within group (order by privilege) grant_privs
from role_tab_privs where column_name is not null group by role, owner||'.'||table_name||'.'||column_name, grantable)
union all
select role, priv_type, target_name, grantable, grant_privs,
'grant '||grant_privs||' on '||target_name||' to '||role||
decode(grantable,'YES',' with grant option')||';' sql_todo
from (select role, 'TAB_PRIV' priv_type, owner||'.'||table_name target_name, grantable,
listagg(privilege,',') within group (order by privilege) grant_privs
from role_tab_privs where column_name is null group by role, owner||'.'||table_name, grantable)
union all
select role, 'SYS_PRIV' priv_type, '', admin_option,
listagg(privilege,',') within group (order by privilege) grant_privs,
'grant '||listagg(privilege,',') within group (order by privilege)||
' to '||role||decode(admin_option,'YES',' with admin option')||';' sql_todo
from role_sys_privs group by role,admin_option
union all
select role, 'ROL_PRIV' priv_type, '', admin_option,
listagg(granted_role,',') within group (order by granted_role) grant_roles,
'grant '||listagg(granted_role,',') within group (order by granted_role)||
' to '||role||decode(admin_option,'YES',' with admin option')||';' sql_todo
from role_role_privs group by role,admin_option)
where role not in ('EXP_FULL_DATABASE','AQ_ADMINISTRATOR_ROLE','XDBADMIN','DBA','AQ_USER_ROLE',
'SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE','IMP_FULL_DATABASE','GATHER_SYSTEM_STATISTICS',
'DBFS_ROLE','ADM_PARALLEL_EXECUTE_TASK','DATAPUMP_EXP_FULL_DATABASE','HS_ADMIN_EXECUTE_ROLE',
'HS_ADMIN_SELECT_ROLE','DELETE_CATALOG_ROLE','OEM_MONITOR','WM_ADMIN_ROLE','LOGSTDBY_ADMINISTRATOR',
'DATAPUMP_IMP_FULL_DATABASE','RESOURCE','SCHEDULER_ADMIN','RECOVERY_CATALOG_OWNER','OEM_ADVISOR',
'JAVASYSPRIV','JAVADEBUGPRIV','HS_ADMIN_ROLE','CONNECT','APEX_ADMINISTRATOR_ROLE','CSW_USR_ROLE',
'CTXAPP','CWM_USER','MGMT_USER','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN','ORDADMIN','OWB$CLIENT',
'SPATIAL_CSW_ADMIN','SPATIAL_WFS_ADMIN','WFS_USR_ROLE','GSM_POOLADMIN_ROLE','GSMUSER_ROLE',
'GDS_CATALOG_SELECT','AUDIT_VIEWER','CAPTURE_ADMIN','EM_EXPRESS_ALL','EM_EXPRESS_BASIC','PDB_DBA',
'XS_CACHE_ADMIN','XS_SESSION_ADMIN','AUDIT_ADMIN','GSMADMIN_ROLE','OPTIMIZER_PROCESSING_RATE',
'SYSUMF_ROLE','DBMS_MDX_INTERNAL','DV_REALM_OWNER','DATAPATCH_ROLE','APPLICATION_TRACE_VIEWER',
'RECOVERY_CATALOG_OWNER_VPD','RECOVERY_CATALOG_USER','SODA_APP','LBAC_DBA','XS_CONNECT','DV_REALM_RESOURCE')
union all select '.',null,null,null,null,null from dual
order by 1,2,3,4) v;
PRO </table>set long 20000 longchunk 20000
PRO <a name="214"></a>
PRO <h2>2.14 Apps Bigger Index</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">Owner</th>
PRO <th>Segment Name</th>
PRO <th>Size(MB) </th>
PRO <th>SQL_TODO </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.owner||'</td>'||CHR(10)||
'<td>'||v.segment_name||'</td>'||CHR(10)||
'<td '||case when v.size_mb > 10240 then 'class="x r"' else 'class=r' end ||'>'||v.size_mb ||'</td>'||CHR(10)||
'<td width="650">'||v.sql_todo||'</td>'||CHR(10)||
'</tr>'
FROM (select name,owner, segment_name, size_mb, dbms_metadata.get_ddl('INDEX', segment_name, owner) sql_todo
from (select *
from (select c.name,owner, segment_name, round(sum(bytes/1024/1024)) size_mb
from cdb_segments a,v$containers c where
owner not in ('ADM_PARALLEL_EXECUTE_TASK','ANONYMOUS','APEX_030200','APEX_ADMINISTRATOR_ROLE','APEX_PUBLIC_USER',
'APPQOSSYS','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','CONNECT','CSW_USR_ROLE','CTXAPP','CTXSYS',
'CWM_USER','DATAPUMP_EXP_FULL_DATABASE','DATAPUMP_IMP_FULL_DATABASE','DBA','DBFS_ROLE','DBSNMP',
'DELETE_CATALOG_ROLE','DIP','EXECUTE_CATALOG_ROLE','EXFSYS','EXP_FULL_DATABASE','FLOWS_FILES',
'GATHER_SYSTEM_STATISTICS','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_ROLE','HS_ADMIN_SELECT_ROLE',
'IMP_FULL_DATABASE','JAVADEBUGPRIV','JAVASYSPRIV','LOGSTDBY_ADMINISTRATOR','MDDATA','MDSYS',
'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','OEM_MONITOR','OLAPSYS','OLAP_DBA','OLAP_USER','OLAP_XS_ADMIN',
'ORACLE_OCM','ORDADMIN','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWB$CLIENT','OWBSYS','OWBSYS_AUDIT',
'PUBLIC','RECOVERY_CATALOG_OWNER','RESOURCE','SCHEDULER_ADMIN','SCOTT','SELECT_CATALOG_ROLE',
'SI_INFORMTN_SCHEMA','SPATIAL_CSW_ADMIN','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN',
'SPATIAL_WFS_ADMIN_USR','SQLTXADMIN','SQLTXPLAIN','SQLT_USER_ROLE','SYS','SYSMAN','SYSTEM',
'WFS_USR_ROLE','WMSYS','WM_ADMIN_ROLE','XDB','XDBADMIN','AUDSYS','OJVMSYS','GSMADMIN_INTERNAL','PERFSTAT')
and segment_name not like 'BIN$%'
and segment_type = 'INDEX'
and a.con_id=c.con_id
group by c.name,owner, segment_name having round(sum(bytes/1024/1024)) > 10240)
where rownum < 11)
order by 1,2, 4 desc, 3) v;
PRO </table>PRO <a name="215"></a>
PRO <h2>2.15 Quota</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th class=y width="150">Username</th>
PRO <th class=y>Tablespace Name</th>
PRO <th class=y>Current(GB) </th>
PRO <th class=y>Limits(GB) </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.username||'</td>'||CHR(10)||
'<td>'||v.tablespace_name||'</td>'||CHR(10)||
'<td class=r>'||v.gb_bytes ||'</td>'||CHR(10)||
'<td class=r>'||v.max_gb_bytes||'</td>'||CHR(10)||
'</tr>'
FROM (select username,tablespace_name,trunc(bytes/1024/1024/1024) gb_bytes,
decode(max_bytes,-1,-1,trunc(max_bytes/1024/1024/1024)) max_gb_bytes from dba_ts_quotas order by 1,2) v;
PRO </table> PRO <a name="2151"></a>
PRO <h2>2.151 Quota for PDB</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th class=y width="150">Con Name</th>
PRO <th class=y>Username</th>
PRO <th class=y>Tablespace Name</th>
PRO <th class=y>Current(GB) </th>
PRO <th class=y>Limits(GB) </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="150" class=y>'||v.name||'</td>'||CHR(10)||
'<td>'||v.username||'</td>'||CHR(10)||
'<td>'||v.tablespace_name||'</td>'||CHR(10)||
'<td class=r>'||v.gb_bytes ||'</td>'||CHR(10)||
'<td class=r>'||v.max_gb_bytes||'</td>'||CHR(10)||
'</tr>'
FROM (select c.name,username,tablespace_name,trunc(bytes/1024/1024/1024) gb_bytes,
decode(max_bytes,-1,-1,trunc(max_bytes/1024/1024/1024)) max_gb_bytes from cdb_ts_quotas a,v$containers c where a.con_id=c.con_id order by 1,2,3) v;
PRO </table>
PRO <a name="30"></a>
PRO <h1>3. ASM Configure</h1>
PRO <u1>
PRO <li><a style="color:#663300" href="#301">3.1 ASM Diskgroup Attribute</a></li>
PRO <li><a style="color:#663300" href="#302">3.2 ASM Disk Group</a></li>
PRO <li><a style="color:#663300" href="#303">3.3 ASM Disk Check</a></li>
PRO <li><a style="color:#663300" href="#304">3.4 ASM Operation</a></li>
PRO <u1>
PRO <hr />PRO <a name="301"></a>
PRO <h2>3.1 ASM Diskgroup Attribute</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="120">Disk Name</th>
PRO <th>Name </th>
PRO <th>Value </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td>' ||v.attr_name||'</td>'||CHR(10)||
'<td>' ||v.value ||'</td>'||CHR(10)||
'</tr>'
FROM (select b.name,a.name attr_name,a.value from v$asm_attribute a,v$asm_diskgroup b
where a.group_number=b.group_number and a.name not like 'template.%') v;
PRO </table>PRO <a name="302"></a>
PRO <h2>3.2 ASM Disk Group</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="120">Name</th>
PRO <th>AU Size(MB) </th>
PRO <th>SECTOR_SIZE </th>
PRO <th>State </th>
PRO <th>Type </th>
PRO <th>Total(MB) </th>
PRO <th>Free(MB) </th>
PRO <th>Usable(MB) </th>
PRO <th>Offline_disks </th>
PRO <th>Used(%) </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.au_size ||'</td>'||CHR(10)||
'<td>'||v.sector_size ||'</td>'||CHR(10)||
'<td>'||v.state ||'</td>'||CHR(10)||
'<td>'||v.type ||'</td>'||CHR(10)||
'<td class=r>'||v.total_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.free_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.usable_file_mb||'</td>'||CHR(10)||
'<td '||case when v.offline_disks > 0 then 'class="x r"' else 'class=r' end||'>'||v.offline_disks||'</td>'||CHR(10)||
'<td '||case when v.used > 80 then 'class="x r"' else 'class=r' end||'>'||v.used ||'</td>'||CHR(10)||
'</tr>'
FROM (select name,allocation_unit_size au_size,sector_size,state,type,total_mb,free_mb,usable_file_mb,
offline_disks,round((total_mb-free_mb)/total_mb*100) used from v$asm_diskgroup) v;
PRO </table>PRO <a name="303"></a>
PRO <h2>3.3 ASM Disk Check</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="120">Name</th>
PRO <th>Failgroup </th>
PRO <th>Path </th>
PRO <th>Disk Number </th>
PRO <th>Mount Status </th>
PRO <th>Create Date </th>
PRO <th>Reads </th>
PRO <th>Writes </th>
PRO <th>Read Errors </th>
PRO <th>Write Errors </th>
PRO <th>Read Time </th>
PRO <th>Write Time </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.failgroup ||'</td>'||CHR(10)||
'<td>'||v.path ||'</td>'||CHR(10)||
'<td>'||v.disk_number ||'</td>'||CHR(10)||
'<td>'||v.mount_status ||'</td>'||CHR(10)||
'<td>'||v.create_date ||'</td>'||CHR(10)||
'<td class=r>'||v.reads ||'</td>'||CHR(10)||
'<td class=r>'||v.writes ||'</td>'||CHR(10)||
'<td '||case when v.read_errs !=0 then 'class="x r"' else 'class=r' end||'>'||v.read_errs ||'</td>'||CHR(10)||
'<td '||case when v.write_errs !=0 then 'class="x r"' else 'class=r' end||'>'||v.write_errs||'</td>'||CHR(10)||
'<td class=r>'||v.read_t ||'</td>'||CHR(10)||
'<td class=r>'||v.write_t||'</td>'||CHR(10)||
'</tr>'
FROM (select d.name,d.failgroup,d.path,d.disk_number,d.mount_status,d.create_date,
s.reads,s.writes,s.read_errs,s.write_errs,trunc(s.read_time) read_t,trunc(s.write_time) write_t
from v$asm_disk d,v$asm_disk_stat s
where d.name=s.name and d.failgroup=s.failgroup order by 1,2) v;
PRO </table>PRO <a name="304"></a>
PRO <h2>3.4 ASM Operation</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="120">ASM Group Name</th>
PRO <th>Operation </th>
PRO <th>State </th>
PRO <th>Power </th>
PRO <th>Actual </th>
PRO <th>Sofar </th>
PRO <th>Est Work </th>
PRO <th>Est Rate </th>
PRO <th>Est Minutes</th>
PRO <th>Error Code </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td class=x>'||v.operation||'</td>'||CHR(10)||
'<td>'||v.state ||'</td>'||CHR(10)||
'<td>'||v.power ||'</td>'||CHR(10)||
'<td>'||v.actual ||'</td>'||CHR(10)||
'<td>'||v.sofar ||'</td>'||CHR(10)||
'<td>'||v.est_work ||'</td>'||CHR(10)||
'<td>'||v.est_rate ||'</td>'||CHR(10)||
'<td>'||v.est_minutes||'</td>'||CHR(10)||
'<td>'||v.error_code ||'</td>'||CHR(10)||
'</tr>'
FROM (select g.name,o.operation,o.state,power,actual,sofar,est_work,est_rate,est_minutes,error_code from v$asm_operation o,v$asm_diskgroup g
where g.group_number=o.group_number
union all select '.',null,null,null,null,null,null,null,null,null from dual) v;
PRO </table>PRO <a name="40"></a>
PRO <h1>4. Performance </h1>
PRO <u1>
PRO <li><a style="color:#663300" href="#401">4.1 Load Profile Per Sec</a></li>
PRO <li><a style="color:#663300" href="#406">4.2 DBTime,IO,PGA,TEMP Usage in 3 Days</a></li>
PRO </u1>
PRO <hr />PRO <a name="401"></a>
PRO <h2>4.1 Load Profile in Last 5 Snaps Per Sec</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th>Redo size </th>
PRO <th>Logical reads </th>
PRO <th>Physical reads</th>
PRO <th>Block changes </th>
PRO <th>User calls </th>
PRO <th>Parses </th>
PRO <th>Hard parses </th>
PRO <th>Sorts </th>
PRO <th>Logons </th>
PRO <th>Executes </th>
PRO <th>Transactions </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td>'||v.redosize ||'</td>'||CHR(10)||
'<td>'||v.logicalread ||'</td>'||CHR(10)||
'<td>'||v.physicalread||'</td>'||CHR(10)||
'<td>'||v.blockchange ||'</td>'||CHR(10)||
'<td>'||v.usercall ||'</td>'||CHR(10)||
'<td>'||v.parses ||'</td>'||CHR(10)||
'<td '||case when v.hardparses > 50 then 'class=x' else null end||'>'||v.hardparses||'</td>'||CHR(10)||
'<td>'||v.sorts ||'</td>'||CHR(10)||
'<td '||case when v.logons > 50 then 'class=x' else null end||'>'||v.logons ||'</td>'||CHR(10)||
'<td '||case when v.execs > 10000 then 'class=x' else null end||'>'||v.execs ||'</td>'||CHR(10)||
'<td>'||v.trans ||'</td>'||CHR(10)||
'</tr>'
FROM (select
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('redo size')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('redo size'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) redosize,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('session logical reads')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('session logical reads'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) logicalread,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('db block changes')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('db block changes'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 + EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) blockchange,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('physical reads')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('physical reads'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) physicalread,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('user calls')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('user calls'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) usercall,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('parse count (total)')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('parse count (total)'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) parses,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('parse count (hard)')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('parse count (hard)'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) hardparses,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('sorts (disk)')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('sorts (disk)'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) sorts,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('logons cumulative')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('logons cumulative'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) logons,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('execute count')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('execute count'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 +
EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) execs,
round(((SELECT sum(value) FROM DBA_HIST_SYSSTAT e WHERE e.SNAP_ID = :end_snap AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM AND e.STAT_NAME in ('user rollbacks', 'user commits')) -
(SELECT sum(value) FROM DBA_HIST_SYSSTAT b WHERE b.SNAP_ID = :beg_snap AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND b.STAT_NAME in ('user rollbacks', 'user commits'))) /
(SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 +
EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E where e.snap_id = :end_snap and b.snap_id = :beg_snap
AND b.DBID = :L_DBID AND b.INSTANCE_NUMBER = :L_INST_NUM AND e.DBID = :L_DBID AND e.INSTANCE_NUMBER = :L_INST_NUM), 2) trans
from dual) v;
PRO </table>PRO <a name="402"></a>
PRO <h2>4.2 DBTime,IO,PGA,TEMP Usage in 3 Days</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th width="150">DATE_TIME</th>
PRO <th>SNAP_ID </th>
PRO <th>DBTIME/S </th>
PRO <th>IO_READ(KB/S) </th>
PRO <th>IO_WRITE(KB/S)</th>
PRO <th>IO_TOTAL(KB/S)</th>
PRO <th>IOPS_READ </th>
PRO <th>IOPS_WRITE </th>
PRO <th>IOPS_TOTAL </th>
PRO <th>PGA Allocate(MB) </th>
PRO <th>TEMP Allocate(MB)</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.date_time||'</td>'||CHR(10)||
'<td class=r>'||v.snap_id ||'</td>'||CHR(10)||
'<td class=r>'||v.per_sec ||'</td>'||CHR(10)||
'<td class=r>'||v.ioreads ||'</td>'||CHR(10)||
'<td class=r>'||v.iowrites ||'</td>'||CHR(10)||
'<td class=r>'||v.iototals ||'</td>'||CHR(10)||
'<td class=r>'||v.iopsread ||'</td>'||CHR(10)||
'<td class=r>'||v.iopswrite||'</td>'||CHR(10)||
'<td class=r>'||v.iopstotal||'</td>'||CHR(10)||
'<td class=r>'||v.pga_allocated_mb ||'</td>'||CHR(10)||
'<td class=r>'||v.temp_space_allocated_mb||'</td>'||CHR(10)||
'</tr>'
FROM (
with x as (
select /*+ materialize */ ss.instance_number,
sn.begin_interval_time begin_interval_time,
sn.end_interval_time end_interval_time,
ss.snap_id,
ss.value e_value,
lag(ss.value, 1) over(order by ss.snap_id) b_value
from dba_hist_sysstat ss, dba_hist_snapshot sn
where trunc(sn.begin_interval_time) >= sysdate - 3
and ss.snap_id = sn.snap_id
and ss.dbid = sn.dbid
and ss.instance_number = sn.instance_number
and ss.instance_number = (select instance_number from v$instance)
and ss.dbid = (select dbid from v$database)
and ss.stat_name = 'DB time'),
y as
(select /*+ materialize */ begin_interval_time, end_interval_time, stat_name, snap_id,
decode(stat_name,'physical read total bytes', trunc((e_value-b_value)/1024)/
(extract(day from(end_interval_time - begin_interval_time)) * 24 * 60 * 60 +
extract(hour from(end_interval_time - begin_interval_time)) * 60 * 60 +
extract(minute from(end_interval_time - begin_interval_time)) * 60 +
extract(second from(end_interval_time - begin_interval_time)))) "READ_KB/S",
decode(stat_name,'physical write total bytes', trunc((e_value-b_value)/1024)/
(extract(day from(end_interval_time - begin_interval_time)) * 24 * 60 * 60 +
extract(hour from(end_interval_time - begin_interval_time)) * 60 * 60 +
extract(minute from(end_interval_time - begin_interval_time)) * 60 +
extract(second from(end_interval_time - begin_interval_time)))) "WRITE_KB/S",
decode(stat_name,'physical read total IO requests', trunc(e_value-b_value)/
(extract(day from(end_interval_time - begin_interval_time)) * 24 * 60 * 60 +
extract(hour from(end_interval_time - begin_interval_time)) * 60 * 60 +
extract(minute from(end_interval_time - begin_interval_time)) * 60 +
extract(second from(end_interval_time - begin_interval_time)))) "READ_IOPS",
decode(stat_name,'physical write total IO requests', trunc(e_value-b_value)/
(extract(day from(end_interval_time - begin_interval_time)) * 24 * 60 * 60 +
extract(hour from(end_interval_time - begin_interval_time)) * 60 * 60 +
extract(minute from(end_interval_time - begin_interval_time)) * 60 +
extract(second from(end_interval_time - begin_interval_time)))) "WRITE_IOPS"
from(select sn.begin_interval_time begin_interval_time,
sn.end_interval_time end_interval_time,
ss.stat_name stat_name, ss.snap_id, ss.value e_value,
lag(ss.value, 4) over(order by ss.snap_id,stat_name) b_value
from dba_hist_sysstat ss, dba_hist_snapshot sn
where trunc(sn.begin_interval_time) >= sysdate - 3
and sn.begin_interval_time > (select STARTUP_TIME from v$instance)
and ss.snap_id = sn.snap_id
and ss.dbid = sn.dbid
and ss.instance_number = sn.instance_number
and ss.dbid = (select dbid from v$database)
and ss.instance_number = (select instance_number from v$instance)
and ss.stat_name in('physical read total bytes','physical write total bytes','physical read total IO requests','physical write total IO requests'))),
tab1 as(
select /*+ materialize */ to_char(BEGIN_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi') ||to_char(END_INTERVAL_TIME, ' hh24:mi') date_time, snap_id,
round((e_value - nvl(b_value, 0)) /
(extract(day from(end_interval_time - begin_interval_time)) * 24 * 60 * 60 +
extract(hour from(end_interval_time - begin_interval_time)) * 60 * 60 +
extract(minute from(end_interval_time - begin_interval_time)) * 60 +
extract(second from(end_interval_time - begin_interval_time))), 0) per_sec
from x where (e_value - nvl(b_value, 0)) > 0and nvl(b_value, 0) > 0),
tab2 as(
select /*+ materialize */ to_char(BEGIN_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi') || to_char(END_INTERVAL_TIME, ' hh24:mi') date_time2, snap_id,
round(sum(nvl("READ_KB/S", 0))) ioreads,
round(sum(nvl("WRITE_KB/S",0))) iowrites,
round(sum(nvl("READ_KB/S", 0))+sum(nvl("WRITE_KB/S",0))) iototals,
round(sum(nvl("READ_IOPS",0))) iopsread,
round(sum(nvl("WRITE_IOPS",0))) iopswrite,
round(sum(nvl("READ_IOPS",0)+nvl("WRITE_IOPS",0))) iopstotal
from y group by to_char(BEGIN_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi') || to_char(END_INTERVAL_TIME, ' hh24:mi'),snap_id),
tab3 as(
select /*+ materialize */ snap_id, dbid, instance_number, session_id, max(pga_allocated) max_pga_alloc,max(temp_space_allocated) max_tem_alloc
from dba_hist_active_sess_history group by snap_id, dbid, instance_number, session_id),
tab4 as(
select /*+ materialize */ to_char(BEGIN_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi') || to_char(END_INTERVAL_TIME, ' hh24:mi') date_time3, s.snap_id,
nvl(round(sum(a.max_pga_alloc/1024/1024)),0) pga_allocated_mb,
nvl(round(sum(a.max_tem_alloc/1024/1024)),0) temp_space_allocated_mb
from tab3 a, dba_hist_snapshot s
where a.dbid=s.dbid
and a.snap_id=s.snap_id
and a.instance_number=s.instance_number
and a.instance_number in (select instance_number from v$instance)
and s.begin_interval_time>sysdate-3
group by to_char(BEGIN_INTERVAL_TIME, 'yyyy-mm-dd hh24:mi') || to_char(END_INTERVAL_TIME, ' hh24:mi'),s.snap_id)
select date_time,tab1.snap_id,per_sec,ioreads,iowrites,iototals,iopsread,iopswrite,iopstotal,pga_allocated_mb,temp_space_allocated_mb
from tab1,tab2,tab4 where date_time=date_time2 and date_time2=date_time3 order by date_time) v;
PRO </table> PRO <a name="50"></a>
PRO <h1>5. Backup and Recover</h1>
PRO <u1>
PRO <li><a style="color:#663300" href="#501">5.1 DG Parameter</a></li>
PRO <li><a style="color:#663300" href="#502">5.2 DG Standby Logfile</a></li>
PRO <li><a style="color:#663300" href="#503">5.3 DG Apllied Status</a></li>
PRO <li><a style="color:#663300" href="#504">5.4 DG Process</a></li>
PRO <li><a style="color:#663300" href="#505">5.5 DG Apply Histogram</a></li>
PRO <li><a style="color:#663300" href="#506">5.6 DG Stats</a></li>
PRO <li><a style="color:#663300" href="#507">5.7 DG Alert Log</a></li>
PRO <li><a style="color:#663300" href="#508">5.8 RMAN Backup Summary</a></li>
PRO <li><a style="color:#663300" href="#509">5.9 RMAN Backup Info</a></li>
PRO <li><a style="color:#663300" href="#510">5.10 Flash Recovery Area Usage</a></li>
PRO <li><a style="color:#663300" href="#511">5.11 RMAN Configuration</a></li>
PRO <li><a style="color:#663300" href="#512">5.12 Block Change Tracking</a></li>
PRO <li><a style="color:#663300" href="#513">5.13 Restore Point</a></li>
PRO <li><a style="color:#663300" href="#514">5.14 Need Recover Datafile</a></li>
PRO <li><a style="color:#663300" href="#515">5.15 Corrpution Block</a></li>
PRO <li><a style="color:#663300" href="#516">5.16 Orphaned DataPump Jobs</a></li>
PRO <li><a style="color:#663300" href="#517">5.17 Archive Log Size in last 10 Days</a></li>
PRO </u1>
PRO <hr />PRO <a name="501"></a>
PRO <h2>5.1 DG Parameter</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th width="200">Name </th>
PRO <th width="800">Value</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.name ||'</td>'||CHR(10)||
'<td '||case when v.name='standby_file_management' and v.value='MANUAL' then 'class=x' else null end||'>'||v.value||'</td>'||CHR(10)||
'</tr>'
FROM (select name,value from v$parameter
where name in ('log_archive_config','fal_client','fal_server','standby_file_management',
'standby_archive_dest','redo_transport_user')
and value is not null
union
select p1.name||' '||upper(p2.value) name,p1.value from v$parameter p1,v$parameter p2
where substr(p1.name,-2)= substr(p2.name,-2)
and p1.name like 'log_archive_dest_%' and p1.value is not null
and p2.name like 'log_archive_dest_state_%'
and (p1.name not like 'log_archive_dest_state_%' and p1.value is not null)) v;
PRO </table>PRO <a name="502"></a>
PRO <h2>5.2 DG Standby Logfile</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <tr>
PRO <th class=y>Thread# </th>
PRO <th class=y>Group# </th>
PRO <th class=y>Member </th>
PRO <th class=y>Status </th>
PRO <th class=y>Sequence#</th>
PRO <th class=y>Size(MB) </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td width="80" class=y>'||v.thread#||'</td>'||CHR(10)||
'<td>'||v.group#||'</td>'||CHR(10)||
'<td>'||v.member||'</td>'||CHR(10)||
'<td>'||v.status||'</td>'||CHR(10)||
'<td>'||v.sequence#||'</td>'||CHR(10)||
'<td '||case when v.redo_size < 49 then 'class=x' else null end||'>'||v.redo_size||'</td>'||CHR(10)||
'</tr>'
FROM (select to_char(a.thread#) thread#,a.group#,b.member,a.status,sequence#,trunc(a.bytes/1024/1024) redo_size
from v$standby_log a,v$logfile b where a.group#=b.group#
union all select '.',null,null,null,null,null from dual
order by 1,2) v;
PRO </table>PRO <a name="503"></a>
PRO <h2>5.3 DG Apllied Status</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Thread ID </th>
PRO <th>Name </th>
PRO <th>Open Mode </th>
PRO <th>Protection Mode </th>
PRO <th>Protection Level </th>
PRO <th>Database Role </th>
PRO <th>Switchover Status</th>
PRO <th>Applog </th>
PRO <th>Nowlog </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.thread# ||'</td>'||CHR(10)||
'<td>'||v.name ||'</td>'||CHR(10)||
'<td>'||v.open_mode ||'</td>'||CHR(10)||
'<td>'||v.protection_mode ||'</td>'||CHR(10)||
'<td>'||v.protection_level ||'</td>'||CHR(10)||
'<td>'||v.database_role ||'</td>'||CHR(10)||
'<td>'||v.switchover_status||'</td>'||CHR(10)||
'<td>'||v.applog ||'</td>'||CHR(10)||
'<td '||case when v.nowlog - v.applog > 5 then 'class=x' else null end||'>'||v.nowlog||'</td>'||CHR(10)||
'</tr>'
FROM (select to_char(a.thread#) thread#,c.name,c.open_mode,c.protection_mode,c.protection_level,c.database_role,c.switchover_status,a.applog,b.nowlog from
(select thread#, max(sequence#) applog from v$archived_log where applied='YES' group by thread#) a,
(select thread#, max(sequence#) nowlog from v$log group by thread#) b,v$database c
where a.thread#=b.thread#
union all select '.',null,null,null,null,null,null,null,null from dual) v;
PRO </table>
PRO </td></tr>PRO <a name="504"></a>
PRO <h2>5.4 DG Process</h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Process </th>
PRO <th>Pid </th>
PRO <th>Status </th>
PRO <th>Client Process</th>
PRO <th>Client Pid </th>
PRO <th>Group# </th>
PRO <th>Resetlog Id </th>
PRO <th>Thread# </th>
PRO <th>Sequence# </th>
PRO <th>Block# </th>
PRO <th>Blocks </th>
PRO <th>Delay Mins </th>
PRO <th>Known Agents </th>
PRO <th>Active Agents </th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td class=y>'||v.process||'</td>'||CHR(10)||
'<td>'||v.pid ||'</td>'||CHR(10)||
'<td>'||v.status ||'</td>'||CHR(10)||
'<td>'||v.client_process||'</td>'||CHR(10)||
'<td>'||v.client_pid ||'</td>'||CHR(10)||
'<td>'||v.group# ||'</td>'||CHR(10)||
'<td>'||v.resetlog_id ||'</td>'||CHR(10)||
'<td>'||v.thread# ||'</td>'||CHR(10)||
'<td>'||v.sequence# ||'</td>'||CHR(10)||
'<td>'||v.block# ||'</td>'||CHR(10)||
'<td>'||v.blocks ||'</td>'||CHR(10)||
'<td '||case when v.delay_mins > 5 then 'class=x' else null end||'>'||v.delay_mins||'</td>'||CHR(10)||
'<td>'||v.known_agents ||'</td>'||CHR(10)||
'<td>'||v.active_agents ||'</td>'||CHR(10)||
'</tr>'
FROM (select process,pid,status,client_process,client_pid,group#,resetlog_id,
thread#,sequence#,block#,blocks,delay_mins,known_agents,active_agents from v$managed_standby order by process,group#) v;
PRO </table>
PRO </td></tr>PRO <a name="505"></a>
PRO <h2>5.5 DG Apply Histogram (<30sec) </h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Name </th>
PRO <th>Time </th>
PRO <th>Unit </th>
PRO <th>Count</th>
PRO <th>Last Time Updated</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td>'||v.name||'</td>'||CHR(10)||
'<td>'||v.time||'</td>'||CHR(10)||
'<td>'||v.unit||'</td>'||CHR(10)||
'<td>'||v.count||'</td>'||CHR(10)||
'<td>'||v.last_time_updated||'</td>'||CHR(10)||
'</tr>'
FROM (select name,time,unit,count,last_time_updated from v$standby_event_histogram
where name = 'apply lag' and unit='seconds' and time <30 and count>0
union all select '.',null,null,null,null from dual order by 1) v;
PRO </table>PRO <a name="506"></a>
PRO <h2>5.6 DG STATS </h2>
PRO <table border="1px" bordercolor="#000000" cellspacing="0px" style="border-collapse:collapse">
PRO <th>Name </th>
PRO <th>Value</th>
PRO <th>Unit </th>
PRO <th>Time Computed</th>
PRO </tr>
SELECT CHR(10)||'<tr>'||CHR(10)||
'<td>'||v.name||'</td>'||CHR(10)||
'<td>'||v.value||'</td>'||CHR(10)||
'<td>'||v.unit||'</td>'||CHR(10)||
'<td>'||v.time_computed||'</td>'||CHR(10)||
'</tr>'
FROM (select name,value,unit,time_computed from v$dataguard_stats
union all select '.',null,null,null from dual order by 1) v;
PRO </table>PRO </body>
PRO </html>

举报

相关推荐

0 条评论