2013-04-29 17:57:47的笔记.今天发现说很乱,此文特加以整理
场景:
昨天
在系统上删除了32G的temp01.dbf文件,
结果还没有释放磁盘空间 df -hl看下/目录还是使用100%
未释放磁盘空间原因:在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用.
所有在用命令drop tablespace temp
[including contents and datafiles]
;会停在那里
等待事件:
SQL> SELECT
SID,
SEQ# EVENT,
P1TEXT
,
P2TEXT
,
P3TEXT,
STATE
FROM v$session_wait s where s.SID=159;
SID SEQ# EVENT
P1TEXT P2TEXT P3TEXT STATE
----------------------------------------------------------------
------------
159 440 enq: TS - contention name|mode tablespace ID dba WAITING
SQL>
如下解决方案①②可以将OS磁盘空间释放和temp表空间删除:
①
可以通过在系统上执行lsof |grep ..看下已经删除但仍被应用程序占用的文件列表
[root@kfdb49 dbs]# lsof |grep deleted | grep TEMP
oracle 1804 oracle 31u REG 253,0 34359730176 1376405 /oracle/app/product/10.2.0/db_1/dbs/TEMP01.DBF (deleted)
让os自动回收磁盘空间方法:kill掉相应的进程 或者 停掉使用这个文件的应用
1)kill -9 1804 ... 再drop tablespace temp including contents and datafiles;
2)restart oracle 对应的空间会被释放
在重启的时候注意要 shutdown immediate 等待事物提交完成,再重启 要是重启的时候指定了临时文件1、CREATE CONTROLFILE REUSE DATABASE "instance“.....
2、alter database backup controlfile to trace as '新位置'; 参数文件指定好新位置,为了下次启动使用
3、alter database open;
4、create spfile from pfile;
检查磁盘空间:
[root@kfdb49 dbs]# df -hl
②
查找数据库中谁在用这个temp;
--查看谁在用这个temp表空间/及其当时的一个结果~
SQL>
select
se.SADDR,
se.SID,
SE.SERIAL#,
se.USERNAME,
se.OWNERID,
se.STATUS,
se.OSUSER,
se.PROCESS,
se.MACHINE,
se.TERMINAL,
se.PROGRAM,
se.SQL_id,
su.TABLESPACE,
su.EXTENTS,
su.BLOCKS
FROM
v$session se, v$sort_usage su
WHERE
se.saddr = su.session_addr;
SADDR SID SERIAL# USERNAME OWNERID STATUS OSUSER PROCESS MACHINE TERMINAL PROGRAM SQL_ID TABLESPACE EXTENTS BLOCKS
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
2133DF5C 158 36 SYS 2147483644 INACTIVE MHQ-PC\mhq 1896:1968 WORKGROUP\MHQ-PC MHQ-PC plsqldev.exe
TEMP 23 2944
SQL>
从结果中发现
STATUS ==>
INACTIVE 可以直接通过如下语句kill掉进程来释放磁盘空间..
语句:
Alter system kill session '
158
,
36
';
再drop tablespace temp including contents and datafiles;
再检查磁盘空间:
[root@kfdb49 dbs]# df -hl
若
STATUS ==>
ACTIVE通过SQL_ID找到对应的sql再和相关人员确认方案...
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28602568/viewspace-1270065/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28602568/viewspace-1270065/