-- ############################################################################################# -- -- %Purpose: Show block chaining (chained rows) with ANALYZE TABLE LIST CHAINED ROWS -- -- Use: Needs Oracle DBA Access -- -- ############################################################################################# -- set echo off termout off DROP TABLE lst_chained_rows$tmp; set termout on CREATE TABLE lst_chained_rows$tmp ( owner_name VARCHAR2(30), table_name VARCHAR2(30), cluster_name VARCHAR2(30), head_rowid ROWID, timestamp DATE ); -- accept user_namen char prompt 'Username or %: ' accept tabellen_namen char prompt 'Tablename or %: ' set feed off echo off termout off pages 0 verify off array 1 -- SPOOL list_chained_rows.sql SELECT 'ANALYZE TABLE '||OWNER||'.'||TABLE_NAME, 'LIST CHAINED ROWS INTO lst_chained_rows$tmp;' FROM sys.dba_tables WHERE owner LIKE UPPER('&user_namen') AND table_name LIKE UPPER('&tabellen_namen') ORDER BY owner, table_name; -- spool off set feed on echo on termout on pages 66 verify on @list_chained_rows.sql -- set echo off column table_name format a30 column owner_name format a16 trunc -- spool list_chained_rows.lst -- SELECT RPAD(owner_name,16,'.') owner_name, RPAD(c.table_name,30,'.') table_name, num_rows, COUNT(*) ch_rows, pct_free FROM sys.dba_tables t, lst_chained_rows$tmp c WHERE t.owner = c.owner_name AND t.table_name = c.table_name GROUP BY owner_name, c.table_name, pct_free, num_rows UNION SELECT 'No block chaining',NULL,0,0,0 FROM dual WHERE 0 = ( SELECT COUNT(*) FROM lst_chained_rows$tmp WHERE rownum = 1 ) ORDER BY 1,2; spool off set feed on echo off termout on pages 24 verify on ttitle off DROP TABLE lst_chained_rows$tmp;