OS 删除temp表空间 而磁盘空间未释放的解决方案



标题:OS 删除temp表空间 而磁盘空间未释放的解决方案 

作者:lōττéry©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]



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再和相关人员确认方案...

 


此条目发表在 Oracle  分类目录。将固定连接 加入收藏夹。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28602568/viewspace-1270065/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28602568/viewspace-1270065/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值