テーブルスペースの削除をするには「DROP TABLESPACE」を使います。
Oracleへのログイン
テーブルスペース(表領域)を削除するには、OracleへSQL*Plusで接続して「SYS」ユーザーでログインします。
$ whoami
oracle
$ sqlplus sys/xxxxxxxx@PDB1 as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 19 09:38:50 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
テーブルスペース(表領域)の削除
テーブルスペースの削除時にデータファイルも合わせて削除する
テーブルスペースを削除するときには、通常であれば、この削除の仕方が良いかと思います。
SQL> show user
USER is "SYS"
SQL> COL TABLESPACE_NAME FOR A15
SQL> COL FILE_NAME FOR A24
SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='USR_DATA1';
TABLESPACE_NAME FILE_NAME
--------------- ------------------------
USR_DATA1 /u06/app/oracle/oradata/
CDB1/PDB1/usr_data11.dbf
SQL> DROP TABLESPACE "USR_DATA1" INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='USR_DATA1';
no rows selected ・・・ 削除されている
SQL> EXIT
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
$ ls /u06/app/oracle/oradata/CDB1/PDB1/usr_data11.dbf ・・・ データファイルの存在確認
ls: cannot access '/u06/app/oracle/oradata/CDB1/PDB1/usr_data11.dbf': No such file or directory
テーブルスペースのみを削除する
テーブルスペースのみを削除すると、データファイルは残ります。
SQL> show user
USER is "SYS"
SQL> COL TABLESPACE_NAME FOR A15
SQL> COL FILE_NAME FOR A24
SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='USR_DATA2';
TABLESPACE_NAME FILE_NAME
--------------- ------------------------
USR_DATA2 /u06/app/oracle/oradata/
CDB1/PDB1/usr_data21.dbf
SQL> DROP TABLESPACE "USR_DATA2" INCLUDING CONTENTS;
Tablespace dropped.
SQL> SELECT TABLESPACE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='USR_DATA2';
no rows selected
SQL> EXIT
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
$ ls /u06/app/oracle/oradata/CDB1/PDB1/usr_data21.dbf
/u06/app/oracle/oradata/CDB1/PDB1/usr_data21.dbf ・・・ データファイルは残っている
$ rm /u06/app/oracle/oradata/CDB1/PDB1/usr_data21.dbf ・・・ 必要なければ削除する
$ ls /u06/app/oracle/oradata/CDB1/PDB1/usr_data21.dbf
ls: cannot access '/u06/app/oracle/oradata/CDB1/PDB1/usr_data21.dbf': No such file or directory
テーブルスペースの削除時に制約があってもデータファイルと合わせて削除する
削除するテーブルスペース内にあるテーブルで、主キー制約(PRIMARY KEY制約)、一意キー制約(UNIQUE制約)を参照する参照整合性制約(REFERNECES制約)がある場合、データファイルも合わせて削除します。
SQL> show user
USER is "SYS"
SQL> COL TABLESPACE_NAME FOR A15
SQL> COL FILE_NAME FOR A50
SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='USR_DATA3';
TABLESPACE_NAME FILE_NAME
--------------- --------------------------------------------------
USR_DATA3 /u06/app/oracle/oradata/CDB1/PDB1/usr_data31.dbf
SQL> SET SQLCO ''
SQL> COL TABLENAME FOR A20
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES -
WHERE TABLE_NAME='EMP_MASTER';
TABLE_NAME TABLESPACE_NAME
-------------------- ---------------
DEPT_MASTER USR_DATA3
EMP_MASTER USR_DATA4
SQL> SELECT TABLE_NAME,CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS -
WHERE TABLE_NAME='EMP_MASTER' AND CONSTRAINT_TYPE='R';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE
--------------- ---------------------------------------- ---------------
EMP_MASTER DEPT_MASTER_EMP_MASTER_DEPT_ID_FK R ・・・ REFERNECES制約
SQL> DROP TABLESPACE "USR_DATA3" INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
Tablespace dropped.
SQL> SELECT TABLESPACE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='USR_DATA3';
no rows selected
SQL> EXIT
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0