2026-03-12 20:23:15
This commit is contained in:
356
idev/dba_table_info.sql
Normal file
356
idev/dba_table_info.sql
Normal file
@@ -0,0 +1,356 @@
|
||||
-- +----------------------------------------------------------------------------+
|
||||
-- | Jeffrey M. Hunter |
|
||||
-- | jhunter@idevelopment.info |
|
||||
-- | www.idevelopment.info |
|
||||
-- |----------------------------------------------------------------------------|
|
||||
-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. |
|
||||
-- |----------------------------------------------------------------------------|
|
||||
-- | DATABASE : Oracle |
|
||||
-- | FILE : dba_table_info.sql |
|
||||
-- | CLASS : Database Administration |
|
||||
-- | PURPOSE : Prompt the user for a schema and and table name then query all |
|
||||
-- | metadata about the table. |
|
||||
-- | NOTE : As with any code, ensure to test this script in a development |
|
||||
-- | environment before attempting to run it in production. |
|
||||
-- +----------------------------------------------------------------------------+
|
||||
|
||||
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 : Table Information |
|
||||
PROMPT | Instance : ¤t_instance |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
PROMPT
|
||||
ACCEPT schema CHAR PROMPT 'Enter table owner : '
|
||||
ACCEPT table_name CHAR PROMPT 'Enter table name : '
|
||||
|
||||
SET ECHO OFF
|
||||
SET FEEDBACK 6
|
||||
SET HEADING ON
|
||||
SET LINESIZE 180
|
||||
SET LONG 9000
|
||||
SET PAGESIZE 50000
|
||||
SET TERMOUT ON
|
||||
SET TIMING OFF
|
||||
SET TRIMOUT ON
|
||||
SET TRIMSPOOL ON
|
||||
SET VERIFY OFF
|
||||
|
||||
CLEAR COLUMNS
|
||||
CLEAR BREAKS
|
||||
CLEAR COMPUTES
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | TABLE INFORMATION |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN owner FORMAT a20 HEADING "Owner"
|
||||
COLUMN table_name FORMAT a30 HEADING "Table Name"
|
||||
COLUMN tablespace_name FORMAT a30 HEADING "Tablespace"
|
||||
COLUMN last_analyzed FORMAT a23 HEADING "Last Analyzed"
|
||||
COLUMN num_rows FORMAT 9,999,999,999,999 HEADING "# of Rows"
|
||||
|
||||
SELECT
|
||||
owner
|
||||
, table_name
|
||||
, tablespace_name
|
||||
, TO_CHAR(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed
|
||||
, num_rows
|
||||
FROM
|
||||
dba_tables
|
||||
WHERE
|
||||
owner = UPPER('&schema')
|
||||
AND table_name = UPPER('&table_name')
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | OBJECT INFORMATION |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN object_id HEADING "Object ID"
|
||||
COLUMN data_object_id HEADING "Data Object ID"
|
||||
COLUMN created FORMAT A23 HEADING "Created"
|
||||
COLUMN last_ddl_time FORMAT A23 HEADING "Last DDL"
|
||||
COLUMN status HEADING "Status"
|
||||
|
||||
SELECT
|
||||
object_id
|
||||
, data_object_id
|
||||
, TO_CHAR(created, 'DD-MON-YYYY HH24:MI:SS') created
|
||||
, TO_CHAR(last_ddl_time, 'DD-MON-YYYY HH24:MI:SS') last_ddl_time
|
||||
, status
|
||||
FROM
|
||||
dba_objects
|
||||
WHERE
|
||||
owner = UPPER('&schema')
|
||||
AND object_name = UPPER('&table_name')
|
||||
AND object_type = 'TABLE'
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | SEGMENT INFORMATION |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN segment_name FORMAT a30 HEADING "Segment Name"
|
||||
COLUMN partition_name FORMAT a30 HEADING "Partition Name"
|
||||
COLUMN segment_type FORMAT a16 HEADING "Segment Type"
|
||||
COLUMN tablespace_name FORMAT a30 HEADING "Tablespace"
|
||||
COLUMN num_rows FORMAT 9,999,999,999,999 HEADING "Num Rows"
|
||||
COLUMN bytes FORMAT 9,999,999,999,999 HEADING "Bytes"
|
||||
COLUMN last_analyzed FORMAT a23 HEADING "Last Analyzed"
|
||||
|
||||
SELECT
|
||||
seg.segment_name segment_name
|
||||
, null partition_name
|
||||
, seg.segment_type segment_type
|
||||
, seg.tablespace_name tablespace_name
|
||||
, tab.num_rows num_rows
|
||||
, seg.bytes bytes
|
||||
, TO_CHAR(tab.last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed
|
||||
from
|
||||
dba_segments seg
|
||||
, dba_tables tab
|
||||
WHERE
|
||||
seg.owner = UPPER('&schema')
|
||||
AND seg.segment_name = UPPER('&table_name')
|
||||
AND seg.segment_name = tab.table_name
|
||||
AND seg.owner = tab.owner
|
||||
AND seg.segment_type = 'TABLE'
|
||||
UNION ALL
|
||||
SELECT
|
||||
seg.segment_name segment_name
|
||||
, seg.partition_name partition_name
|
||||
, seg.segment_type segment_type
|
||||
, seg.tablespace_name tablespace_name
|
||||
, part.num_rows num_rows
|
||||
, seg.bytes bytes
|
||||
, TO_CHAR(part.last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed
|
||||
FROM
|
||||
dba_segments seg
|
||||
, dba_tab_partitions part
|
||||
WHERE
|
||||
part.table_owner = UPPER('&schema')
|
||||
AND part.table_name = UPPER('&table_name')
|
||||
AND part.partition_name = seg.partition_name
|
||||
AND seg.segment_type = 'TABLE PARTITION'
|
||||
ORDER BY
|
||||
segment_name
|
||||
, partition_name
|
||||
/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | COLUMNS |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN column_name FORMAT a30 HEADING "Column Name"
|
||||
COLUMN data_type FORMAT a25 HEADING "Data Type"
|
||||
COLUMN nullable FORMAT a13 HEADing "Null?"
|
||||
|
||||
SELECT
|
||||
column_name
|
||||
, DECODE(nullable, 'Y', ' ', 'NOT NULL') nullable
|
||||
, DECODE(data_type
|
||||
, 'RAW', data_type || '(' || data_length || ')'
|
||||
, 'CHAR', data_type || '(' || data_length || ')'
|
||||
, 'VARCHAR', data_type || '(' || data_length || ')'
|
||||
, 'VARCHAR2', data_type || '(' || data_length || ')'
|
||||
, 'NUMBER', NVL2( data_precision
|
||||
, DECODE( data_scale
|
||||
, 0
|
||||
, data_type || '(' || data_precision || ')'
|
||||
, data_type || '(' || data_precision || ',' || data_scale || ')'
|
||||
)
|
||||
, data_type)
|
||||
, data_type
|
||||
) data_type
|
||||
FROM
|
||||
dba_tab_columns
|
||||
WHERE
|
||||
owner = UPPER('&schema')
|
||||
AND table_name = UPPER('&table_name')
|
||||
ORDER BY
|
||||
column_id
|
||||
/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | INDEXES |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN index_name FORMAT a40 HEADING "Index Name"
|
||||
COLUMN column_name FORMAT a30 HEADING "Column Name"
|
||||
COLUMN column_length HEADING "Column Length"
|
||||
|
||||
BREAK ON index_name SKIP 1
|
||||
|
||||
SELECT
|
||||
index_owner || '.' || index_name index_name
|
||||
, column_name
|
||||
, column_length
|
||||
FROM
|
||||
dba_ind_columns
|
||||
WHERE
|
||||
table_owner = UPPER('&schema')
|
||||
AND table_name = UPPER('&table_name')
|
||||
ORDER BY
|
||||
index_name
|
||||
, column_position
|
||||
/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | CONSTRAINTS |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN constraint_name FORMAT a30 HEADING "Constraint Name"
|
||||
COLUMN constraint_type FORMAT a13 HEADING "Constraint|Type"
|
||||
COLUMN search_condition FORMAT a30 HEADING "Search Condition"
|
||||
COLUMN r_constraint_name FORMAT a30 HEADING "R / Constraint Name"
|
||||
COLUMN delete_rule FORMAT a12 HEADING "Delete Rule"
|
||||
COLUMN status HEADING "Status"
|
||||
|
||||
BREAK ON constraint_name ON constraint_type
|
||||
|
||||
SELECT
|
||||
a.constraint_name
|
||||
, DECODE(a.constraint_type
|
||||
, 'P', 'Primary Key'
|
||||
, 'C', 'Check'
|
||||
, 'R', 'Referential'
|
||||
, 'V', 'View Check'
|
||||
, 'U', 'Unique'
|
||||
, a.constraint_type
|
||||
) constraint_type
|
||||
, b.column_name
|
||||
, a.search_condition
|
||||
, NVL2(a.r_owner, a.r_owner || '.' || a.r_constraint_name, null) r_constraint_name
|
||||
, a.delete_rule
|
||||
, a.status
|
||||
FROM
|
||||
dba_constraints a
|
||||
, dba_cons_columns b
|
||||
WHERE
|
||||
a.owner = UPPER('&schema')
|
||||
AND a.table_name = UPPER('&table_name')
|
||||
AND a.constraint_name = b.constraint_name
|
||||
AND b.owner = UPPER('&schema')
|
||||
AND b.table_name = UPPER('&table_name')
|
||||
ORDER BY
|
||||
a.constraint_name
|
||||
, b.position
|
||||
/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | PARTITIONS (TABLE) |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN partition_name HEADING "Partition Name"
|
||||
COLUMN column_name FORMAT a30 HEADING "Column Name"
|
||||
COLUMN tablespace_name FORMAT a30 HEADING "Tablespace"
|
||||
COLUMN composite FORMAT a9 HEADING "Composite"
|
||||
COLUMN subpartition_count HEADING "Sub. Part.|Count"
|
||||
COLUMN logging FORMAT a7 HEADING "Logging"
|
||||
COLUMN high_value FORMAT a13 HEADING "High Value" TRUNC
|
||||
|
||||
BREAK ON partition_name
|
||||
|
||||
SELECT
|
||||
a.partition_name
|
||||
, b.column_name
|
||||
, a.tablespace_name
|
||||
, a.composite
|
||||
, a.subpartition_count
|
||||
, a.logging
|
||||
FROM
|
||||
dba_tab_partitions a
|
||||
, dba_part_key_columns b
|
||||
WHERE
|
||||
a.table_owner = UPPER('&schema')
|
||||
AND a.table_name = UPPER('&table_name')
|
||||
AND RTRIM(b.object_type) = 'TABLE'
|
||||
AND b.owner = a.table_owner
|
||||
AND b.name = a.table_name
|
||||
ORDER BY
|
||||
a.partition_position
|
||||
, b.column_position
|
||||
/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | PARTITIONS (INDEX) |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN index_name FORMAT a30 HEADING "Index Name"
|
||||
COLUMN partitioning_type FORMAT a9 HEADING "Type"
|
||||
COLUMN partition_count FORMAT 99999 HEADING "Part.|Count"
|
||||
COLUMN partitioning_key_count FORMAT 99999 HEADING "Part.|Key Count"
|
||||
COLUMN locality FORMAT a8 HEADING "Locality"
|
||||
COLUMN alignment FORMAT a12 HEADING "Alignment"
|
||||
|
||||
SELECT
|
||||
a.owner || '.' || a.index_name index_name
|
||||
, b.column_name
|
||||
, a.partitioning_type
|
||||
, a.partition_count
|
||||
, a.partitioning_key_count
|
||||
, a.locality
|
||||
, a.alignment
|
||||
FROM
|
||||
dba_part_indexes a
|
||||
, dba_part_key_columns b
|
||||
WHERE
|
||||
a.owner = UPPER('&schema')
|
||||
AND a.table_name = UPPER('&table_name')
|
||||
AND RTRIM(b.object_type) = 'INDEX'
|
||||
AND b.owner = a.owner
|
||||
AND b.name = a.index_name
|
||||
ORDER BY
|
||||
a.index_name
|
||||
, b.column_position
|
||||
/
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
PROMPT | TRIGGERS |
|
||||
PROMPT +------------------------------------------------------------------------+
|
||||
|
||||
COLUMN trigger_name FORMAT a30 HEADING "Trigger Name"
|
||||
COLUMN trigger_type FORMAT a18 HEADING "Type"
|
||||
COLUMN triggering_event FORMAT a9 HEADING "Trig.|Event"
|
||||
COLUMN referencing_names FORMAT a65 HEADING "Referencing Names" newline
|
||||
COLUMN when_clause FORMAT a65 HEADING "When Clause" newline
|
||||
COLUMN trigger_body FORMAT a65 HEADING "Trigger Body" newline
|
||||
|
||||
SELECT
|
||||
owner || '.' || trigger_name trigger_name
|
||||
, trigger_type
|
||||
, triggering_event
|
||||
, status
|
||||
, referencing_names
|
||||
, when_clause
|
||||
, trigger_body
|
||||
FROM
|
||||
dba_triggers
|
||||
WHERE
|
||||
table_owner = UPPER('&schema')
|
||||
AND table_name = UPPER('&table_name')
|
||||
ORDER BY
|
||||
trigger_name
|
||||
/
|
||||
Reference in New Issue
Block a user