近日,在初始化系统的时候,有报错,最后查的是因为部署在一台linux系统上的oracle数据库有异常。登陆到系统中,切换到oracle用户查看数据库状态时,报错现象如下:
再查看磁盘空间使用情况df –h查看,根目录磁盘空间已经满了(sda3磁盘)
1、首先想到的是删除一些不用的文件。但是这是一台只部署了oracle数据库而没有部署其他基础件的linux系统,删除文件不会增加太多空间。如果部署了其他基础件,可以删除一些日志和core文件,可以增加很大的磁盘空间。
2、根据经验,oracle数据库用久了,它的UNDO表空间和TEMP表空间对应的物理文件会占用很大的磁盘空间。进入对应的oradata目录使用ll –lh查看,果然,分别占用了14G和17G的磁盘空间。
3、基于以上分析,需要对这2个文件动动手术,可以参考网上资料《UNDOTBS01.DBF太大的解决方法》和《oracle temp01.dbf太大的解决方式》
4、以上的”手术”需要在数据库启动的状态下进行,但是目前数据库因为磁盘空间不足,启动都启动不了,便想到删除一些文件先让数据库可以启动起来。
前面已经分析了,由于只部署了数据库,删除一些文件之后只多了2M的空间,数据库无法启动。便进行了系统的重启,一般重启系统会释放一些空间,可以让数据库先起起来。但是这次重启系统后,数据库还是因为磁盘空间满无法启动。
5、这种情况下,观察到业务的一些数据库文件也占用了很大的空间,可以先挪一部分物理文件到其他非根目录上去。这个环境的数据库文件一部分再/uf02/oradata/test142,这个目录是用的根目录磁盘空间,可能是数据库最开始安装时指定的数据库文件路径;一部分在/uf20/oradata/test142,这个是新挂载的磁盘sdb1,还有18G空间可用。
以上挪表空间的物理文件的过程可以在数据库没有启动的时候进行。
问题已经分析清楚,可以开始持刀操作了
一、加载新磁盘并挂载
如果没有新的磁盘,可以申请挂载新的磁盘,操作如下。如有可忽略,实际操作过程中目录名称请自己定义。
二、挪数据文件到新的磁盘目录
启动数据库,直接startup会报错刚刚移动的数据文件不存在类似。
可以在mount数据库的状态下,指定数据文件到新的位置。
▪ 已连接到空闲例程↑
▪ORACLE 例程已经启动↑
▪数据库装载完毕↑
▪数据库已更改↑
SQL> alter database open;
▪数据库已更改↑
SQL> alter system register;
▪系统已更改↑
三、重做UNDO表空间
以上步骤二的操作可以解决部分问题,挪一些比较大的物理文件到新的磁盘,则根目录磁盘空间可能就已经多出了好几个G,则够用了。
*这里推荐一种方法可以让空间更多点
以SYS用户登录Oracle 自带的SQL*PLUS的方法:
sqplus “/as sysdba”
1、创建一个新的小空间的UNDO TABLESPACE
2、设置新的表空间为系统UNDO_TABLESPACE
3、在配置文件中修改undo_tablespace的设置
在本系统的位置及文件名称
即cd $ORACLE_HOME/dbs目录下
将其中的undo_tablespace=UNDOTBS1 改为 UNDOTBS2
4、重启数据库
方法一:采用命令SHUTDOWN IMMEDIATE 关闭数据库,然后再采用命令STARTUP 重新开启数据库;
方法二:重启计算机
5、DROP 旧的表空间
查询所有表空间情况: SELECT NAME FROM V$DATAFILE;
空间得到恢复利用
文件位置请根据自己系统情况进行操作
以上操作完成,查看文件大小以及空间使用情况,感觉心情不错!
版权所有 侵权必究
如需转载请联系
0571-28829811