先建立一個新的temp file到tablespace
alter tablespace temp add tempfile '/erptest/clonedata/temp03.dbf' size 1000m;
將指定的temp file離線
alter database tempfile '/erptest/clonedata/temp02.dbf' offline;
刪除temp file
alter database tempfile '/erptest/clonedata/temp02.dbf' drop including datafiles;
或
alter database tempfile '/erptest/clonedata/temp02.dbf';
如果出現下列錯誤,表示仍有人在使用指定的temp file
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time
找出temp file的id
select file_id from dba_temp_files where file_name ='/erptest/clonedata/temp02.dbf';
FILE_ID
----------
2
但是這個file_id=2並不是temp file真正的id,必須要再加上參數db_files的值才是真正的file id。
SQL> show parameter db_files
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
db_files integer 200
所以temp02.dbf真正的id是200+2=202
找出誰在使用
select c.spid,
b.tablespace,
b.segfile#,
b.segblk#,
round(((b.blocks * d.VALUE) / 1024 / 1024), 2) size_mb,
a.SID,
a.serial#,
a.username,
a.osuser,
a.program,
a.status
from v$session a, v$sort_usage b, v$process c, v$parameter d
where b.segfile# = &seg_temp_file_id
and d.name = 'db_block_size'
and a.saddr = b.session_addr
and a.paddr = c.addr
order by b.tablespace, b.segfile#, b.segblk#, b.blocks;
會提示輸入seg_temp_file_id的值,輸入202就可以找出session,再將這些session刪除就可以drop temp file了。
alter tablespace temp add tempfile '/erptest/clonedata/temp03.dbf' size 1000m;
將指定的temp file離線
alter database tempfile '/erptest/clonedata/temp02.dbf' offline;
刪除temp file
alter database tempfile '/erptest/clonedata/temp02.dbf' drop including datafiles;
或
alter database tempfile '/erptest/clonedata/temp02.dbf';
如果出現下列錯誤,表示仍有人在使用指定的temp file
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time
找出temp file的id
select file_id from dba_temp_files where file_name ='/erptest/clonedata/temp02.dbf';
FILE_ID
----------
2
但是這個file_id=2並不是temp file真正的id,必須要再加上參數db_files的值才是真正的file id。
SQL> show parameter db_files
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
db_files integer 200
所以temp02.dbf真正的id是200+2=202
找出誰在使用
select c.spid,
b.tablespace,
b.segfile#,
b.segblk#,
round(((b.blocks * d.VALUE) / 1024 / 1024), 2) size_mb,
a.SID,
a.serial#,
a.username,
a.osuser,
a.program,
a.status
from v$session a, v$sort_usage b, v$process c, v$parameter d
where b.segfile# = &seg_temp_file_id
and d.name = 'db_block_size'
and a.saddr = b.session_addr
and a.paddr = c.addr
order by b.tablespace, b.segfile#, b.segblk#, b.blocks;
會提示輸入seg_temp_file_id的值,輸入202就可以找出session,再將這些session刪除就可以drop temp file了。