109 lines
3.3 KiB
SQL
109 lines
3.3 KiB
SQL
-- +----------------------------------------------------------------------------+
|
|
-- | 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
|
|
/
|
|
|