一、普通表空间
1.RMAN方式
需要数据库处于归档模式,且在移动过程中该表空间无法正常访问。
1.1 创建测试表空间
SQL> create tablespace T1 datafile '/home/oracle/T101.dbf' size 20m;
Tablespace created.
1.2 查看要移动数据文件的大小
SQL> set line 200
SQL> col file_name for a50
SQL> select file_id,file_name,bytes/1024/1024 as MB,online_status from dba_data_files;
FILE_ID FILE_NAME MB ONLINE_STATUS
---------- ---------------------------------------------- ---------- -------------
4 +DATA/orcl/datafile/users.259.1106062905 5 ONLINE
3 +DATA/orcl/datafile/undotbs1.258.1106062905 350 ONLINE
2 +DATA/orcl/datafile/sysaux.257.1106062905 2050 ONLINE
1 +DATA/orcl/datafile/system.256.1106062903 750 SYSTEM
5 +DATA/orcl/datafile/undotbs2.265.1106063315 225 ONLINE
6 /home/oracle/T101.dbf 20 ONLINE
这里要移动的数据文件是/home/oracle/T101.dbf,FILE_ID为6,大小为20M,检查+DATA的剩余空间是否满足。
1.3 移动数据文件到ASM
RMAN> copy datafile 6 to '+DATA/orcl/datafile/T101.dbf';
1.4 表空间开始无法访问
RMAN> sql 'alter database datafile 6 offline';
sql statement: alter database datafile 6 offline
1.5 切换数据文件
RMAN> switch datafile 6 to copy;
datafile 6 switched to datafile copy "+DATA/orcl/datafile/T101.dbf"
RMAN> recover datafile 6;
1.6 表空间恢复正常访问
RMAN> sql 'alter database datafile 6 online';
sql statement: alter database datafile 6 online
2.rename datafile方式
2.1 创建测试表空间
SQL> create tablespace T2 datafile '/home/oracle/T201.dbf' size 20m;
Tablespace created.
2.2 查看要移动数据文件的大小
SQL> set line 200
SQL> col file_name for a50
SQL> select file_id,file_name,bytes/1024/1024 as MB,online_status from dba_data_files;
FILE_ID FILE_NAME MB ONLINE_STATUS
---------- ---------------------------------------------- ---------- -------------
4 +DATA/orcl/datafile/users.259.1106062905 5 ONLINE
3 +DATA/orcl/datafile/undotbs1.258.1106062905 350 ONLINE
2 +DATA/orcl/datafile/sysaux.257.1106062905 2050 ONLINE
1 +DATA/orcl/datafile/system.256.1106062903 750 SYSTEM
5 +DATA/orcl/datafile/undotbs2.265.1106063315 225 ONLINE
6 /home/oracle/T201.dbf 20 ONLINE
2.3 将本地数据文件offline
SQL> alter database datafile 6 offline;
Database altered.
2.4 拷贝数据文件到ASM
ASMCMD> cp /home/oracle/T201.dbf +data/orcl/datafile/
copying /home/oracle/T201.dbf -> +data/orcl/datafile/T201.dbf
2.5 rename数据文件
SQL> alter database rename file'/home/oracle/T201.dbf' to '+DATA/orcl/datafile/T201.dbf';
Database altered.
SQL> select file_id,file_name,bytes/1024/1024 as MB,online_status from dba_data_files;
FILE_ID FILE_NAME MB ONLINE_STATUS
---------- ---------------------------------------------- ---------- -------------
4 +DATA/orcl/datafile/users.259.1106062905 5 ONLINE
3 +DATA/orcl/datafile/undotbs1.258.1106062905 350 ONLINE
2 +DATA/orcl/datafile/sysaux.257.1106062905 2050 ONLINE
1 +DATA/orcl/datafile/system.256.1106062903 750 SYSTEM
5 +DATA/orcl/datafile/undotbs2.265.1106063315 225 ONLINE
6 +DATA/orcl/datafile/T201.dbf RECOVER
SQL> recover datafile 6;
Media recovery complete.
SQL> alter database datafile 6 online;
Database altered.
二、SYSTEM表空间
归档模式和非归档模式都可以,需要将数据库启动到mount状态。然后关闭RAC所有节点相关实例。
因为system数据文件不能再open状态下进行操作,因为不能够将system数据文件offline。
1.归档模式
2.1 创建测试表空间数据文件
SQL> alter tablespace system add datafile '/home/oracle/system02.dbf' size 20m;
2.2 关闭RAC所有节点相关实例
SQL> shutdown immediate
2.3 启动数据文件所在节点的实例到mount
SQL> startup mount
2.4 通过RMAN COPY的方式移动
RMAN> copy datafile 7 to '+DATA/orcl/datafile/system02.dbf';
RMAN> switch datafile 7 to copy;
datafile 7 switched to datafile copy "+DATA/orcl/datafile/system02.dbf"
RMAN> alter database open;
启动所有实例,恢复正常使用。
2.非归档模式
非归档模式下,当数据库处于open状态时,是无法进行rman copy的。
system文件也不能offline。
因此只能通过rename datafile的方式进行操作。
2.1 关闭所有实例,使用asmcmd cp命令创建数据文件副本
ASMCMD> cp /home/oracle/system02.dbf +data/orcl/datafile/
2.2 启动1个实例到mount状态,修改数据文件名称
SQL> alter database rename file'/home/oracle/system02.dbf' to '+DATA/orcl/datafile/system02.dbf';
2.3 打开实例
SQL> alert database open;
之后,启动其他节点实例。