5.02021-11-21T21:49:34ZTemplatesTemplates/DatabasesOracle DBOracle DB## Overview
Zabbix template for oracle
==========================
Steps in order to make it work:
-------------------------------
1. Install ODBC drivers for your OS (Oracle)
2. Create some user in your Oracle database for Zabbix
3. Maintain your odbc.ini and add new DSN
4. Fill corresponding connect DSN in {#DSN} and {#BACKUP\_DSN} macro at your zabbix host.
5. Grant **select any dictionary** to created user at step #2.
6. If some specific permission is required for some specific item, it will be available at item description.
Future plans:
-------------
* Add more performance metric items and triggers
* Add support for Oracle RAC
* Add compatibility for Oracle DataGuard instances
Github repo: <https://github.com/HellScre4m/zabbix-monitoring-templates>
Some hints:
-----------
**Min Zabbix version** is prone to **change** at higher versions. Always check template description before getting new version.
Current supporting Oracle is **11gr2**
Feel free to fork/edit/pull request.
Version / Zabbix version:
-------------------------
1.0 / 4.2+
## Author
SuNova
TemplatesTemplates/DatabasesArchival DestinationDatabaseIOLocksSessionsSQL- Archived log Primary-Standby gapODBCdb.odbc.select[archive log gap,{$DSN}]10m7dselect (select max(sequence#) from v$archived_log) - (select max(sequence#) from v$archived_log where applied = 'YES')
from dual;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST{last()}>=5DB - DG archive gap detected => {ITEM.VALUE1}WARNINGDB - DG massive archive gap detected => {ITEM.VALUE1}{Oracle DB:db.odbc.select[archive log gap,{$DSN}].last()}>=10ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{last()}>=10DB - DG massive archive gap detected => {ITEM.VALUE1}HIGHApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical
- Last 24h backup detailsODBCdb.odbc.select[backup status,{$BACKUP_DSN}]1h1dFLOATselect * from (
select case
when status = 'COMPLETED' then 1
when status = 'FAILED' then -1
when status like 'WITH WARNINGS' then 2
when status like 'WITH ERRORS' then 3
else 0 end
from v$rman_status
where trunc(start_time) = trunc(sysdate-{$ORACLE_BACKUP_HOUR}/24) and operation = 'BACKUP' and (object_type='DB INCR' or object_type='DB FULL')
order by start_time asc)
where rownum=1;{$DB_USERNAME}{$DB_PASSWORD}when status = 'COMPLETED' then 1
when status = 'FAILED' then -1
when status like 'WITH WARNINGS' then 2
when status like 'WITH ERRORS' then 3
else 0DatabaseOracle backup statusPOST{last()}=-1
or
{nodata(24h)}=1RECOVERY_EXPRESSION{last()}>=0Database has no backup last 24hrsAVERAGEYESApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{last()}=3Last DB backup contains errorsHIGHYESApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{last()}=2Last DB backup contains warningsWARNINGYESApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{last()}=-1RECOVERY_EXPRESSION{last()}>=0Last DB backup is failedHIGHYESApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical
- Blocked sessions countODBCdb.odbc.select[Blocked sessions count,{$DSN}]5m7dselect count(distinct sid) from v$session_blockers;{$DB_USERNAME}{$DB_PASSWORD}DatabaseLocks
- Buffer Cache Hit RatioODBCdb.odbc.select[Buffer Cache Hit Ratio,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='Buffer Cache Hit Ratio' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Cursor Cache Hit RatioODBCdb.odbc.select[Cursor Cache Hit Ratio,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='Cursor Cache Hit Ratio' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Database CPU Time RatioODBCdb.odbc.select[Database CPU Time Ratio,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='Database CPU Time Ratio' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Database lock countODBCdb.odbc.select[Database lock count,{$DSN}]5m7dselect count(1)
from v$lock;{$DB_USERNAME}{$DB_PASSWORD}DatabaseLocks
- Database session countODBCdb.odbc.select[db session count,{$DSN}]5m7dselect count(1) from v$session;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Global DB nameODBCdb.odbc.select[global_db_name,{$DSN}]1d30d0TEXTselect property_value
from database_properties
where property_name='GLOBAL_DB_NAME';{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Host CPU Utilization %ODBCdb.odbc.select[Host CPU Utilization,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='Host CPU Utilization (%)' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Instance CPU countODBCdb.odbc.select[Instance CPU count,{$DSN}]1h7dselect value from
v$system_parameter2
where name='cpu_count';{$DB_USERNAME}{$DB_PASSWORD}Database
- Instance statusODBCdb.odbc.select[Instance Status,{$DSN}]607d0TEXTselect status from v$instance{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST{count(#1,OPEN,eq)}=0
or
{nodata(150)}=1Database Is DownDISASTERApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical
- Instance nameODBCdb.odbc.select[instance_name,{$DSN}]1d30d0TEXTselect instance_name from v$instance;{$DB_USERNAME}{$DB_PASSWORD}DatabaseDISCARD_UNCHANGEDPOST
- Long table scans per secODBCdb.odbc.select[Long Table Scans Per Sec,{$DSN}]5m7dFLOATselect value
from v$sysmetric
where metric_name='Long Table Scans Per Sec' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}Database
- Max applied archived logODBCdb.odbc.select[max applied archived log,{$DSN}]5m7dselect max(sequence#) from v$archived_log where applied = 'YES';{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Max archived logODBCdb.odbc.select[max archived log,{$DSN}]5m7dselect case
when max(sequence#) is null then 0
else max(sequence#) end
from v$archived_log;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST{last()}=0RECOVERY_EXPRESSION{last()}>0Database is not in archive modeWARNINGApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical
- Maximum processesODBCdb.odbc.select[max number of processes,{$DSN}]1h7dselect value from v$system_parameter
where name ='processes';{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Maximum sessionsODBCdb.odbc.select[max number of sessions,{$DSN}]1h7dselect value from v$system_parameter
where name ='sessions';{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- PGA Cache Hit %ODBCdb.odbc.select[PGA Cache Hit Percentage,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='PGA Cache Hit %' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Physical Read Bytes Per SecODBCdb.odbc.select[Physical Read Bytes Per Sec,{$DSN}]2m7dFLOATBpsselect value
from v$sysmetric
where metric_name='Physical Read Bytes Per Sec' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabaseIO{avg(15m)} / ({avg(1w)} + {$MIN_READ_BPS}) >=1.75RECOVERY_EXPRESSION{avg(#3)} / ({avg(1w)} + {$MIN_READ_BPS}) <1.75Database Read Bps is abnormal => {ITEM.VALUE1}WARNINGYESDatabase Read Bps is high => {ITEM.VALUE1}{Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].avg(10m)} / ({Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_READ_BPS}) >=2{Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].avg(#2)} / ({Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_READ_BPS}) <2ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{avg(10m)} / ({avg(1w)} + {$MIN_READ_BPS}) >=2RECOVERY_EXPRESSION{avg(#2)} / ({avg(1w)} + {$MIN_READ_BPS}) <2Database Read Bps is high => {ITEM.VALUE1}AVERAGEYESDatabase Read Bps is very high => {ITEM.VALUE1}{Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].avg(5m)} / ({Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_READ_BPS}) >=2.25{Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].last()} / ({Oracle DB:db.odbc.select[Physical Read Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_READ_BPS}) <2.25ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{avg(5m)} / ({avg(1w)} + {$MIN_READ_BPS}) >=2.25RECOVERY_EXPRESSION{last()} / ({avg(1w)} + {$MIN_READ_BPS}) <2.25Database Read Bps is very high => {ITEM.VALUE1}HIGHYESApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical
- Physical reads direct per secODBCdb.odbc.select[Physical reads direct per sec,{$DSN}]5m7dFLOATselect value
from v$sysstat
where name='physical reads direct';{$DB_USERNAME}{$DB_PASSWORD}DatabaseIOCHANGE_PER_SECOND
- Physical reads direct temporary tablespace per secODBCdb.odbc.select[physical reads direct temporary tablespace per sec,{$DSN}]5m7dFLOATselect value
from v$sysstat
where name='physical reads direct temporary tablespace';{$DB_USERNAME}{$DB_PASSWORD}DatabaseIOCHANGE_PER_SECOND
- Physical Reads Per SecODBCdb.odbc.select[Physical Reads Per Sec,{$DSN}]5m7dFLOATselect value
from v$sysmetric
where metric_name='Physical Reads Per Sec' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabaseIO
- Physical Write Bytes Per SecODBCdb.odbc.select[Physical Write Bytes Per Sec,{$DSN}]2m7dFLOATBpsselect value
from v$sysmetric
where metric_name='Physical Write Bytes Per Sec' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabaseIO{avg(15m)} / ({avg(1w)} + {$MIN_WRITE_BPS}) >=1.75RECOVERY_EXPRESSION{avg(#3)} / ({avg(1w)} + {$MIN_WRITE_BPS}) <1.75Database Write Bps is abnormal => {ITEM.VALUE1}WARNINGYESDatabase Write Bps is high => {ITEM.VALUE1}{Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].avg(10m)} / ({Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_WRITE_BPS}) >=2{Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].avg(#2)} / ({Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_WRITE_BPS}) <2ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{avg(10m)} / ({avg(1w)} + {$MIN_WRITE_BPS}) >=2RECOVERY_EXPRESSION{avg(#2)} / ({avg(1w)} + {$MIN_WRITE_BPS}) <2Database Write Bps is high => {ITEM.VALUE1}AVERAGEYESDatabase Write Bps is very high => {ITEM.VALUE1}{Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].avg(5m)} / ({Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_WRITE_BPS}) >=2.25{Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].last()} / ({Oracle DB:db.odbc.select[Physical Write Bytes Per Sec,{$DSN}].avg(1w)} + {$MIN_WRITE_BPS}) <2.25ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{avg(5m)} / ({avg(1w)} + {$MIN_WRITE_BPS}) >=2.25RECOVERY_EXPRESSION{last()} / ({avg(1w)} + {$MIN_WRITE_BPS}) <2.25Database Write Bps is very high => {ITEM.VALUE1}HIGHYESApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical
- Physical writes direct per secODBCdb.odbc.select[Physical writes direct per sec,{$DSN}]5m7dFLOATselect value
from v$sysstat
where name='physical writes direct';{$DB_USERNAME}{$DB_PASSWORD}DatabaseIOCHANGE_PER_SECOND
- Physical Writes Per SecODBCdb.odbc.select[Physical Writes Per Sec,{$DSN}]5m7dFLOATselect value
from v$sysmetric
where metric_name='Physical Writes Per Sec' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabaseIO
- Redo Allocation Hit RatioODBCdb.odbc.select[Redo Allocation Hit Ratio,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='Redo Allocation Hit Ratio' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Session blockers countODBCdb.odbc.select[session blockers count,{$DSN}]5m7dselect count(distinct blocker_sid) from v$session_blockers;{$DB_USERNAME}{$DB_PASSWORD}DatabaseLocksPOST
- Shared Pool Free %ODBCdb.odbc.select[Shared Pool Free %,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='Shared Pool Free %' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}Database
- Soft Parse RatioODBCdb.odbc.select[Soft Parse Ratio,{$DSN}]5m7dFLOAT%select value
from v$sysmetric
where metric_name='Soft Parse Ratio' and group_id=2;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST
- Waiting sessions countODBCdb.odbc.select[Waiting sessions count,{$DSN}]5m7dselect count(1)
from v$session
where username is not null
and wait_time = 0
and wait_class# != 6;{$DB_USERNAME}{$DB_PASSWORD}DatabaseLocks
Active session discoveryODBCdb.odbc.discovery[active session discovery,{$DSN}]5mselect distinct sid
from v$session
where username is not null
and wait_class#!=6;{$DB_USERNAME}{$DB_PASSWORD}0Session {#SID} CPU used in secondsODBCdb.odbc.select[session {#SID} CPU time,{$DSN}]2m7dFLOATselect value/100 from v$sesstat
join v$statname using (statistic#)
where name = 'CPU used by this session'
and sid={#SID};{$DB_USERNAME}{$DB_PASSWORD}DatabaseSessionsSession {#SID}Session {#SID} SQL IDODBCdb.odbc.select[session {#SID} SQL ID,{$DSN}]5m1d0TEXTselect sql_id
from v$session
where sid={#SID};{$DB_USERNAME}{$DB_PASSWORD}DatabaseSessionsSession {#SID}SQLDISCARD_UNCHANGED_HEARTBEAT86400Session {#SID} usernameODBCdb.odbc.select[session {#SID} username,{$DSN}]5m1d0TEXTselect username
from v$session
where sid={#SID};{$DB_USERNAME}{$DB_PASSWORD}DatabaseSessionsSession {#SID}DISCARD_UNCHANGED_HEARTBEAT86400Session {#SID} change in CPU time per secDEPENDENToracle.db.session.cpu_time_change[{#SID}]07dFLOATDatabaseSessionsSession {#SID}CHANGE_PER_SECONDdb.odbc.select[session {#SID} CPU time,{$DSN}]{Oracle DB:db.odbc.select[Host CPU Utilization,{$DSN}].last()}>=60
and
{Oracle DB:db.odbc.select[session {#SID} CPU time,{$DSN}].last()}>=0.7Session {#SID} is devouring CPU!HIGHApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{Oracle DB:db.odbc.select[Host CPU Utilization,{$DSN}].last()}>=60
and
{Oracle DB:db.odbc.select[session {#SID} CPU time,{$DSN}].last()}>=0.6Session {#SID} is eating CPU!AVERAGE{Oracle DB:db.odbc.select[Host CPU Utilization,{$DSN}].last()}>=50
and
{Oracle DB:db.odbc.select[session {#SID} CPU time,{$DSN}].last()}>=0.5Session {#SID} is hogging CPU!WARNINGArchive destination discoveryODBCdb.odbc.discovery[Archive destination discovery,{$DSN}]1hselect DEST_ID
from v$archive_DEST_STATUS
where status='VALID'
and TYPE != 'LOCAL';{$DB_USERNAME}{$DB_PASSWORD}0Destination {#DEST_ID} statusODBCdb.odbc.select[Dest {#DEST_ID} status. {#DSN}]5m7dselect STATUS
from v$archive_dest_status
where dest_id={#DEST_ID};{$DB_USERNAME}{$DB_PASSWORD}'VALID' 1
'INACTIVE' 2
'DEFERRED' 3
'ERROR' 4
'DISABLED' 5
'BAD PARAM' 6
'ALTERNATE' 7
'FULL' 8
else -1Archival DestinationArchival Destination {#DEST_ID}JAVASCRIPTif (value == 'VALID') return 1;
if (value == 'INACTIVE') return 2;
if (value == 'DEFERRED') return 3;
if (value == 'ERROR') return 4;
if (value == 'DISABLED') return 5;
if (value == 'BAD PARAM') return 6;
if (value == 'ALTERNATE') return 7;
if (value == 'FULL') return 8;
return -1;ASM disk discoveryODBCdb.odbc.discovery[ASM Disk Discovery,{$DSN}]select name as disk_name,
case mount_status
when 'MISSING' then -3
when 'CLOSED' then -2
when 'CLOSING' then -1
when 'IGNORED' then 0
when 'OPENED' then 1
when 'CACHED' then 2 end as mount_status,
case mode_status
when 'OFFLINE' then 0
when 'ONLINE' then 1 end as mode_status,
case state
when 'NORMAL' then 1
when 'UNKNOWN' then 0
when 'ADDING' then 2
when 'DROPPING' then 3
when 'HUNG' then -1
when 'FORCING' then -2 end as state,
os_mb, total_mb, free_mb from v$asm_disk_stat;{$DB_USERNAME}{$DB_PASSWORD}7dASM disk: {#DISK_NAME}: mode statusCALCULATEDoracle.asm.disk.mode_status[{#DISK_NAME}]5m{#MODE_STATUS}when 'OFFLINE' then 0
when 'ONLINE' then 1ASMOracle ASM disk mount statusASM disk: {#DISK_NAME}: mount statusCALCULATEDoracle.asm.disk.mount_status[{#DISK_NAME}]5m{#MOUNT_STATUS}when 'MISSING' then -3
when 'CLOSED' then -2
when 'CLOSING' then -1
when 'IGNORED' then 0
when 'OPENED' then 1
when 'CACHED' then 2ASMOracle ASM disk mount statusASM disk: {#DISK_NAME}: stateCALCULATEDoracle.asm.disk.state[{#DISK_NAME}]{#STATE}when 'NORMAL' then 1
when 'UNKNOWN' then 0
when 'ADDING' then 2
when 'DROPPING' then 3
when 'HUNG' then -1
when 'FORCING' then -2ASMOracle ASM disk state{last()}<>1ASM disk {#DISK_NAME} is => {ITEM.VALUE1}DISASTERApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnicalASM disk: {#DISK_NAME}: total spaceCALCULATEDoracle.asm.disk.total_space[{#DISK_NAME}]5m1dB{#TOTAL_MB}ASMMULTIPLIER1048576POSTASM disk: {#DISK_NAME}: free spaceCALCULATEDoracle.db.disk.free_space[{#DISK_NAME}]5m1dB{#FREE_MB}ASMMULTIPLIER1048576ASM disk: {#DISK_NAME}: pct freeCALCULATEDoracle.db.disk.pct_free[{#DISK_NAME}]5m1dFLOAT%{#FREE_MB} / {#TOTAL_MB} * 100ASMMULTIPLIER1048576{last()} * {$ASM_USAGE_THRESHOLD} <=5ASM disk {#DISK_NAME} extremely low free space => {ITEM.VALUE1}HIGHASM disk {#DISK_NAME} zero free space{Oracle DB:oracle.db.disk.pct_free[{#DISK_NAME}].last()} <=0.01ApplicationOracleFieldDatabaseFieldStorageScopeInfrastructureTypeTechnical{last()} * {$ASM_USAGE_THRESHOLD} <=15ASM disk {#DISK_NAME} low free space => {ITEM.VALUE1}WARNINGASM disk {#DISK_NAME} very low free space => {ITEM.VALUE1}{Oracle DB:oracle.db.disk.pct_free[{#DISK_NAME}].last()} * {$ASM_USAGE_THRESHOLD} <=10ApplicationOracleFieldDatabaseFieldStorageScopeInfrastructureTypeTechnical{last()} * {$ASM_USAGE_THRESHOLD} <=10ASM disk {#DISK_NAME} very low free space => {ITEM.VALUE1}AVERAGEASM disk {#DISK_NAME} extremely low free space => {ITEM.VALUE1}{Oracle DB:oracle.db.disk.pct_free[{#DISK_NAME}].last()} * {$ASM_USAGE_THRESHOLD} <=5ApplicationOracleFieldDatabaseFieldStorageScopeInfrastructureTypeTechnical{last()} <=0.01ASM disk {#DISK_NAME} zero free spaceDISASTERApplicationOracleFieldDatabaseFieldStorageScopeInfrastructureTypeTechnicalPOSTBlocking session discoveryODBCdb.odbc.discovery[blocking sessions discovery,{$DSN}]5mselect distinct blocking_session as SID from v$session where blocking_session is not NULL;{$DB_USERNAME}{$DB_PASSWORD}0Total wait time on Blocking session: {#SID}ODBCdb.odbc.select[waiting time - {#SID},{$DSN}]5mselect
sum(seconds_in_wait) "SECONDS_IN_WAIT"
from
v$session
where
blocking_session= {#SID} and seconds_in_wait is not null;{$DB_USERNAME}{$DB_PASSWORD}DatabasePOST{last()}>{$BLOCK_THRESHOLD}Session {#SID} is an intensive blockerWARNINGPOSTFlash Recovery Area DiscoveryODBCdb.odbc.discovery[Flash Recovery Area Discovery,{$DSN}]5mselect name, space_limit, space_used
from v$recovery_file_dest;{$DB_USERNAME}{$DB_PASSWORD}FRA: {#NAME}: pct_usedCALCULATEDdb.oracle.fra.pct_used[{#NAME}]4m1dFLOAT%{#SPACE_USED}/{#SPACE_LIMIT}*100DatabaseFRA{last()} * {$FRA_USAGE_THRESHOLD} >= 95FRA is almost full => {ITEM.VALUE1}HIGHFRA is full => {ITEM.VALUE1}{Oracle DB:db.oracle.fra.pct_used[{#NAME}].last()}=100ApplicationOracleFieldDatabaseScopeInfrastractureTypeTechnical{last()}=100FRA is full => {ITEM.VALUE1}DISASTERApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{last()} * {$FRA_USAGE_THRESHOLD} >=85FRA space usage is high => {ITEM.VALUE1}WARNINGFRA space usage is very high => {ITEM.VALUE1}{Oracle DB:db.oracle.fra.pct_used[{#NAME}].last()} * {$FRA_USAGE_THRESHOLD} >=90ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{last()} * {$FRA_USAGE_THRESHOLD} >=90FRA space usage is very high => {ITEM.VALUE1}AVERAGEFRA is almost full => {ITEM.VALUE1}{Oracle DB:db.oracle.fra.pct_used[{#NAME}].last()} * {$FRA_USAGE_THRESHOLD} >= 95ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnicalFRA: {#NAME}: sizeCALCULATEDdb.oracle.fra.size[{#NAME}]4m1dB{#SPACE_LIMIT}DatabaseFRAFRA: {#NAME}: space_usedCALCULATEDdb.oracle.fra.space_used[{#NAME}]4m1dB{#SPACE_USED}DatabaseFRAScheduler jobs discoveryODBCdb.odbc.discovery[job discovery,{$DSN}]5mselect job_name, owner,
round(cast(req_start_date as date) - date '1970-01-01') * 24 *3600 as req_start_date,
round(cast(actual_start_date as date) - date '1970-01-01') * 24 *3600 as actual_start_date,
error#, run_duration
from user_scheduler_job_run_details
where rownum=1
order by req_start_date desc;{$DB_USERNAME}{$DB_PASSWORD}7dSchema discoveryODBCdb.odbc.discovery[Schema Discovery,{$DSN}]6hselect distinct owner
from dba_segments;{$DB_USERNAME}{$DB_PASSWORD}7dSchema {#OWNER}: sizeODBCdb.odbc.select[Schema {#OWNER} size,{$DSN}]1h7dBselect sum(bytes)
from dba_segments
where owner='{#OWNER}'{$DB_USERNAME}{$DB_PASSWORD}SIze of the schema.DatabaseSchemasTablespace discoveryODBCdb.odbc.discovery[Tablespace Discovery,{$DSN}]1hselect tablespace_name,
case
when contents in ('PERMANENT', 'UNDO') then
(select sum(bytes) from dba_data_files where tablespace_name=t.tablespace_name)
when contents='TEMPORARY' then
(select sum(bytes) from dba_temp_files where tablespace_name=t.tablespace_name) end
as "SIZE",
case
when contents in ('PERMANENT', 'UNDO') then
(select sum(
case
when autoextensible = 'YES' then maxbytes
else bytes
end)
from dba_data_files
where tablespace_name=t.tablespace_name)
when contents='TEMPORARY' then
(select sum(
case
when autoextensible = 'YES' then maxbytes
else bytes
end)
from dba_temp_files where tablespace_name=t.tablespace_name) end
as "MAX_SIZE",
case bigfile
when 'YES' then 1
when 'NO' then 0
end "BIGFILE",
case contents
when 'PERMANENT' then 1
when 'TEMPORARY' then 2
when 'UNDO' then 3
end "CONTENTS"
from dba_tablespaces t group by tablespace_name, bigfile, contents;{$DB_USERNAME}{$DB_PASSWORD}Tablespace: {#TABLESPACE_NAME}: bigfileCALCULATEDdb.oracle.tablespace.bigfile[{#TABLESPACE_NAME}]1h1d{#BIGFILE}DatabaseTablespacesTruthValueTablespace: {#TABLESPACE_NAME}: contentsCALCULATEDdb.oracle.tablespace.contents[{#TABLESPACE_NAME}]4m1d{#CONTENTS}DatabaseTablespacesOracle tablespace contentsTablespace: {#TABLESPACE_NAME}: max_sizeCALCULATEDdb.oracle.tablespace.max_size[{#TABLESPACE_NAME}]4m1dB{#MAX_SIZE}DatabaseTablespacesTablespace: {#TABLESPACE_NAME}: pct_usedCALCULATEDdb.oracle.tablespace.pct_used[{#TABLESPACE_NAME}]4m1dFLOAT%{#SIZE}/{#MAX_SIZE}*100DatabaseTablespacesTablespace: {#TABLESPACE_NAME}: sizeCALCULATEDdb.oracle.tablespace.size[{#TABLESPACE_NAME}]4m1dB{#SIZE}DatabaseTablespaces{Oracle DB:db.oracle.tablespace.pct_used[{#TABLESPACE_NAME}].last()} >= 95 * {$TB_USAGE_THRESHOLD}
and
{Oracle DB:db.oracle.tablespace.contents[{#TABLESPACE_NAME}].last()}=1Tablespace {#TABLESPACE_NAME} almost full => {ITEM.VALUE1}HIGHTablespace {#TABLESPACE_NAME} full => {ITEM.VALUE1}{Oracle DB:db.oracle.tablespace.pct_used[{#TABLESPACE_NAME}].last()}=100
and
{Oracle DB:db.oracle.tablespace.contents[{#TABLESPACE_NAME}].last()}=1{Oracle DB:db.oracle.tablespace.pct_used[{#TABLESPACE_NAME}].last()}=100
and
{Oracle DB:db.oracle.tablespace.contents[{#TABLESPACE_NAME}].last()}=1Tablespace {#TABLESPACE_NAME} full => {ITEM.VALUE1}DISASTER{Oracle DB:db.oracle.tablespace.pct_used[{#TABLESPACE_NAME}].last()} >= 85 * {$TB_USAGE_THRESHOLD}
and
{Oracle DB:db.oracle.tablespace.contents[{#TABLESPACE_NAME}].last()}=1Tablespace {#TABLESPACE_NAME} space usage is high => {ITEM.VALUE1}WARNINGTablespace {#TABLESPACE_NAME} space usage is very high => {ITEM.VALUE1}{Oracle DB:db.oracle.tablespace.pct_used[{#TABLESPACE_NAME}].last()} >= 90 * {$TB_USAGE_THRESHOLD}
and
{Oracle DB:db.oracle.tablespace.contents[{#TABLESPACE_NAME}].last()}=1{Oracle DB:db.oracle.tablespace.pct_used[{#TABLESPACE_NAME}].last()} >= 90 * {$TB_USAGE_THRESHOLD}
and
{Oracle DB:db.oracle.tablespace.contents[{#TABLESPACE_NAME}].last()}=1Tablespace {#TABLESPACE_NAME} space usage is very high => {ITEM.VALUE1}AVERAGETablespace {#TABLESPACE_NAME} almost full => {ITEM.VALUE1}{Oracle DB:db.oracle.tablespace.pct_used[{#TABLESPACE_NAME}].last()} >= 95 * {$TB_USAGE_THRESHOLD}
and
{Oracle DB:db.oracle.tablespace.contents[{#TABLESPACE_NAME}].last()}=1Top lasting SQLs discoveryODBCdb.odbc.discovery[Top lasting SQLs discovery,{$DSN}]5mselect * from (
select SQL_ID, CHILD_ADDRESS
from v$sql
where last_active_time > systimestamp - 1/24
order by elapsed_time desc)
where rownum < 11;{$DB_USERNAME}{$DB_PASSWORD}12hTop SQL {#SQL_ID}:{#CHILD_ADDRESS} bind variablesODBCdb.odbc.select[Top SQL {#SQL_ID}:{#CHILD_ADDRESS} bind variables,{$DSN}]5m7d0TEXTwith temp as (
select
NAME,
DATATYPE_STRING,
POSITION,
case datatype
when 180
then to_char(anydata.accesstimestamp(value_anydata), 'DD-MM-YYYY HH24:MI:SS.FF9')
when 181
then to_char(anydata.accesstimestamptz(value_anydata), 'DD-MM-YYYY HH24:MI:SS.FF9 TZR')
when 183
then to_char(anydata.accessintervalYM(value_anydata) || ' ' || anydata.accessintervalDS(value_anydata))
when 12
then to_char(anydata.accessdate(value_anydata), 'DD-MM-YYYY HH24:MI:SS')
else nvl(value_string, 'Null')
end data_value
FROM V$SQL_BIND_CAPTURE
where sql_id = '{#SQL_ID}'
and child_address = q'[{#CHILD_ADDRESS}]'
)
SELECT listagg(NAME || ' := (' || DATATYPE_STRING || ') ' || data_value, chr(10))
within group (
order by position asc)
from temp
START WITH POSITION = 1
CONNECT BY POSITION = PRIOR POSITION + 1;{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}:{#CHILD_ADDRESS}DISCARD_UNCHANGED_HEARTBEAT86400Top SQL {#SQL_ID}:{#CHILD_ADDRESS} CPU timeODBCdb.odbc.select[Top SQL {#SQL_ID}:{#CHILD_ADDRESS} CPU time,{$DSN}]2m7dSselect CPU_TIME
from v$sql
where sql_id='{#SQL_ID}'
and child_address=q'[{#CHILD_ADDRESS}]';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}:{#CHILD_ADDRESS}MULTIPLIER0.000001Top SQL {#SQL_ID}:{#CHILD_ADDRESS} parsing schemaODBCdb.odbc.select[Top SQL {#SQL_ID}:{#CHILD_ADDRESS} parsing schema,{$DSN}]5m7d0TEXTselect parsing_schema_name
from v$sql
where sql_id='{#SQL_ID}'
and child_address=q'[{#CHILD_ADDRESS}]';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}:{#CHILD_ADDRESS}DISCARD_UNCHANGED_HEARTBEAT86400Top SQL {#SQL_ID}:{#CHILD_ADDRESS} physical read bytesODBCdb.odbc.select[Top SQL {#SQL_ID}:{#CHILD_ADDRESS} physical read bytes,{$DSN}]5m7dBselect PHYSICAL_READ_BYTES
from v$sql
where sql_id='{#SQL_ID}'
and child_address=q'[{#CHILD_ADDRESS}]';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}:{#CHILD_ADDRESS}Top SQL {#SQL_ID}:{#CHILD_ADDRESS} physical write bytesODBCdb.odbc.select[Top SQL {#SQL_ID}:{#CHILD_ADDRESS} physical write bytes,{$DSN}]5m7dBselect PHYSICAL_WRITE_BYTES
from v$sql
where sql_id='{#SQL_ID}'
and child_address=q'[{#CHILD_ADDRESS}]';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}:{#CHILD_ADDRESS}Top SQL {#SQL_ID}:{#CHILD_ADDRESS} planODBCdb.odbc.select[Top SQL {#SQL_ID}:{#CHILD_ADDRESS} plan,{$DSN}]5m7d0TEXTwith temp as (
select *
FROM V$SQL_PLAN
where sql_id = '{#SQL_ID}'
and child_address = q'[{#CHILD_ADDRESS}]'
)
SELECT listagg(
ID || '|' ||
lpad(' ', level - 1) || operation || ' ' || options || ' ' ||
case
when object_name is not null
then chr(9) || object_owner || '.' || object_name || '(' || object_type || ')|'
else ''
end ||
case
when partition_start is not null
then chr(9) || 'PARTITION START: ' || partition_start || '|'
else ''
end ||
case
when partition_stop is not null
then chr(9) || 'PARTITION STOP: ' || partition_stop || '|'
else ''
end ||
case
when optimizer is not null
then chr(9) || optimizer || '|'
else ''
end ||
case
when cardinality is not null
then chr(9) || cardinality || ' DISTINCT ROWS|'
else ''
end ||
case
when bytes is not null
then chr(9) || bytes || ' BYTES|'
else ''
end ||
case
when cpu_cost is not null
then chr(9) || 'CPU COST: ' || CPU_COST || '|'
else ''
end ||
case
when temp_space is not null
then chr(9) || 'TEMP SPACE: ' || TEMP_SPACE || '|'
else ''
end ||
case
when ACCESS_PREDICATES is not null
then chr(9) || 'ACCESS PREDICATES: ' || ACCESS_PREDICATES || '|'
else ''
end ||
case
when FILTER_PREDICATES is not null
then chr(9) || 'FILTER PREDICATES: ' || FILTER_PREDICATES || ' |'
else ''
end, chr(10))
within group (
order by id desc)
from temp
START WITH id = 0
CONNECT BY prior id = parent_id;{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}:{#CHILD_ADDRESS}DISCARD_UNCHANGED_HEARTBEAT86400Top SQL {#SQL_ID}:{#CHILD_ADDRESS} textODBCdb.odbc.select[Top SQL {#SQL_ID}:{#CHILD_ADDRESS} text,{$DSN}]5m7d0TEXTselect dbms_lob.substr(sql_fulltext,5000,1)
from v$sql
where sql_id='{#SQL_ID}'
and child_address=q'[{#CHILD_ADDRESS}]';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}:{#CHILD_ADDRESS}DISCARD_UNCHANGED_HEARTBEAT86400Top SQL {#SQL_ID} total CPU timeODBCdb.odbc.select[Top SQL {#SQL_ID} total CPU time,{$DSN}]30m7dSselect CPU_TIME
from v$sqlarea
where sql_id='{#SQL_ID}';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}MULTIPLIER0.000001Top SQL {#SQL_ID} total physical read bytesODBCdb.odbc.select[Top SQL {#SQL_ID} total physical read bytes,{$DSN}]30m7dBselect PHYSICAL_READ_BYTES
from v$sqlarea
where sql_id='{#SQL_ID}';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}Top SQL {#SQL_ID} total physical write bytesODBCdb.odbc.select[Top SQL {#SQL_ID} total physical write bytes,{$DSN}]30m7dBselect PHYSICAL_WRITE_BYTES
from v$sqlarea
where sql_id='{#SQL_ID}';{$DB_USERNAME}{$DB_PASSWORD}SQL {#SQL_ID}Waiting session discoveryODBCdb.odbc.discovery[waiting session discovery,{$DSN}]5mselect distinct sid
from v$session
where username is not null
and wait_time = 0
and wait_class# != 6;{$DB_USERNAME}{$DB_PASSWORD}0Session {#SID} total wait time in secondsODBCdb.odbc.select[session {#SID} wait time,{$DSN}]5m7dselect case
when wait_time = 0 and WAIT_CLASS# != 6 then seconds_in_wait
else 0 end
from v$session
where sid={#SID};{$DB_USERNAME}{$DB_PASSWORD}DatabaseSessionsSession {#SID}{last()}>300Long waiting session: {#SID} => {ITEM.LASTVALUE} secondsWARNINGApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{$BACKUP_DSN}{$DSN}{$ASM_USAGE_THRESHOLD}1.0{$BACKUP_DSN}{$DSN}{$BLOCK_THRESHOLD}20{$DB_PASSWORD}zabbix{$DB_USERNAME}zabbix{$DSN}{$FRA_USAGE_THRESHOLD}1.0{$MIN_READ_BPS}10485760{$MIN_WRITE_BPS}1048576{$ORACLE_BACKUP_HOUR}0{$TB_USAGE_THRESHOLD}1.0{Oracle DB:db.odbc.select[db session count,{$DSN}].last()}>={Oracle DB:db.odbc.select[max number of sessions,{$DSN}].last()} * 0.95Database extreme session count => {ITEM.VALUE1}DISASTERYESApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{Oracle DB:db.odbc.select[db session count,{$DSN}].last()}>={Oracle DB:db.odbc.select[max number of sessions,{$DSN}].last()} * 0.6Database high session countWARNINGYESDatabase very high session count => {ITEM.VALUE1}{Oracle DB:db.odbc.select[db session count,{$DSN}].last()}>={Oracle DB:db.odbc.select[max number of sessions,{$DSN}].last()} * 0.8ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnical{Oracle DB:db.odbc.select[db session count,{$DSN}].last()}>={Oracle DB:db.odbc.select[max number of sessions,{$DSN}].last()} * 0.8Database very high session count => {ITEM.VALUE1}HIGHYESDatabase extreme session count => {ITEM.VALUE1}{Oracle DB:db.odbc.select[db session count,{$DSN}].last()}>={Oracle DB:db.odbc.select[max number of sessions,{$DSN}].last()} * 0.95ApplicationOracleFieldDatabaseScopeInfrastructureTypeTechnicalOracle ASM disk mount status-1CLOSING-2CLOSED-3MISSING0IGNORED1OPENED2CACHEDOracle ASM disk state-1HUNG-2FORCING0UNKNOWN1NORMAL2ADDING3DROPPINGOracle backup status-1FAILED0UNKNOWN1COMPLETED2WITH WARNINGS4WITH ERRORSOracle tablespace contentsPERMANENT1TEMPORARY2UNDO3TruthValue1true2false