テーブルスペース(表領域)の削除

テーブルスペースの削除をするには「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
タイトルとURLをコピーしました