实战案例,正确删除临时表空间临时数据文件步骤
1 确定对应的临时文件不包含任何事务
SELECT 'ALTER SYSTEM KILL SESSION '||''''||T2.SID||','||T2.SERIAL#||''''||' IMMEDIATE;',T1.SEGFILE#,T2.STATUS,T2.TYPE FROM V$SORT_USAGE T1,V$SESSION T2 WHERE T1.SESSION_ADDR=T2.SADDR。
2 删除临时文件
alter tablespace temp drop tempfile 'DADWADA'; --会删除文件,
1创建临时文件时候,如果创建大小为10G的临时表空间对应文件,创建很快,其他文件并没有10G,在后续的使用中会增加到10G。
2 如果文件系统空间不足,导致文件无法扩展到10G(此处文件设置的为autoextend off模式),在10.2版本中,数据库会offline此临时文件。
select a1.sid,
a1.serial#,
a1.status,
a1.LOGON_TIME,
a1.EVENT,
a1.PROGRAM,
a3.SPID,
a2.SEGFILE# -
(select value from v$Parameter where name = 'db_files')
From v$session a1, v$sort_usage a2, v$process a3
where a1.SADDR = a2.SESSION_ADDR
and a1.paddr = a3.ADDR
order by a1.LOGON_TIME asc
select * From dba_temp_files
alter database tempfile 1 drop; ---不会删除文件
可以使用reuse选项进行重用。
alter tablespace temp drop tempfile 'DADWADA'; --会删除文件,
select * From dba_objects t1 ,dba_objects t2 order by t1.object_id
ERROR at line 1:
ORA-01135: file 201 accessed for DML/query is offline
ORA-01110: data file 201: '/nmsport/nmsporta/PORTAL_TEMP01.dbf'
SELECT * FROM DBA_TEMP_FILES;
SELECT SID, SERIAL#, LOGON_TIME, STATUS, EVENT
fROM V$SESSION A
WHERE A.SADDR IN
(SELECT SESSION_ADDR FROM V$SORT_USAGE WHERE SEGFILE# > 201) ;
为空
alter database tempfile 1 drop;
如果不能删除则报错
ORA-25152, TEMPFILE此时不能被删除。 在用就不让删除?
select * From dba_temp_files