2026-03-12 20:23:15
This commit is contained in:
185
vg/tbs.sql
Normal file
185
vg/tbs.sql
Normal file
@@ -0,0 +1,185 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Tablespace usage
|
||||
* Parameters : 1 - tablespace_name (Use % as wildcard, Default value '%')
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 14-Jul-15 Vishal Gupta Added tablespace creation_time (Approximated from earliest datafile time)
|
||||
* 11-Mar-13 Vishal Gupta Fixed temp space calculations
|
||||
* 02-Apr-12 Vishal Gupta Bug fixes
|
||||
* 05-Aug-04 Vishal Gupta First Draft
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE tablespace_name
|
||||
DEFINE tablespace_name="&&1"
|
||||
|
||||
set term off
|
||||
COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
|
||||
DEFINE ROUND_PRECISION=2
|
||||
DEFINE STAR=4 --Defines how much %usage is represented by one star on Graph
|
||||
|
||||
set term off
|
||||
SET FEED OFF
|
||||
SELECT (100/&&STAR+2) UsageGraphWidth
|
||||
FROM DUAL;
|
||||
SET FEED ON
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * T A B L E S P A C E U S A G E R E P O R T
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Tablespace Name = '&&TABLESPACE_NAME'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN UsageGraphWidth NOPRINT old_value UGWidth
|
||||
COLUMN tablespace_name FORMAT a23
|
||||
COLUMN creation_time HEADING "Creation Time" FORMAT a15
|
||||
COLUMN alloc HEADING "Alloc(&&BYTES_HEADING)" FORMAT 9,999,999 ON
|
||||
COLUMN used HEADING "Used&&BYTES_HEADING)" FORMAT 9,999,999 ON
|
||||
COLUMN free HEADING "Free|(&&BYTES_HEADING)" FORMAT 999,999 ON
|
||||
COLUMN pct_Used HEADING "%Used" FORMAT 999 ON
|
||||
COLUMN pct_Free HEADING "%Free" FORMAT 999 ON
|
||||
COLUMN MAXSIZE HEADING "MaxSize|(&&BYTES_HEADING)" FORMAT 9,999,999 ON
|
||||
COLUMN Maxfree HEADING "MaxFree|(&&BYTES_HEADING)" FORMAT 9,999,999 ON
|
||||
COLUMN Max_pct_Used HEADING "MAX|%Used" FORMAT 999 ON
|
||||
COLUMN Max_pct_Free HEADING "MAX|%Free" FORMAT 999 ON
|
||||
COLUMN "Usage Graph" FORMAT a27
|
||||
COLUMN "MaxUsage Graph" FORMAT a27
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF alloc FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF used FORMAT 99,999,999.9 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF free FORMAT 99,999,999.9 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF maxsize FORMAT 9,999,999.9 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF maxfree FORMAT 9,999,999.9 ON REPORT
|
||||
|
||||
SELECT /*+ CHOOSE */ c.tablespace_name
|
||||
, c.alloc
|
||||
, c.used
|
||||
, c.free
|
||||
, c.pct_used
|
||||
, c.pct_free
|
||||
, '|' || RPAD(NVL(LPAD(' ',CEIL(NVL(c.pct_used,0)/&&STAR),'*'),' '),CEIL(100/&&STAR)) || '|' "Usage Graph"
|
||||
, c.MAXSIZE
|
||||
, c.maxfree
|
||||
, c.max_pct_used
|
||||
, c.max_pct_free
|
||||
, '|' || RPAD(NVL(LPAD(' ',CEIL(NVL(c.max_pct_used,0)/&&STAR),'*'),' '),CEIL(100/&&STAR)) || '|' "MaxUsage Graph"
|
||||
, TO_CHAR(c.creation_time,'DD-MON-YY HH24:MI') creation_time
|
||||
FROM (
|
||||
SELECT /*+ CHOOSE */ a.tablespace_name
|
||||
, c.creation_time
|
||||
, ROUND(a.bytes_alloc / &&BYTES_DIVIDER, &&ROUND_PRECISION) alloc
|
||||
, ROUND((a.bytes_alloc - NVL(b.bytes_free, 0)) / &&BYTES_DIVIDER, &&ROUND_PRECISION ) used
|
||||
, ROUND(NVL(b.bytes_free, 0) / &&BYTES_DIVIDER, &&ROUND_PRECISION) free
|
||||
, 100 - ROUND((NVL(b.bytes_free, 0) / a.bytes_alloc) * 100, &&ROUND_PRECISION) pct_Used
|
||||
, ROUND((NVL(b.bytes_free, 0) / a.bytes_alloc) * 100, &&ROUND_PRECISION) pct_Free
|
||||
, ROUND(a.maxbytes/ &&BYTES_DIVIDER, &&ROUND_PRECISION) MAXSIZE
|
||||
, ROUND( (maxbytes - a.bytes_alloc + NVL(b.bytes_free, 0) ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) Maxfree
|
||||
, ROUND(((a.bytes_alloc - NVL(b.bytes_free, 0)) / a.maxbytes) * 100, &&ROUND_PRECISION) Max_pct_Used
|
||||
, ROUND( ((a.maxbytes - a.bytes_alloc + NVL(b.bytes_free, 0) ) / a.maxbytes) * 100, &&ROUND_PRECISION) Max_pct_Free
|
||||
FROM ( SELECT /*+ CHOOSE */
|
||||
f.tablespace_name
|
||||
, SUM(f.bytes) bytes_alloc
|
||||
, SUM(DECODE(f.autoextensible, 'YES',GREATEST(f.maxbytes,f.bytes),'NO', f.bytes)) maxbytes
|
||||
FROM DBA_DATA_FILES f
|
||||
WHERE f.tablespace_name LIKE '&&tablespace_name'
|
||||
GROUP BY tablespace_name
|
||||
) a
|
||||
, ( SELECT /*+ CHOOSE */
|
||||
f.tablespace_name
|
||||
, SUM(f.bytes) bytes_free
|
||||
FROM DBA_FREE_SPACE f
|
||||
WHERE f.tablespace_name LIKE '&&tablespace_name'
|
||||
GROUP BY tablespace_name
|
||||
) b
|
||||
, (SELECT t.name tablespace_name, min(creation_time) creation_time
|
||||
FROM v$tablespace t , v$datafile f
|
||||
WHERE t.ts# = f.ts#
|
||||
GROUP BY t.name) c
|
||||
WHERE a.tablespace_name = b.tablespace_name (+)
|
||||
AND a.tablespace_name = c.tablespace_name (+)
|
||||
UNION ALL
|
||||
SELECT /*+ CHOOSE */
|
||||
ts.tablespace_name
|
||||
, c.creation_time
|
||||
--, ROUND((ts.bytes_used + ts.bytes_free) / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc
|
||||
, ROUND( tf.bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc
|
||||
, ROUND((ts.bytes_used - ss.free_bytes) / &&BYTES_DIVIDER , &&ROUND_PRECISION) used
|
||||
, ROUND(((ts.bytes_free) + ss.free_bytes ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) free
|
||||
, ROUND(((ts.bytes_used - ss.free_bytes ) / (ts.bytes_used + ts.bytes_free))
|
||||
* 100, &&ROUND_PRECISION) pct_Used
|
||||
, 100 - ROUND(((ts.bytes_used - ss.free_bytes) / (ts.bytes_used + ts.bytes_free)) * 100, &&ROUND_PRECISION) pct_Free
|
||||
, ROUND( tf.max_bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) MaxSize
|
||||
, ROUND( ((ts.bytes_free) + ss.free_bytes + (tf.max_bytes - (ts.bytes_used + ts.bytes_free) )
|
||||
) / &&BYTES_DIVIDER , &&ROUND_PRECISION) Maxfree
|
||||
, ROUND( ( (ts.bytes_used - ss.free_bytes )/tf.max_bytes) * 100, &&ROUND_PRECISION) Max_pct_Used
|
||||
, 100 - ROUND( ((ts.bytes_used - ss.free_bytes ) /tf.max_bytes )* 100, &&ROUND_PRECISION ) Max_pct_Free
|
||||
FROM (SELECT tablespace_name
|
||||
, sum(bytes_used) bytes_used
|
||||
, sum(bytes_free) bytes_free
|
||||
FROM v$temp_space_header
|
||||
WHERE tablespace_name LIKE '&&tablespace_name'
|
||||
GROUP BY tablespace_name
|
||||
) ts
|
||||
, (SELECT tablespace_name
|
||||
, SUM(bytes) bytes
|
||||
, SUM(DECODE(autoextensible, 'YES',GREATEST(maxbytes,bytes),'NO', bytes)) max_bytes
|
||||
FROM dba_temp_files
|
||||
WHERE tablespace_name LIKE '&&tablespace_name'
|
||||
GROUP BY tablespace_name
|
||||
) tf
|
||||
, (SELECT ss.tablespace_name
|
||||
, sum(ss.free_blocks * t.block_size) free_bytes
|
||||
FROM gv$sort_segment ss
|
||||
, dba_tablespaces t
|
||||
WHERE ss.tablespace_name = t.tablespace_name
|
||||
AND ss.tablespace_name LIKE '&&tablespace_name'
|
||||
GROUP BY ss.tablespace_name
|
||||
) ss
|
||||
, dba_tablespaces t
|
||||
, (SELECT t.name tablespace_name, min(creation_time) creation_time
|
||||
FROM v$tablespace t , v$tempfile f
|
||||
WHERE t.ts# = f.ts#
|
||||
GROUP BY t.name) c
|
||||
WHERE t.tablespace_name = ts.tablespace_name
|
||||
AND t.tablespace_name = tf.tablespace_name
|
||||
AND t.tablespace_name = ss.tablespace_name (+)
|
||||
AND t.tablespace_name = c.tablespace_name (+)
|
||||
AND t.tablespace_name LIKE '&&tablespace_name'
|
||||
) c
|
||||
ORDER BY 1 asc;
|
||||
|
||||
UNDEFINE tablespace_name
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user