ORACLE数据库根目录空间不足,进行表空间文件转移不占用根目录空间
1.首先查看都有哪些表空间文件在根目录下
1.1.查看根目录占用情况
du -h --max-depth=1 /
会显示哪些目录占用多少空间,针对根目录下占用空间多的进行分析,如果存在数据库表空间文件在这些目录下,我们进行文件转移。
除去系统文件目录,比如home文件下有上GB的文件存储,我们可以到此目录去查看是否有dbf文件或者我们看下一步操作,来判断表空间文件存储在哪?
1.2.两种方式查看表空间文件
1.2.1.使用linux查找命令在/home目录下去查找dbf文件
find /home -name *.dbf
1.2.2.以DBA用户登录ORACLE数据库进行表空间文件的模糊查询
select * from dba_data_files where file_name like '/home/%';
将查找出来的表空间文件以及对应的表空间名称记录下来,进行文件转移。
注:以上是查找根目录表空间的两种方法。
2.针对特定表空间文件进行文件转移(非系统表空间)
使用PLSQL以DBA用户登录对应的数据库,进行如下操作:
2.1.查看要改变的表空间的数据文件信息
select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='表空间名称';
2.2.将目标表空间设置为脱机状态
alter tablespace 表空间名称 offline;
查看表空间状态:
select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='表空间名称';
2.3.移动数据文件
在linux终端界面或者使用XSHELL等工具进行操作:
mv /home/oradata/SU01.DBF /dbdata/SU01.DBF
2.4.在数据库中修改表空间数据文件的路径
alter tablespace SU rename datafile '/home/oradata/SU01.DBF' to '/dbdata/SU01.DBF';
2.5.修改该表空间为在线状态
alter tablespace SU online;
2.6.查看该表空间最后结果
select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='SU';
注意,我们此时使用df -h可能看到根目录没有空间的变化,是因为存在占用进程的僵尸文件,我们需要重启数据库就能看到空间转移的效果:
# 切换oracle用户
su - oracle
# 登录数据库
sqlplus / as sysdba
# 关闭数据库
shutdown immediate;
# 启动数据库
startup;
3.系统表空间移动
该方法需要数据库处于mount状态
3.1.关闭运行中的数据库
shutdown immediate;
3.2.启动数据库到mount状态
startup mount;
3.3.移动系统表空间(SYSTEM表空间)的数据文件
mv /home/oradata/orcl/SYSTEM01.DBF /dbdata/SYSTEM01.DBF
3.4.修改表空间数据文件的路径
alter database rename file '/home/oradata/orcl/SYSTEM01.DBF' to '/dbdata/SYSTEM01.DBF';
3.5.启动数据库,打开实例
alter database open;
3.6.查看表空间修改结果
select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='SYSTEM';