2026-03-12 20:23:15
This commit is contained in:
317
csierra/cs_tablespaces.sql
Normal file
317
csierra/cs_tablespaces.sql
Normal file
@@ -0,0 +1,317 @@
|
||||
----------------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: cs_tablespaces.sql
|
||||
--
|
||||
-- Purpose: Tablespace Utilization (text report)
|
||||
--
|
||||
-- Author: Carlos Sierra
|
||||
--
|
||||
-- Version: 2020/12/09
|
||||
--
|
||||
-- Usage: Execute connected to CDB or PDB.
|
||||
--
|
||||
-- Specify if internal tablespaces would be included in report
|
||||
--
|
||||
-- Example: $ sqlplus / as sysdba
|
||||
-- SQL> @cs_tablespaces.sql
|
||||
--
|
||||
-- Notes: Developed and tested on 12.1.0.2.
|
||||
--
|
||||
---------------------------------------------------------------------------------------
|
||||
--
|
||||
DEF permanent = 'Y';
|
||||
DEF undo = 'Y';
|
||||
DEF temporary = 'Y';
|
||||
-- order_by: [{pdb_name, tablespace_name}|max_size_gb DESC|allocated_gb DESC|used_gb DESC|free_gb DESC]
|
||||
DEF order_by = 'pdb_name, tablespace_name';
|
||||
DEF rows = '999';
|
||||
--
|
||||
@@cs_internal/cs_primary.sql
|
||||
@@cs_internal/cs_cdb_warn.sql
|
||||
@@cs_internal/cs_set.sql
|
||||
@@cs_internal/cs_def.sql
|
||||
@@cs_internal/cs_file_prefix.sql
|
||||
--
|
||||
DEF cs_script_name = 'cs_tablespaces';
|
||||
--
|
||||
PRO 1. Include internal (i.e. SYSTEM, SYSAUX, TEMPORARY, UNDO, ETC.): [{N}|Y]
|
||||
DEF include_internal = '&1.';
|
||||
UNDEF 1;
|
||||
COL include_internal NEW_V include_internal NOPRI;
|
||||
SELECT NVL(UPPER(SUBSTR(TRIM('&&include_internal.'),1)),'N') include_internal FROM DUAL;
|
||||
--
|
||||
SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL;
|
||||
--
|
||||
@@cs_internal/cs_spool_head.sql
|
||||
PRO SQL> @&&cs_script_name..sql "&&include_internal."
|
||||
@@cs_internal/cs_spool_id.sql
|
||||
--
|
||||
PRO INTERNAL TBS : &&include_internal.
|
||||
--
|
||||
CLEAR BREAK COMPUTE;
|
||||
BREAK ON REPORT;
|
||||
COMPUTE SUM LABEL 'TOTAL' OF allocated_gb used_gb free_gb max_size_gb ON REPORT;
|
||||
--
|
||||
COL pdb_name FOR A30;
|
||||
COL tablespace_name FOR A30;
|
||||
COL allocated_gb FOR 999,990.000 HEA 'ALLOCATED|SPACE (GB)';
|
||||
COL used_gb FOR 999,990.000 HEA 'USED|SPACE (GB)';
|
||||
COL used_percent FOR 990.0 HEA 'USED|PERC';
|
||||
COL free_gb FOR 999,990.000 HEA 'FREE|SPACE (GB)';
|
||||
COL free_percent FOR 990.0 HEA 'FREE|PERC';
|
||||
COL max_size_gb FOR 999,990.000 HEA 'MAX|SIZE (GB)';
|
||||
COL met_used_space_GB FOR 999,990.000 HEA 'METRICS|USED|SPACE (GB)';
|
||||
COL met_used_percent FOR 990.0 HEA 'METRICS|USED|PERC';
|
||||
--
|
||||
PRO
|
||||
PRO CDB
|
||||
PRO ~~~
|
||||
WITH
|
||||
t AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
con_id,
|
||||
tablespace_name,
|
||||
SUM(NVL(bytes, 0)) bytes
|
||||
FROM cdb_data_files
|
||||
GROUP BY
|
||||
con_id,
|
||||
tablespace_name
|
||||
UNION ALL
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
con_id,
|
||||
tablespace_name,
|
||||
SUM(NVL(bytes, 0)) bytes
|
||||
FROM cdb_temp_files
|
||||
GROUP BY
|
||||
con_id,
|
||||
tablespace_name
|
||||
),
|
||||
u AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
con_id,
|
||||
tablespace_name,
|
||||
SUM(bytes) bytes
|
||||
FROM cdb_free_space
|
||||
GROUP BY
|
||||
con_id,
|
||||
tablespace_name
|
||||
UNION ALL
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
con_id,
|
||||
tablespace_name,
|
||||
NVL(SUM(bytes_used), 0) bytes
|
||||
FROM gv$temp_extent_pool
|
||||
GROUP BY
|
||||
con_id,
|
||||
tablespace_name
|
||||
),
|
||||
un AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
ts.con_id,
|
||||
ts.tablespace_name,
|
||||
NVL(um.used_space * ts.block_size, 0) bytes
|
||||
FROM cdb_tablespaces ts,
|
||||
cdb_tablespace_usage_metrics um
|
||||
WHERE ts.contents = 'UNDO'
|
||||
AND um.tablespace_name(+) = ts.tablespace_name
|
||||
AND um.con_id(+) = ts.con_id
|
||||
),
|
||||
oem AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
ts.con_id,
|
||||
pdb.name pdb_name,
|
||||
ts.tablespace_name,
|
||||
ts.contents,
|
||||
ts.bigfile,
|
||||
ts.block_size,
|
||||
NVL(t.bytes, 0) allocated_space_bytes,
|
||||
NVL(
|
||||
CASE ts.contents
|
||||
WHEN 'UNDO' THEN un.bytes
|
||||
WHEN 'PERMANENT' THEN t.bytes - NVL(u.bytes, 0)
|
||||
WHEN 'TEMPORARY' THEN
|
||||
CASE ts.extent_management
|
||||
WHEN 'LOCAL' THEN u.bytes
|
||||
WHEN 'DICTIONARY' THEN t.bytes - NVL(u.bytes, 0)
|
||||
END
|
||||
END
|
||||
, 0) used_space_bytes
|
||||
FROM cdb_tablespaces ts,
|
||||
v$containers pdb,
|
||||
t,
|
||||
u,
|
||||
un
|
||||
WHERE 1 = 1
|
||||
AND CASE
|
||||
WHEN '&&include_internal.' = 'Y' THEN 1
|
||||
WHEN '&&include_internal.' = 'N' AND ts.contents = 'PERMANENT' AND ts.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') THEN 1
|
||||
ELSE 0
|
||||
END = 1
|
||||
AND CASE
|
||||
WHEN ts.contents = 'PERMANENT' AND '&&permanent.' = 'Y' THEN 1
|
||||
WHEN ts.contents = 'UNDO' AND '&&undo.' = 'Y' THEN 1
|
||||
WHEN ts.contents = 'TEMPORARY' AND '&&temporary.' = 'Y' THEN 1
|
||||
ELSE 0
|
||||
END = 1
|
||||
AND pdb.con_id = ts.con_id
|
||||
AND t.tablespace_name(+) = ts.tablespace_name
|
||||
AND t.con_id(+) = ts.con_id
|
||||
AND u.tablespace_name(+) = ts.tablespace_name
|
||||
AND u.con_id(+) = ts.con_id
|
||||
AND un.tablespace_name(+) = ts.tablespace_name
|
||||
AND un.con_id(+) = ts.con_id
|
||||
),
|
||||
tablespaces AS (
|
||||
SELECT o.pdb_name,
|
||||
o.tablespace_name,
|
||||
o.contents,
|
||||
o.bigfile,
|
||||
ROUND(m.tablespace_size * o.block_size / POWER(10, 9), 3) AS max_size_gb,
|
||||
ROUND(o.allocated_space_bytes / POWER(10, 9), 3) AS allocated_gb,
|
||||
ROUND(o.used_space_bytes / POWER(10, 9), 3) AS used_gb,
|
||||
ROUND((o.allocated_space_bytes - o.used_space_bytes) / POWER(10, 9), 3) AS free_gb,
|
||||
ROUND(100 * o.used_space_bytes / o.allocated_space_bytes, 3) AS used_percent, -- as per allocated space
|
||||
ROUND(100 * (o.allocated_space_bytes - o.used_space_bytes) / o.allocated_space_bytes, 3) AS free_percent -- as per allocated space
|
||||
FROM oem o,
|
||||
cdb_tablespace_usage_metrics m
|
||||
WHERE m.tablespace_name(+) = o.tablespace_name
|
||||
AND m.con_id(+) = o.con_id
|
||||
)
|
||||
SELECT pdb_name,
|
||||
tablespace_name,
|
||||
contents,
|
||||
bigfile,
|
||||
'|' AS "|",
|
||||
max_size_gb,
|
||||
allocated_gb,
|
||||
used_gb,
|
||||
free_gb,
|
||||
used_percent,
|
||||
free_percent
|
||||
FROM tablespaces
|
||||
ORDER BY
|
||||
&&order_by.
|
||||
FETCH FIRST &&rows. ROWS ONLY
|
||||
/
|
||||
--
|
||||
DEF order_by = 'tablespace_name';
|
||||
PRO
|
||||
PRO DBA
|
||||
PRO ~~~
|
||||
WITH
|
||||
t AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
tablespace_name,
|
||||
SUM(NVL(bytes, 0)) bytes
|
||||
FROM dba_data_files
|
||||
GROUP BY
|
||||
tablespace_name
|
||||
UNION ALL
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
tablespace_name,
|
||||
SUM(NVL(bytes, 0)) bytes
|
||||
FROM dba_temp_files
|
||||
GROUP BY
|
||||
tablespace_name
|
||||
),
|
||||
u AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
tablespace_name,
|
||||
SUM(bytes) bytes
|
||||
FROM dba_free_space
|
||||
GROUP BY
|
||||
tablespace_name
|
||||
UNION ALL
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
tablespace_name,
|
||||
NVL(SUM(bytes_used), 0) bytes
|
||||
FROM gv$temp_extent_pool
|
||||
GROUP BY
|
||||
tablespace_name
|
||||
),
|
||||
un AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
ts.tablespace_name,
|
||||
NVL(um.used_space * ts.block_size, 0) bytes
|
||||
FROM dba_tablespaces ts,
|
||||
dba_tablespace_usage_metrics um
|
||||
WHERE ts.contents = 'UNDO'
|
||||
AND um.tablespace_name(+) = ts.tablespace_name
|
||||
),
|
||||
oem AS (
|
||||
SELECT /*+ MATERIALIZE NO_MERGE */
|
||||
ts.tablespace_name,
|
||||
ts.contents,
|
||||
ts.bigfile,
|
||||
ts.block_size,
|
||||
NVL(t.bytes, 0) allocated_space_bytes,
|
||||
NVL(
|
||||
CASE ts.contents
|
||||
WHEN 'UNDO' THEN un.bytes
|
||||
WHEN 'PERMANENT' THEN t.bytes - NVL(u.bytes, 0)
|
||||
WHEN 'TEMPORARY' THEN
|
||||
CASE ts.extent_management
|
||||
WHEN 'LOCAL' THEN u.bytes
|
||||
WHEN 'DICTIONARY' THEN t.bytes - NVL(u.bytes, 0)
|
||||
END
|
||||
END
|
||||
, 0) used_space_bytes
|
||||
FROM dba_tablespaces ts,
|
||||
t,
|
||||
u,
|
||||
un
|
||||
WHERE 1 = 1
|
||||
AND CASE
|
||||
WHEN '&&include_internal.' = 'Y' THEN 1
|
||||
WHEN '&&include_internal.' = 'N' AND ts.contents = 'PERMANENT' AND ts.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') THEN 1
|
||||
ELSE 0
|
||||
END = 1
|
||||
AND CASE
|
||||
WHEN ts.contents = 'PERMANENT' AND '&&permanent.' = 'Y' THEN 1
|
||||
WHEN ts.contents = 'UNDO' AND '&&undo.' = 'Y' THEN 1
|
||||
WHEN ts.contents = 'TEMPORARY' AND '&&temporary.' = 'Y' THEN 1
|
||||
ELSE 0
|
||||
END = 1
|
||||
AND t.tablespace_name(+) = ts.tablespace_name
|
||||
AND u.tablespace_name(+) = ts.tablespace_name
|
||||
AND un.tablespace_name(+) = ts.tablespace_name
|
||||
),
|
||||
tablespaces AS (
|
||||
SELECT o.tablespace_name,
|
||||
o.contents,
|
||||
o.bigfile,
|
||||
ROUND(m.tablespace_size * o.block_size / POWER(10, 9), 3) AS max_size_gb,
|
||||
ROUND(o.allocated_space_bytes / POWER(10, 9), 3) AS allocated_gb,
|
||||
ROUND(o.used_space_bytes / POWER(10, 9), 3) AS used_gb,
|
||||
ROUND((o.allocated_space_bytes - o.used_space_bytes) / POWER(10, 9), 3) AS free_gb,
|
||||
ROUND(100 * o.used_space_bytes / o.allocated_space_bytes, 3) AS used_percent, -- as per allocated space
|
||||
ROUND(100 * (o.allocated_space_bytes - o.used_space_bytes) / o.allocated_space_bytes, 3) AS free_percent -- as per allocated space
|
||||
FROM oem o,
|
||||
dba_tablespace_usage_metrics m
|
||||
WHERE m.tablespace_name(+) = o.tablespace_name
|
||||
)
|
||||
SELECT tablespace_name,
|
||||
contents,
|
||||
bigfile,
|
||||
'|' AS "|",
|
||||
max_size_gb,
|
||||
allocated_gb,
|
||||
used_gb,
|
||||
free_gb,
|
||||
used_percent,
|
||||
free_percent
|
||||
FROM tablespaces
|
||||
ORDER BY
|
||||
&&order_by.
|
||||
FETCH FIRST &&rows. ROWS ONLY
|
||||
/
|
||||
--
|
||||
CLEAR BREAK COMPUTE;
|
||||
--
|
||||
PRO
|
||||
PRO SQL> @&&cs_script_name..sql "&&include_internal."
|
||||
--
|
||||
@@cs_internal/cs_spool_tail.sql
|
||||
@@cs_internal/cs_undef.sql
|
||||
@@cs_internal/cs_reset.sql
|
||||
--
|
||||
Reference in New Issue
Block a user