2026-03-12 20:23:15
This commit is contained in:
108
idev/dba_free_space_frag.sql
Normal file
108
idev/dba_free_space_frag.sql
Normal file
@@ -0,0 +1,108 @@
|
||||
-- +----------------------------------------------------------------------------+
|
||||
-- | Jeffrey M. Hunter |
|
||||
-- | jhunter@idevelopment.info |
|
||||
-- | www.idevelopment.info |
|
||||
-- |----------------------------------------------------------------------------|
|
||||
-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. |
|
||||
-- |----------------------------------------------------------------------------|
|
||||
-- | DATABASE : Oracle |
|
||||
-- | FILE : dba_free_space_frag.sql |
|
||||
-- | CLASS : Database Administration |
|
||||
-- | PURPOSE : Report free space fragmentation. |
|
||||
-- | !!! THIS SCRIPT MUST BE RUN AS THE SYS USER !!! |
|
||||
-- | NOTE : As with any code, ensure to test this script in a development |
|
||||
-- | environment before attempting to run it in production. |
|
||||
-- +----------------------------------------------------------------------------+
|
||||
|
||||
CONNECT / AS SYSDBA
|
||||
|
||||
SET TERMOUT OFF;
|
||||
COLUMN current_instance NEW_VALUE current_instance NOPRINT;
|
||||
SELECT rpad(instance_name, 17) current_instance FROM v$instance;
|
||||
SET TERMOUT ON;
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | Report : Free Space Fragmentation Report |
|
||||
PROMPT | Instance : ¤t_instance |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
CREATE OR REPLACE VIEW free_space (
|
||||
tablespace
|
||||
, pieces
|
||||
, free_bytes
|
||||
, free_blocks
|
||||
, largest_bytes
|
||||
, largest_blks
|
||||
, fsfi
|
||||
, data_file
|
||||
, file_id
|
||||
, total_blocks
|
||||
)
|
||||
AS
|
||||
SELECT
|
||||
a.tablespace_name
|
||||
, COUNT(*)
|
||||
, SUM(a.bytes)
|
||||
, SUM(a.blocks)
|
||||
, MAX(a.bytes)
|
||||
, MAX(a.blocks)
|
||||
, SQRT(MAX(a.blocks)/SUM(a.blocks))*(100/SQRT(SQRT(count(a.blocks))))
|
||||
, UPPER(b.file_name)
|
||||
, MAX(a.file_id)
|
||||
, MAX(b.blocks)
|
||||
FROM
|
||||
sys.dba_free_space a
|
||||
, sys.dba_data_files b
|
||||
WHERE
|
||||
a.file_id = b.file_id
|
||||
GROUP BY
|
||||
a.tablespace_name, b.file_name
|
||||
/
|
||||
|
||||
CLEAR COLUMNS
|
||||
|
||||
SET ECHO OFF
|
||||
SET FEEDBACK OFF
|
||||
SET HEADING ON
|
||||
SET LINESIZE 180
|
||||
SET PAGESIZE 50000
|
||||
SET TERMOUT ON
|
||||
SET TIMING OFF
|
||||
SET TRIMOUT ON
|
||||
SET TRIMSPOOL ON
|
||||
SET VERIFY OFF
|
||||
|
||||
BREAK ON tablespace SKIP 2 ON REPORT
|
||||
|
||||
COMPUTE SUM OF total_blocks ON tablespace
|
||||
COMPUTE SUM OF free_blocks ON tablespace
|
||||
COMPUTE SUM OF free_blocks ON report
|
||||
COMPUTE SUM OF total_blocks ON report
|
||||
|
||||
COLUMN tablespace HEADING "Tablespace" FORMAT a30
|
||||
COLUMN file_id HEADING File# FORMAT 99999
|
||||
COLUMN pieces HEADING Frag FORMAT 9999
|
||||
COLUMN free_bytes HEADING 'Free Byte'
|
||||
COLUMN free_blocks HEADING 'Free Blk' FORMAT 999,999,999
|
||||
COLUMN largest_bytes HEADING 'Biggest Bytes'
|
||||
COLUMN largest_blks HEADING 'Biggest Blks' FORMAT 999,999,999
|
||||
COLUMN data_file HEADING 'File Name' FORMAT a75
|
||||
COLUMN total_blocks HEADING 'Total Blocks' FORMAT 999,999,999
|
||||
|
||||
SELECT
|
||||
tablespace
|
||||
, data_file
|
||||
, pieces
|
||||
, free_blocks
|
||||
, largest_blks
|
||||
, file_id
|
||||
, total_blocks
|
||||
FROM
|
||||
free_space
|
||||
/
|
||||
|
||||
|
||||
DROP VIEW free_space
|
||||
/
|
||||
|
||||
Reference in New Issue
Block a user