天天看點

表空間及實體檔案 删除

背景:

同僚不小心建立了一個ts_xx_temp實體檔案,導緻其他同僚經常問我這個是否可以作為臨時表空間,為了不引起歧義,删除表空間及實體檔案

過程

在測試環境中

建立一個實體檔案且表空間名稱為TS_ZYK_T

create tablespace TS_ZYK_T

DATAFILE

'+DATADG/prod/datafile/TS_ZYK_T_1M' SIZE 1m;

select * from dba_data_files;

查詢到表空間名稱為TS_ZYK_T;

SQL> drop tablespace TS_ZYK_T including contents and datafiles;

Tablespace dropped

資料檔案中沒有了

登陸到伺服器上

ASMCMD> ls

DATADG/

SYSTEDG/

ASMCMD> cd DATADG 

PROD/

arch/

ASMCMD> cd PROD

ARCHIVELOG/

CONTROLFILE/

DATAFILE/

ONLINELOG/

PARAMETERFILE/

TEMPFILE/

spfilePROD.ora

ASMCMD> cd DATAFILE             

SYSAUX.260.914060367

SYSTEM.259.914060331

TS_ZYK_DATA.278.914434281

TS_ZYK_DATA_1G

UNDOTBS1.261.914060391

UNDOTBS2.263.914060423

USERS.264.914060433

發現确實沒有表空間TS_ZYK_T

具體步驟:

SQL> select * from dba_data_files;

asmcmd

問題:

oracle 11g 有個新特性:oracle 建立完segment,如果沒有資料的話,不使用表空間,如果将表空間删除,而該表後面有資料就會報錯,

表空間不存在?

答:

在測試中發現,表會被删除,不會報報空間不存在

以下是測試過程

create tablespace TS_ZYK_TEMP

'+DATADG/prod/datafile/TS_ZYK_TEP_1M' SIZE 1m;

CREATE TABLE GH_TEMP_TABLESPACE

(A VARCHAR2(100))

tablespace TS_ZYK_TEMP

    pctfree 10

    initrans 1

    maxtrans 255

    storage

    (

      initial 8M

      next 1M

      minextents 1

      maxextents unlimited

    );

SQL> SELECT * FROM USER_SEGMENTS T WHERE T.segment_name='GH_TEMP_TABLESPACE';

SEGMENT_NAME                                                                     PARTITION_NAME                 SEGMENT_TYPE       SEGMENT_SUBTYPE TABLESPACE_NAME                     BYTES     BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS   MAX_SIZE RETENTION MINRETENTION PCT_INCREASE  FREELISTS FREELIST_GROUPS BUFFER_POOL FLASH_CACHE CELL_FLASH_CACHE

-------------------------------------------------------------------------------- ------------------------------ ------------------ --------------- ------------------------------ ---------- ---------- ---------- -------------- ----------- ----------- ----------- ---------- --------- ------------ ------------ ---------- --------------- ----------- ----------- ----------------

SQL> 

在user_segment中并沒有出現占用空間情況

重新查詢表名發現該表名已經不存在了,那麼可以這樣認為删除表空間時,建立該表的動作也被消除了

上述問題中表空間不存在報錯的可能性就比較小,就是說表的結構也被消除了