Oracle HowTo:在非归档模式下如何更改数据文件位置
如果数据库处于非归档模式下,可以通过如下步骤更改文件路径:
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 |
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