有时某个磁盘的I/0可能过于繁忙,这可能影响到数据库系统的整体效率。此时就应该将一个或几个数据文件移动到其他磁盘上以平衡磁盘的I/O。另外在磁盘损坏的情况下也应该考虑移动数据文件。oracle提供了两条移动数据文件的指令。

一、移动非系统数据文件

alter tablespace tablespace_name
  rename datafile 'file_name.dbf'
  to 'file_name.dbf';

该语句适合于上面没有活动的还原数据或者临时数据段的非系统表空间中的数据文件,要求在使用该语句时必须先脱机目标表空间且目标数据文件必须存在。因为该语句只修改控制文件中指向数据文件的指针(地址)

步骤如下(以移动users表空间为例):

  1、获得表空间和数据文件的相关信息

  select file_name,tablespace_name,status from dba_data_files;确定对应表空间的数据文件和文件的状态,一定要注意表空间有多个数据文件的情况。

  select tablespace_name,status from dba_tablespaces;确定表空间是否为联机状态

  2、将表空间置为脱机

 

alter tablespace users offline

  脱机状态目的是为了不让其他进程在数据文件移动的过程中修改数据文件的数据。保证移动后数据的完整性

  3、使用os命令移动或者复制要移动的数据文件

  必须保证数据文件真的移动或复制到当前位置,因为在修改语句中并没有校验数据文件是否真的 存在并且available,只是修改 了控制文件中 的数据文件的指针信息

  4、执行修改数据文件的命令

 

alter tablespace users
    rename datafile '/oradta/orcl/users01.dbf'
    to '/oradta/orcl/datafile/data/users01.dbf';

  5、将表空间置为联机

 

alter tablespace users online;

  6、获取表空间和数据文件的相关信息dba_tablespaces、dba_data_files;

    select file_name,tablespace_name,status from dba_data_files;确定对应表空间的数据文件和文件的状态

    select tablespace_name,status from dba_tablespaces;确定表空间是否为联机状态

  7、删除旧的数据文件。

二、移动系统数据文件和临时、还原数据文件

  1、alter database database_name

      rename file 'data_file_name.dbf'

      to 'data_file_name.dbf';

该命令适用于系统表空间和不能置为脱机的表空间中的数据文件,要求使用该语句是数据库必须运行在加载状态mount,且目标数据文件必须存在,因为该语句只修改控制文件中数据文件的指针(地址)并不校验数据文件是否真的存在。

步骤如下(以移动system表空间为例):

  1、获取表空间的信息和数据文件的信息

    

   select file_name,tablespace_name,status from dba_data_files;确定对应表空间的数据文件和文件的状态,一定要注意表空间有多个数据文件的情况。

     select tablespace_name,status from dba_tablespaces;确定表空间是否为联机状态

  2、关闭数据库系统

  shutdown immediate

  保证彻底关闭数据库,没有任何进程可以修改系统表空间。因为系统、临时、还原表空间都不能置为脱机状态,所以必须关闭数据库。

  3、使用os命令移动或者复制数据文件到目标地址。

  4、将数据库置为加载状态mount

  startup mount

  注;

  以加载方式启动数据库,这也是一种特殊的数据库状态。该状态在对数据库进行某些特殊的维护期间时使用,如对系统表空间进行恢复、修改数据文件名、移动数据文件等。   启动指令为startup mount;

  当用mount指令启动数据库时 oracle启动实例并打开控制文件此时oracle进行如下操作:

    1、将数据库与已经启动的实例关联起来

    2、利用初始化参数文件中的说明锁定并打开控制文件

    3、读取控制文件并且获得数据文件和重做日志文件的名字和状态信息,但是并不检查这些文件是否存在

  5、执行移动数据文件命令

 

alter database database_name 
    rename file 'file_name.dbf'
    to 'file_name.dbf'

  6、打开数据库系统

    alter database open

  7、通过dba_data_files数据字典查看表空间下对应的数据文件。

  8、删除旧的无用的数据文件。

然后使用相同的方式将临时表空间的数据文件和还原表空间的数据文件移动到指定的目录下。完成对oracle系统的数据文件的配置。