如何更改Oracle数据文件的位置

A:归档模式下

1.在sqlplus中连接到要移动文件的Oracle数据库,然后执行如下SQL语句查看Oracle数据库文件位置:

 1SQL>select file_name   from   sys.dba_data_files;
 2FILE_NAME
 3--------------------------------------------------------------
 4C:ORA8ORADATAORACLEUSERS01.DBF
 5C:ORA8ORADATAORACLEDR01.DBF
 6C:ORA8ORADATAORACLETOOLS01.DBF
 7C:ORA8ORADATAORACLEINDX01.DBF
 8C:ORA8ORADATAORACLERBS01.DBF
 9C:ORA8ORADATAORACLETEMP01.DBF
10C:ORA8ORADATAORACLESYSTEM01.DBF

查询到7记录. 记录要移动的文件的位置和名称。

2.下面我们以把文件“C:ORA8ORADATAORACLEUSERS01.DBF”移动到“D:ORADATAUSERS01.DBF”为例介绍,要移动其它文件,请安相同的方法(根据实际情况修改文件路径和名称)操作即可。

首先让所有的用户停止连接该数据库,关闭数据库。在命令行窗口中输入:

1C:svrmgrl(回车)
2SVRMGR> connect   internal(回车)
3SVRMGR> shutdown   immediate(回车)
4#等待数据库提示关闭
5SVRMGR> exit

从“C:ORA8ORADATAORACLE”目录下找到文件“USERS01.DBF”,然后复制到目录“D:ORADATA”下面。如果移动多个文件,重复该步骤。

进入命令窗口,按以下内容输入:

1C:svrmgrl(回车)
2SVRMGR> connect   internal(回车)
3SVRMGR> startup   mount(回车)
4#等待数据库提示装载成功
5SVRMGR> alter   database   rename   file   'C:ORA8ORADATAORACLEUSERS01.DBF '   to   'D:ORADATAUSERS01.DBF ';
6#提示语句已处理后,如果要移动多个文件,修改文件路径和名称后重复执行上面的语句。完成后打开数据库。
7SVRMGR> alter   database   open;
8SVRMGR> exit

数据库文件移动成功。

B:数据库处于非归档模式下

可以通过如下步骤更改文件路径:

1.关闭数据库
2.系统级进行文件复制
3.启动数据库到mount状态
3.通过SQL修改数据文件位置
4.打开数据库

以下是实际操作的步骤示范:

1.数据库处于非归档模式

1SQL> archive log list;
2  Database log mode       No Archive Mode
3  Automatic archival       Enabled
4  Archive destination      /opt/oracle/oradata/conner/archive
5  Oldest online log sequence   150
6  Current log sequence      153

2.需要移动test.dbf文件

1SQL> select name from v$datafile;
2
3    NAME
4  ------------------------------------------------------------
5  /opt/oracle/oradata/conner/system01.dbf
6  /opt/oracle/oradata/conner/undotbs01.dbf
7  /opt/oracle/oradata/conner/users01.dbf
8  /opt/oracle/test.dbf

3.关闭数据库

1SQL> shutdown immediate;
2  Database closed.
3  Database dismounted.
4  ORACLE instance shut down.

4.复制文件到新的位置

1SQL> ! cp /opt/oracle/test.dbf /opt/oracle/oradata/conner/test.dbf

5.启动数据库到mount状态

 1SQL> startup mount;
 2  ORACLE instance started.
 3
 4  Total System Global Area 101782828 bytes
 5  Fixed Size          451884 bytes
 6  Variable Size       37748736 bytes
 7  Database Buffers      62914560 bytes
 8  Redo Buffers         667648 bytes
 9  Database mounted.
10
11SQL> select name from v$datafile;
12  NAME
13  -----------------------------------------------------------
14  /opt/oracle/oradata/conner/system01.dbf
15  /opt/oracle/oradata/conner/undotbs01.dbf
16  /opt/oracle/oradata/conner/users01.dbf
17  /opt/oracle/test.dbf

6.修改文件位置

 1SQL> alter database rename file '/opt/oracle/test.dbf' to '/opt/oracle/oradata/conner/test.dbf';
 2
 3  Database altered.
 4
 5SQL> alter database open;
 6    Database altered.
 7
 8SQL> select name from v$datafile;
 9
10  NAME
11  ----------------------------------------------------------------
12  /opt/oracle/oradata/conner/system01.dbf
13  /opt/oracle/oradata/conner/undotbs01.dbf
14  /opt/oracle/oradata/conner/users01.dbf
15  /opt/oracle/oradata/conner/test.dbf