Mandalika's scratchpad | [ Work blog @Oracle | My Music Compositions ] |
Old Posts: 09.04 10.04 11.04 12.04 01.05 02.05 03.05 04.05 05.05 06.05 07.05 08.05 09.05 10.05 11.05 12.05 01.06 02.06 03.06 04.06 05.06 06.06 07.06 08.06 09.06 10.06 11.06 12.06 01.07 02.07 03.07 04.07 05.07 06.07 08.07 09.07 10.07 11.07 12.07 01.08 02.08 03.08 04.08 05.08 06.08 07.08 08.08 09.08 10.08 11.08 12.08 01.09 02.09 03.09 04.09 05.09 06.09 07.09 08.09 09.09 10.09 11.09 12.09 01.10 02.10 03.10 04.10 05.10 06.10 07.10 08.10 09.10 10.10 11.10 12.10 01.11 02.11 03.11 04.11 05.11 07.11 08.11 09.11 10.11 11.11 12.11 01.12 02.12 03.12 04.12 05.12 06.12 07.12 08.12 09.12 10.12 11.12 12.12 01.13 02.13 03.13 04.13 05.13 06.13 07.13 08.13 09.13 10.13 11.13 12.13 01.14 02.14 03.14 04.14 05.14 06.14 07.14 09.14 10.14 11.14 12.14 01.15 02.15 03.15 04.15 06.15 09.15 12.15 01.16 03.16 04.16 05.16 06.16 07.16 08.16 09.16 12.16 01.17 02.17 03.17 04.17 06.17 07.17 08.17 09.17 10.17 12.17 01.18 02.18 03.18 04.18 05.18 06.18 07.18 08.18 09.18 11.18 12.18 01.19 02.19 05.19 06.19 08.19 10.19 11.19 05.20 10.20 11.20 12.20 09.21 11.21 12.22
It is not uncommon for Oracle DBAs to create, drop tablespaces for various reasons throughout the life of a database management system. It is a good practice to double check whether a tablespace is really empty before dropping it. One way is to visually check the "Tablespaces" section in Oracle Enterprise Manager (OEM) database console. However sometimes the graphical interface may return false positives. Another way is to rely on data dictionary views to obtain relevant information as accurately as possible. In the latter case, DBA_SEGMENTS / USER_SEGMENTS views are useful in mapping segments such as table, index, table/index partition etc., to a tablespace.
eg.,The following example queries USER_SEGMENTS view to list the segments and their types stored in a tablespace called "TS_SALES_DATA32K".
SQL> COLUMN SEGMENT_NAME FORMAT A30 SQL> COLUMN SEGMENT_TYPE FORMAT A30 SQL> SQL> SELECT SEGMENT_NAME, SEGMENT_TYPE 2 FROM USER_SEGMENTS 3 WHERE TABLESPACE_NAME = 'TS_SALES_DATA32K'; SEGMENT_NAME SEGMENT_TYPE ------------------------------ ------------------------------ SALES_DATA TABLE
The tablespace "TS_SALES_DATA32K" is holding one table called "SALES_DATA". The following query returns no rows meaning tablespace "TS_SALES_DATA" is empty - hence it can be dropped with no hesitation.
SQL> SELECT SEGMENT_NAME, SEGMENT_TYPE 2 FROM USER_SEGMENTS 3 WHERE TABLESPACE_NAME = 'TS_SALES_DATA'; no rows selected
Here is another query that lists out all the tablespaces in a database along with the number of segments/objects stored in each of those tablespaces. Note that it is possible to extract similar information in different ways using more efficient queries.
SQL> COLUMN TABLESPACE FORMAT A40 SQL> SQL> SELECT UT.TABLESPACE_NAME "TABLESPACE", COUNT (US.SEGMENT_NAME) "NUM SEGMENTS" 2 FROM USER_TABLESPACES UT, USER_SEGMENTS US 3 WHERE UT.TABLESPACE_NAME = US.TABLESPACE_NAME 4 GROUP BY (UT.TABLESPACE_NAME) 5 ORDER BY COUNT (US.SEGMENT_NAME) DESC; TABLESPACE NUM SEGMENTS ---------------------------------------- ----------- TS_DP 114989 TS_DP_X 306 .. TS_SALES_DATA32K 1 TS_SALES_DATA 0 13 rows selected.
SEE ALSO:
Oracle Database Concepts : Data Blocks, Extents, and Segments
2004-2019 |