6.7.4 数据文件的移动和重命名
数据文件的移动是指将数据文件从一个存储位置移动到另一个存储位置,在移动的同时还可以修改文件的名称。数据文件的重命名是指在原来的位置将文件的名称改为其他字符串。
移动数据文件的主要目的是为了更换磁盘,或者平衡磁盘的I/O操作。Oracle建议尽量将数据文件分布在不同的磁盘上,并与重做日志文件分别存放。
数据文件的移动和重命名需要分四步进行,第一步是将数据文件处于脱机状态,第二步是在操作系统中将磁盘上的数据文件移动到另一个位置,或者仅仅修改它的名称,第二步是在数据库中对文件进行重命名,第四步是将数据文件处于联机状态。
对于不同的表空间,需要使用不同的方法移动或重命名文件。对于普通表空间,先使表空间脱机,然后再对数据文件进行移动或重命名,在这种情况下需要执行ALTER TABLESPACE命令。对于SYSTEM表空间,或者其中包含活动回滚段的表空间,因为无法使它们处于脱机状态,所以应该先将数据库切换到MOUNT状态,然后对数据文件进行移动或重命名。在这种情况下需要执行ALTER DATABASE命令。
例如,对于普通表空间TS1,假设希望将数据文件ts11.dbf重命名为ts1_1.dbf,或者改变它的存储位置,首先使表空间TS1处于脱机状态。脱机的目的是防止用户访问表空间,以保证数据文件的一致性。
SQL>ALTER TABLESPACE TS1 OFFLINE;
接下来在操作系统中对数据文件TS11.DBF进行重命名,将其名称改为ts1_1.dbf,或者将它移动到另外一个存储位置。
接下来在SQL*Plus中执行ALTER TABLESPACE修改数据文件的名称或路径。命令如下:
SQL>ALTER TABLESPACE TS1
RENAME DATAFILE'/home/oracle/ts11.dbf'
TO'/home/oracle/ts1_1.dbf';
数据文件的位置和名称信息记录在控制文件和数据字典中,ALTER TABLESPACE命令中的RENAME子句的作用就是修改控制文件和数据字典的相关信息。在执行ALTER TABLESPACE命令之前,必须保证数据文件在操作系统中已经被正确地重命名了。
实际上,表空间中的多个数据文件可以同时被移动或重命名。例如,以下语句将把表空间TOOLS中的数据文件tools01.dbf和tools02.dbf分别重命名为tools001.dbf和tools002.dbf:
SQL>ALTER TABLESPACE TOOLS
RENAME DATAFILE
'/home/oracle/tools01.dbf',
'/home/oracle/tools02.dbf'
TO
'/home/oracle/tools001.dbf',
'/home/oracle/tools002.dbf';
数据文件被移动或重命名后,可以再次通过查询数据字典dba_data_files来了解修改后的信息。
最后,为了使用户能够访问表空间,应该将表空间处于联机状态,例如:
SQL>ALTER TABLESPACE TS1 ONLINE;
现在再以表空间SYSTEM为例来说明另一种特殊表空间中数据文件的移动和重命名方法。假设我们希望将SYSTEM表空间中的数据文件system01.dbf从原来的存储位置移动到目录“/home/oracle/orcl”下,并将它重命名为“system_01.dbf”。由于SYSTEM表空间和包含活动回滚段的表空间不能处于脱机状态,所以需要将数据库转入MOUNT状态。这一系列操作需要数据库管理员来执行。
SQL>CONN sys/1234 AS SYSDBA
SQL>SHUTDOWN
SQL>STARTUP MOUNT
接下来在操作系统中对数据文件进行移动和重命名,然后在SQL*Plus中执行ALTER DATABASE命令,在控制文件和数据字典中修改该数据文件的相关信息。命令如下:
SQL>ALTER DATABASE
RENAME FILE'/home/oracle/system01.dbf'
TO'/home/oracle/orcl/system01.dbf';
需要注意的事,在ALTER DATABASE命令的RENAME子句中使用的是FILE关键字,而不是DATAFILE关键字。
最后,为了使用户能够访问数据库,需要打开数据库:
SQL>ALTER DATABASE OPEN;
在有些情况下需要对表空间进行重命名,这样的操作是非常简单的,表空间中的数据文件没有任何变化。例如,下面的语句用于把表空间ts1重命名为ts11:
SQL>ALTER TABLESPACE ts1 RENAME TO ts11;