eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 如何启动或关闭数据库的归档(ARCHIVELOG)模式 | Blog首页 | Dataguard配置Step by Step »

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

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


历史上的今天...
    >> 2010-10-15文章:
    >> 2008-10-15文章:
    >> 2006-10-15文章:

By eygle on 2004-10-15 16:04 | Comments (4) | HowTo | 65 |

4 Comments

我的一点看法.
不论是否在归档模式,都可以通过离线表空间实现数据文件的位置改变:
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;

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

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>

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

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


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com