Oracle HowTo:在非归档模式下如何更改数据文件位置

http://www.eygle.com/archives/2004/10/oracle_howto_move_datefile.html
如果数据库处于非归档模式下,可以通过如下步骤更改文件路径:
1.关闭数据库
2.系统级进行文件复制
3.启动数据库到mount状态
3.通过SQL修改数据文件位置
4.打开数据库

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

1.数据库处于非归档模式
SQL> archive log list;
            Database log mode              No Archive Mode
            Automatic archival             Enabled
            Archive destination            /opt/oracle/oradata/conner/archive
            Oldest online log sequence     150
            Current log sequence           153
            

2.需要移动test.dbf文件
SQL> select name from v$datafile;
            NAME
            ------------------------------------------------------------
            /opt/oracle/oradata/conner/system01.dbf
            /opt/oracle/oradata/conner/undotbs01.dbf
            /opt/oracle/oradata/conner/users01.dbf
            /opt/oracle/test.dbf
            

3.关闭数据库
SQL> shutdown immediate;
            Database closed.
            Database dismounted.
            ORACLE instance shut down.
            

4.复制文件到新的位置
SQL> ! cp /opt/oracle/test.dbf /opt/oracle/oradata/conner/test.dbf
            

5.启动数据库到mount状态
SQL> startup mount;
            ORACLE instance started.
            Total System Global Area  101782828 bytes
            Fixed Size                   451884 bytes
            Variable Size              37748736 bytes
            Database Buffers           62914560 bytes
            Redo Buffers                 667648 bytes
            Database mounted.
            SQL> select name from v$datafile;
            NAME
            -----------------------------------------------------------
            /opt/oracle/oradata/conner/system01.dbf
            /opt/oracle/oradata/conner/undotbs01.dbf
            /opt/oracle/oradata/conner/users01.dbf
            /opt/oracle/test.dbf
            

6.修改文件位置
SQL> alter database rename file '/opt/oracle/test.dbf' to '/opt/oracle/oradata/conner/test.dbf';
            Database altered.
            SQL> alter database open;
            Database altered.
            SQL> select name from v$datafile;
            NAME
            ----------------------------------------------------------------
            /opt/oracle/oradata/conner/system01.dbf
            /opt/oracle/oradata/conner/undotbs01.dbf
            /opt/oracle/oradata/conner/users01.dbf
            /opt/oracle/oradata/conner/test.dbf
            SQL>
            


留言 (4)

我的一点看法.
不论是否在归档模式,都可以通过离线表空间实现数据文件的位置改变:
1.alter tablespace xxx offline;
2.!cp /opt/oracle/test.dbf /opt/oracle/oradata/conner/test.dbf
3.alter tablespace xxx rename datafile '/opt/oracle/test.dbf' to '/opt/oracle/oradata/conner/test.dbf';
4.alter tablespace xxx online;

Posted by: wf at November 12, 2005 6:30 PM

是的,有多种方法可以达到同样的目的,最好的方法其实是设置表空间只读,然后移动,在在线系统中,可以减少对于运行系统的影响.

Posted by: eygle at November 12, 2005 8:38 PM

eygle,您好!非常感谢您办了这么好的一个网站,我在您的网站跟您学到了很多实用的知识.
您说,只读表空间可以移动其数据文件,可是我尝试并没有成功,为什么呢?

SQL> create tablespace test
2 datafile 'c:\oracle\test.dbf' size 10m autoextend
3 next 512k maxsize 20m;
next 512k maxsize 20m
*
ERROR 位于第 3 行:
ORA-02491: AUTOEXTEND 子句中缺少要求的关键字 ON 或 OFF


SQL> l3
3* next 512k maxsize 20m
SQL> c /next/on next
3* on next 512k maxsize 20m
SQL> run
1 create tablespace test
2 datafile 'c:\oracle\test.dbf' size 10m autoextend
3* on next 512k maxsize 20m

表空间已创建。

SQL> alter tablespace test read only;

表空间已更改。

--在这里复制数据文件到了其他位置.

SQL> alter tablespace test
2 rename datafile 'c:\oracle\test.dbf' to 'c:\oracle\oradata\heer\test.dbf';
alter tablespace test
*
ERROR 位于第 1 行:
ORA-01525: 重命名数据文件时出错
ORA-01121: 无法重命名数据库文件 11 - 文件在使用中或在恢复中
ORA-01110: 数据文件 11: 'C:\ORACLE\TEST.DBF'


SQL> l
1 alter tablespace test
2* rename datafile 'c:\oracle\test.dbf' to 'c:\oracle\oradata\heer\test.dbf'
SQL> run
1 alter tablespace test
2* rename datafile 'c:\oracle\test.dbf' to 'c:\oracle\oradata\heer\test.dbf'
alter tablespace test
*
ERROR 位于第 1 行:
ORA-01525: 重命名数据文件时出错
ORA-01121: 无法重命名数据库文件 11 - 文件在使用中或在恢复中
ORA-01110: 数据文件 11: 'C:\ORACLE\TEST.DBF'


SQL> alter tablespace test read write;

表空间已更改。

SQL>

Posted by: wf at November 12, 2005 10:35 PM

offline都是不可避免的,我补充了一篇Blog:

http://www.eygle.com/archives/2005/11/oracle_howto_move_datafile_readonly.html

posted on 2008-04-24 09:44  一江水  阅读(821)  评论(0编辑  收藏  举报