删除文件后,文件系统空间没有被释放,求解

有一个文件系统/oradata,放的是oracle的数据文件,由于空间快满了,数据库管理员想重新设置undo空间的大小,就删除了一个undo表空间,使用命令类似如下:drop tablespace undo including contents and datafiles;就是删除oracle中的表空间的同时删除系统上的数据文件,这个文件大概10...显示全部
有一个文件系统/oradata,放的是oracle的数据文件,
由于空间快满了,数据库管理员想重新设置undo空间的大小,就删除了一个undo表空间,使用命令类似如下:
drop tablespace undo including contents and datafiles;
就是删除oracle中的表空间的同时删除系统上的数据文件,这个文件大概10G左右,
命令提示成功完成后,其到系统该目录下查看,这个undo表空间的数据文件仍然存在,
所以他就又执行了一次rm,删除这个文件的操作。

然后再df -g检查该文件系统大小,使用率仍然没变,所删除的文件的空间没有被系统释放,仍然占用着,
我怀疑是oracle还没有删除完,他就直接删除了,有oracle的进程还在占用这个文件所以没被释放,但是不知道怎么检查解决呢?
有没有在线可以解决的办法?

Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/oradatalv     50.00      4.90   91%       39     1% /oradata
# cd /oradata
# du -sg *
0.00    1.txt
2.29    20130327bak
6.00    dc
20.58   eip
0.00    lost+found
0.10    statspack01.dbf
0.10    statspack_tbs.dbf
总共使用就20G左右,少了很多空间,

求大侠们指点一下。收起
参与12

查看其它 10 个回答rootking的回答

rootkingrootking系统架构师ROOTKING
不用安装lsof也能判断出来是那个进程占用了该文件

在ORACLE中只有server processor进程占用文件句柄,从而删除文件后空间不能释放。


1、查看是哪些用户连接到该ORACLE,客户端一般用非SYS和SYSTEM用户,即排除SYS和SYSTEM用户
select sid,serial#,username,program,machine from v$session where username is not null;


2、查看该用户server processor进程的PID
select spid from v$process where addr in (select paddr from v$session where username='用户名');

3、进入UNIX系统查看该进程是否占用删除文件的句柄
ls -l /porc/$PID/fd

4、跟据前3步找出是哪个server processor时程锁住了刚才删除的文件,并且能查看出该客户机的主机名,然后跟据主机名找出对应的客户机,确认没影响KILL掉该进程或session。
互联网服务 · 2013-03-31
浏览4896

回答者

rootking
系统架构师ROOTKING
擅长领域: 存储双活灾备

rootking 最近回答过的问题

回答状态

  • 发布时间:2013-03-31
  • 关注会员:1 人
  • 回答浏览:4896
  • X社区推广