昨天客户反应应用程序报错,直接查看各表空间利用情况(Oracle 9201),发现User空间使用率已经99.98%,Temp空间占了20G(我们的程序啊~~) ,和客户IT协商切换Temp表空间文件及给User表空间增加数据文件等事宜,原来的所以的表空间都是在C盘的,我决定先在D盘给其增加一个数据文件让系统Run起来。
下午客户说C盘的空间已经释放出来了,他们就C盘大,所以不想在D盘有数据文件,问是否可以将新增的那个数据文件删除了。这时我就开始犯错了!我问了下增加过文件后是否使用了,客户告知没有用(千万别相信客户),于是我就开始着手删除数据文件.
以为客户的生产数据系统是在非归档模式下运行的,参考了文章:
http://tolywang.itpub.net/post/48/299993 http://tolywang.itpub.net/post/48/299993
ALTER DATABASE DATAFILE ‘D:\ORADATA\USER02.DBF’ OFFLINE DROP
这时在dba_data_files中查看该文件 bytes,blocks,maxbytes是null,status是有效状态 。大功告成, -_-
客户随后又反应系统报错不能用,差看日志,全是不能读取 D:\ORADATA\USER02.DBF 上的数据块的问题,靠 ,原来上面已经有数据存在了,我都去检察这个问题,好在知道数据文件还是物理存在的,啥也不说了,恢复吧
先把Offline的数据文件Copy了一份,以防万一(这次我小心了)。
参考文章:http://zhaolinjnu.blog.sohu.com/79266480.html
执行语句:
先查看文件号: select * from v$DataFile;
重新创建数据文件: alter database create datafile 16;
恢复数据文件: recover datafile 16; 这个要在SQL Plus中执行 ,执行过状态就变为OFFLINE
OnLine: alter database datafile 6 online; OK~
总结以下就是切莫做事太慌,今天的好在也不是很大的一个事情,只是花了自己一点时间。在有很多事情要处理时也必须坚持在做危险的操作前做好必要的检测。
以后要多看看 blue_prince 的Blog: 在10g R2的drop empty datafile之前,事实上是无法对单个数据文件进行删除的,除非你更改数据字典或者将表空间删除。
还需要深入了解下:uet$,fet$等基表
Tags: Oracle 数据恢复
发表评论