Oracle version:11.2.0.4
目录:
一、单个数据文件重命名和重定位
二、单个表空间中重命名和重定位数据文件
三、多个表空间中重命名和重定位数据文件
四、12c新特性
五、参考文档
一、单个数据文件重命名和重定位
此方法只适用在可以置为offline的数据文件,不适用于 SYSTEM,默认临时表空间文件,活动的undo表空间文件。且数据库必须打开归档!!!
步骤如下:
- 数据库开启的情况下,将数据文件置为 offline
此操作会阻止该数据文件的读写操作,生产环境请在业务低峰期且确保沟通OK的情况下执行。
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf' OFFLINE ;
2.在操作系统上重命名和重定位数据文件
将 u01 下的数据文件 users01.dbf 移动到 u02 目录下且重命名为 users001.dbf
mv /u01/app/oracle/oradata/orcl/users01.dbf /u02/app/oracle/oradata/orcl/users001.dbf
3.使用 ALTER DATABASE ... RENAME FILE ... 改变数据库中的文件名。
执行时必须提供完整的文件路径名,源文件名可以从DBA_DATA_FILES视图获取。
ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/orcl/users01.dbf' TO '/u02/app/oracle/oradata/orcl/users001.dbf' ;
查看数据文件状态:
FILE_NAME ONLINE_STATUS
-------------------------------------------------------------------- -------------
/u01/app/oracle/oradata/orcl/system01.dbf SYSTEM
/u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE
/u02/app/oracle/oradata/orcl/users001.dbf RECOVER
4.让数据文件online之前需要对文件进行recover,再执行online
SQL> RECOVER DATAFILE '/u02/app/oracle/oradata/orcl/users001.dbf';
Media recovery complete.
SQL> ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/orcl/users001.dbf' ONLINE ;
Database altered.
5.完成后立即执行一次完整数据库备份,完毕!
二、单个表空间中重命名和重定位数据文件
此方法只适用在可以置为offline的表空间,不适用于 SYSTEM,默认临时表空间,活动的undo表空间。
如果很多个数据文件均在同一个表空间下,则可以通过将此表空间置为offline来重命名和重定位数据文件。
步骤如下:
- 数据库开启的情况下,将数据文件所在表空间置为 offline
此操作会阻止该表空间下数据文件的读写操作,生产环境请在业务低峰期且确保沟通OK的情况下执行。
ALTER TABLESPACE users OFFLINE NORMAL;
2.在操作系统上重命名和重定位数据文件
将 u01 下的数据文件 users01.dbf 移动到 u02 目录下且重命名为 users001.dbf
将 u01 下的数据文件 users02.dbf 移动到 u02 目录下且重命名为 users002.dbf
mv /u01/app/oracle/oradata/orcl/users01.dbf /u02/app/oracle/oradata/orcl/users001.dbf
mv /u01/app/oracle/oradata/orcl/users02.dbf /u02/app/oracle/oradata/orcl/users002.dbf
3.使用 ALTER TABLESPACE ... RENAME DATAFILE ... 改变数据库中的文件名。
执行时必须提供完整的文件路径名,源文件名可以从DBA_DATA_FILES视图获取。
ALTER TABLESPACE users
RENAME DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf',
'/u01/app/oracle/oradata/orcl/users02.dbf'
TO '/u02/app/oracle/oradata/orcl/users001.dbf',
'/u02/app/oracle/oradata/orcl/users002.dbf';
4.完成后立即执行一次完整数据库备份
表空间offline状态下也是可以通过RMAN进行备份的。
5.此方法不需要进行recover,可直接将表空间置为 online,完毕!
ALTER TABLESPACE users ONLINE;
三、多个表空间中重命名和重定位数据文件
如果数据文件在多个表空间下,则有下面三种方式处理:
①需要将所有数据文件置为offline;
②将数据文件对应的表空间置为offline;
③直接将数据库置为mount状态。
①和②已经在前面有讨论,下面直接看③,③的动作影响很大,需要重启数据库实例,慎重!
SYSTEM,默认临时表空间文件,活动的undo表空间文件均可以通过此方式修改。
步骤如下:
1.关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
2.在操作系统上重命名和重定位数据文件
mv /u01/app/oracle/oradata/orcl/lzh01.dbf /u02/app/oracle/oradata/orcl/lzh001.dbf
mv /u01/app/oracle/oradata/orcl/users01.dbf /u02/app/oracle/oradata/orcl/users001.dbf
3.启动数据库至mount
SQL> startup mount
ORACLE instance started.
Total System Global Area 805303360 bytes
Fixed Size 8901696 bytes
Variable Size 650117120 bytes
Database Buffers 138412032 bytes
Redo Buffers 7872512 bytes
Database mounted.
4.使用 ALTER DATABASE ... RENAME FILE ... 改变数据库中的文件名。
执行时必须提供完整的文件路径名,源文件名可以从DBA_DATA_FILES视图获取。
SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/orcl/lzh01.dbf' TO '/u02/app/oracle/oradata/orcl/lzh001.dbf' ;
Database altered.
SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/orcl/users01.dbf' TO '/u02/app/oracle/oradata/orcl/users001.dbf' ;
Database altered.
5.打开数据库
SQL> alter database open ;
Database altered.
6.完成后立即执行一次完整数据库备份。完毕!
四、12c新特性
前面的三种方法本质上都是需要将数据文件置为offline再进行修改,12c引入新特性,可以直接重命名和重定位online数据文件,一条命令搞定,非常方便。
示例:
1.将 u01 下的数据文件 users01.dbf 移动到 u02 目录下且重命名为 users001.dbf。
此操作相当于move,u01下文件users01.dbf 会删除。
如果u02下已经存在 users001.dbf ,此操作会报错。
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf'
TO '/u01/app/oracle/oradata/orcl/users001.dbf';
Database altered.
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf' ;
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf'
*
ERROR at line 1:
ORA-01119: error in creating database file
'/u01/app/oracle/oradata/orcl/lzh002.dbf'
ORA-27038: created file already exists
Additional information: 1
2.可以通过参数 REUSE 覆盖上面文件已经存在的报错。
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf' REUSE ;
Database altered.
3.可以通过参数 KEEP 让源文件不被删除,相当于 copy
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf' KEEP ;
Database altered.
4.可以将本地文件Relocate到ASM磁盘组
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf'
TO '+DATA01/data/orcl/datafile/users01.dbf';
5.完成后立即执行一次完整数据库备份。完毕!
注意事项:
1.如果指定的数据文件处于脱机状态,ALTER DATABASE MOVE DATAFILE 语句将会报错。
2.如果使用备用数据库,则可以在主数据库和备用数据库(物理或逻辑)上独立执行移动online数据文件操作。当数据文件在主服务器上移动时,备用服务器不受影响,反之亦然。
3.闪回操作不会将移动的数据文件重新定位到其以前的位置。如果你将一个数据文件从一个位置移动到另一个位置,然后将数据库闪回到移动之前的某个时间点,那么数据文件将保留在新位置,但是数据文件的内容将在闪回中指定的时间更改为内容。
4.在 Windows 平台上重新定位数据文件时,原始数据文件可能会保留在旧位置,即使省略了 KEEP 选项。在这种情况下,数据库只有在语句成功完成时才使用新位置中的数据文件。如果需要,可以在操作完成后手动删除旧数据文件。
五、参考文档
11g官方文档:https://docs.oracle.com/cd/E11882_01/server.112/e25494/dfiles.htm#ADMIN11430
12.1官方文档:
https://docs.oracle.com/database/121/ADMIN/dfiles.htm#ADMIN11430