背景:由于各种原因,在实际工作中可能会出现oracle服务器数据盘空间被占满的情况,这个时候单纯的添加新磁盘,后续表空间文件放新盘的方案已经不适用了,因为源盘已经占用满了,数据库服务会异常,且之前的表空间是自增长的,会一直顶死源盘),这个时候就必须得将这部分没到最大值的表空间文件一起迁移到新盘,如下图所示,第15-17这三个表空间文件目前只有10多G,自增长最大是32G,所以就算你从其他地方清理一部分空间后,这几个文件还是会一直吃当前分区的容量,必须迁走
[oracle@database01 aq1]$ ll
总用量 498303248
-rw-r----- 1 oracle oinstall 10502144 5月 29 10:56
-rw-r----- 1 oracle oinstall 52429312 5月 29 09:55
-rw-r----- 1 oracle oinstall 52429312 5月 29 10:56
-rw-r----- 1 oracle oinstall 52429312 5月 29 04:00
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_01.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_02.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_03.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_04.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_05.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_06.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_07.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_08.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_09.dbf
-rw-r----- 1 oracle oinstall 32212262912 5月 29 10:56 TS_RZCJ_10.dbf
-rw-r----- 1 oracle oinstall 34313609216 5月 29 10:56 TS_RZCJ_11.dbf
-rw-r----- 1 oracle oinstall 34330386432 5月 29 10:56 TS_RZCJ_12.dbf
-rw-r----- 1 oracle oinstall 34330386432 5月 29 10:56 TS_RZCJ_13.dbf
-rw-r----- 1 oracle oinstall 34330386432 5月 29 10:56 TS_RZCJ_14.dbf
-rw-r----- 1 oracle oinstall 12100575232 5月 29 10:56 TS_RZCJ_15.dbf
-rw-r----- 1 oracle oinstall 11995717632 5月 29 10:56 TS_RZCJ_16.dbf
-rw-r----- 1 oracle oinstall 11995717632 5月 29 10:56 TS_RZCJ_17.dbf
-rw-r----- 1 oracle oinstall 1006641152 5月 29 10:56
-rw-r----- 1 oracle oinstall 922755072 5月 29 10:56
-rw-r----- 1 oracle oinstall 7455383552 5月 29 05:24
-rw-r----- 1 oracle oinstall 5573189632 5月 29 10:56
-rw-r----- 1 oracle oinstall 5251072 5月 29 10:56
实际工作步骤
第一:挂盘
- 给服务器新增磁盘
- 给新磁盘分区,格式化(例如:/dev/vdb1 xfs格式,详细步骤略)
- 创建见挂载点目录,(mkdir /u02)
- 将新分区挂载到挂载点,并写入开机自动挂载 echo '/dev/vdb1 /u01 xfs defaults 0 0' >>/etc/fstab
- 激活挂载:mount -a
第二:创建新表空间文件存放目录
创建目录:mkdir -p /u02/app/oradata
更改目录属组(具体用户和属组参考源目录,例如: chown -R oracle:oinstall /u02/app/)
第三步:切换oracle用户,关闭监听,关闭数据库,挂载数据库
关闭监听
#切换到oracle用户
[root@database01 ~]# su - oracle
#关闭监听
[oracle@database01 ~]$ lsnrctl stop
关闭数据库
[oracle@database01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Mon May 29 10:56:23 2023
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
第三步:移动需要移动的表空间文件到新目录
进入源表空间文件所在目录,将需要移动的表空间文件移动到新目录,并更改新目录下文件的属组信息
[oracle@database01 aq1]$ mv TS_RZCJ_15.dbf /u02/app/oradata/
[oracle@database01 aq1]$ mv TS_RZCJ_16.dbf /u02/app/oradata/
[oracle@database01 aq1]$ mv TS_RZCJ_17.dbf /u02/app/oradata/
[oracle@database01 oradata]$ chown -R oracle:oinstall /u02/app/)
第四步:挂起数据库,并修改表空间文件信息
挂起数据库
SQL> startup mount
ORACLE instance started.
Total System Global Area 1.3362E+10 bytes
Fixed Size 2217952 bytes
Variable Size 6912215072 bytes
Database Buffers 6375342080 bytes
Redo Buffers 72069120 bytes
Database mounted.
修改表空间文件信息
语法:alter database rename file ‘表空间文件源路径’ to '新路径'
SQL> alter database rename file '/u01/app/oradata/aq1/TS_RZCJ_15.dbf' to
SQL> alter database rename file '/u01/app/oradata/aq1/TS_RZCJ_15.dbf' to '/u02/app/oradata/TS_RZCJ_15.dbf';
Database altered.
SQL> alter database rename file '/u01/app/oradata/aq1/TS_RZCJ_16.dbf' to '/u02/app/oradata/TS_RZCJ_16.dbf';
Database altered.
SQL> alter database rename file '/u01/app/oradata/aq1/TS_RZCJ_17.dbf' to '/u02/app/oradata/TS_RZCJ_17.dbf';
Database altered.
第五步:打开数据库,并启动监听
打开数据库
SQL> alter database open;
Database altered.
SQL> quit
启动监听
[oracle@database01 ~]$ lsnrctl status