Listing Objects in an Oracle Tablespace

SQL lists all objects within a specific tablespace in an Oracle database


A detailed explanation of Oracle Database SQL code used to list objects within a tablespace, including purpose, breakdown, key points, and insights.

Sample SQL Command

 1set pages 999
 2col owner format a15
 3col segment_name format a40
 4col segment_type format a20
 5select owner
 6,      segment_name
 7,      segment_type
 8from   dba_segments
 9where  lower(tablespace_name) like lower('%&tablespace%')
10order by owner, segment_name
11/

Sample Oracle Output:

 1OWNER           SEGMENT_NAME                             SEGMENT_TYPE
 2--------------- ---------------------------------------- --------------------
 3LARRY            BIN$Q+k4qsgBLNngRAAQg5ZRWg==$0           INDEX
 4LARRY            BIN$Q+k4qsgCLNngRAAQg5ZRWg==$0           TABLE
 5LARRY            BIN$Q+k4qsgELNngRAAQg5ZRWg==$0           INDEX
 6LARRY            BIN$Q+k4qsgFLNngRAAQg5ZRWg==$0           TABLE
 7LARRY            BOX                                      TABLE
 8LARRY            BOX_PK                                   INDEX
 9LARRY            CD                                       TABLE
10LARRY            CD_PK                                    INDEX
11LARRY            LOCATION                                 TABLE
12LARRY            LOCATION_PK                              INDEX
13LARRY            LOTS_OF_ROWS                             TABLE
14LARRY            POO                                      TABLE
15LARRY            SERVERS                                  TABLE
16LARRY            SYS_C0023466                             INDEX
17LARRY            SYS_C0023467                             INDEX
18LARRY            SYS_C0027234                             INDEX
19LARRY            TEST_TABLE                               TABLE
20LARRY            TRACK                                    TABLE
21LARRY            TRACK_PK                                 INDEX
22
2319 rows selected.

Purpose:

  • To identify and display all database objects (like tables, indexes, partitions) residing in a chosen tablespace.

Breakdown:

  1. set pages 999: This setting increases the number of rows displayed per page to 999. This might be necessary if the tablespace holds a large number of objects.
  2. col owner format a15, col segment_name format a40**, col segment_type format a20**: These lines define column formatting in the output. They set specific widths for the "owner", "segment_name", and "segment_type" columns to improve readability.
  3. select owner, segment_name, segment_type: This clause selects three specific columns from the dba_segments system view:
    • owner: The schema (user) who owns the object.
    • segment_name: The actual name of the object.
    • segment_type: The type of object (TABLE, INDEX, PARTITION, etc.).
  4. from dba_segments: This specifies the data source for the query. dba_segments holds information about all database segments, including their type, owner, and tablespace association.
  5. where lower(tablespace_name) like lower('%&tablespace%'): This clause filters the results based on the tablespace name.
    • lower(tablespace_name): Converts the tablespace name to lowercase for case-insensitive comparison.
    • like lower('%&tablespace%'): Uses a wildcard comparison with % to accept any tablespace name passed as the &tablespace variable.
  6. order by owner, segment_name: This clause sorts the output first by owner and then by segment name within each owner.

Key Points:

  • This code relies on the dba_segments system view, which requires appropriate privileges to access (typically DBA or SYSDBA).
  • The like clause with wildcards allows for listing objects in any tablespace whose name matches the provided part.
  • The code filters for all object types (segment_type). If you only need specific types (e.g., tables), modify the where clause accordingly.
  • Consider additional filtering using other columns from dba_segments for more granular results.

Insights and Explanations:

  • Setting a large page size with set pages might not be needed in all cases and could impact performance for very large tablespaces. Adjust as needed.
  • Using wildcards in the where clause offers flexibility but introduces security risks if not controlled properly. Ensure the &tablespace variable is validated and sanitized before execution.
  • The code provides a basic listing of objects. Extending it to include additional information (e.g., object creation date, size) can be achieved by incorporating more columns from dba_segments.

This code snippet effectively fulfills its purpose of listing all objects within a specified tablespace, but remember to exercise caution and adapt it to your specific needs and security requirements.

Posts in this Series