您的位置:首页 > 数据库

数据库OPEN状态下迁移数据文件的几种方法

2013-01-17 20:17 471 查看
有时可能会遇到磁盘空间满了,要求把部分表空间或者是数据文件迁移到位置的情况,下次介绍了3种方法来移动数据文件,移动表空间方法也是一样的。

1,使用操作系统的MV方式。

2,使用BACKUP AS COPY方式。

3,使用RESTORE方式

下面是详细的每种方式的步骤:

1,使用操作系统的MV方式

1.1 查看数据文件的系统
SQL> @files.sql
Type     Tablspace       Filename                                                                   File Size Status     Sequence Arch
-------- --------------- ----------------------------------------------------------------- ------------------ ---------- -------- ----
Data     TEST1           D:\APP\LUOPING\ORADATA\WINORCL\TEST1.DBF                                  10,485,760 Available         0

1.2 把数据文件OFFLINE
SQL> alter tablespace test1 offline;

表空间已更改。

SQL> host mv D:\APP\LUOPING\ORADATA\WINORCL\TEST1.DBF D:\APP\LUOPING\ORADATA\WINORCL\TEST2.DBF
1.3 修改数据文件的路径
SQL> alter database rename file 'D:\APP\LUOPING\ORADATA\WINORCL\TEST1.DBF' to 'D:\APP\LUOPING\ORADATA\WINORCL\TEST2.DBF';

数据库已更改。
1.4 online文件文件
SQL> alter tablespace test1 online;

表空间已更改。
1.5 查看修改后的路径
SQL> @files.sql
Type     Tablspace       Filename                                                                   File Size Status     Sequence Arch
-------- --------------- ----------------------------------------------------------------- ------------------ ---------- -------- ----
Data     TEST1           D:\APP\LUOPING\ORADATA\WINORCL\TEST2.DBF                                  10,485,760 Available         0

说明已经成功完成修改

2,使用BACKUP AS COPY的方式

2.1 COPY数据文件到指定位置
D:\app\luoping\oradata\winorcl>rman target /

恢复管理器: Release 11.2.0.1.0 - Production on 星期四 1月 17 19:43:11 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: WINORCL (DBID=1952338960)

RMAN> backup as copy datafile 6 format='D:\APP\LUOPING\ORADATA\WINORCL\TEST3.DBF';

启动 backup 于 17-1月 -13
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=9 设备类型=DISK
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00006 名称=D:\APP\LUOPING\ORADATA\WINORCL\TEST2.DBF
输出文件名=D:\APP\LUOPING\ORADATA\WINORCL\TEST3.DBF 标记=TAG20130117T194403 RECID=1 STAMP=8049734
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
完成 backup 于 17-1月 -13

启动 Control File and SPFILE Autobackup 于 17-1月 -13
段 handle=E:\INSTALL\TEST\C-1952338960-20130117-01 comment=NONE
完成 Control File and SPFILE Autobackup 于 17-1月 -13
2.2 OFFLINE数据文件
RMAN> sql 'alter database datafile 6 offline';

sql 语句: alter database datafile 6 offline
2.3 切换到COPY的位置
RMAN> switch datafile 6 to copy;

数据文件 6 已切换成数据文件副本 "D:\APP\LUOPING\ORADATA\WINORCL\TEST3.DBF"
2.4 RECOVER数据文件
RMAN> recover datafile 6;

启动 recover 于 17-1月 -13
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:00

完成 recover 于 17-1月 -13
2.5 ONLINE数据文件
RMAN>  sql 'alter database datafile 6 online';

sql 语句: alter database datafile 6 online
2.6 查看修改后的路径
SQL> @files.sql
Type     Tablspace       Filename                                                                   File Size Status     Sequence Ar
-------- --------------- ----------------------------------------------------------------- ------------------ ---------- -------- --
Data     TEST1           D:\APP\LUOPING\ORADATA\WINORCL\TEST3.DBF                                  10,485,760 Available         0
已经成功修改

3.使用restore的方式。

3.1 备份数据文件
RMAN> backup datafile 6 format 'E:\install\test\6';

启动 backup 于 17-1月 -13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00006 名称=D:\APP\LUOPING\ORADATA\WINORCL\TEST3.DBF
通道 ORA_DISK_1: 正在启动段 1 于 17-1月 -13
通道 ORA_DISK_1: 已完成段 1 于 17-1月 -13
段句柄=E:\INSTALL\TEST\6 标记=TAG20130117T194942 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 17-1月 -13

启动 Control File and SPFILE Autobackup 于 17-1月 -13
段 handle=E:\INSTALL\TEST\C-1952338960-20130117-02 comment=NONE
完成 Control File and SPFILE Autobackup 于 17-1月 -13
3.2 offline数据文件
RMAN> sql 'alter database datafile 6 offline';

sql 语句: alter database datafile 6 offline
3.3 还原数据文件到新的位置
RMAN> run
2> {allocate channel t1 type disk;
3> set newname for datafile 6 to 'D:\APP\LUOPING\ORADATA\WINORCL\TEST4.DBF';
4> restore datafile 6;
5> switch datafile 6;
6> recover datafile 6;
7> sql 'alter database datafile 6 online';
8> }

释放的通道: ORA_DISK_1
分配的通道: t1
通道 t1: SID=9 设备类型=DISK

正在执行命令: SET NEWNAME

启动 restore 于 17-1月 -13

通道 t1: 正在开始还原数据文件备份集
通道 t1: 正在指定从备份集还原的数据文件
通道 t1: 将数据文件 00006 还原到 D:\APP\LUOPING\ORADATA\WINORCL\TEST4.DBF
通道 t1: 正在读取备份片段 E:\INSTALL\TEST\6
通道 t1: 段句柄 = E:\INSTALL\TEST\6 标记 = TAG20130117T194942
通道 t1: 已还原备份片段 1
通道 t1: 还原完成, 用时: 00:00:01
完成 restore 于 17-1月 -13

数据文件 6 已转换成数据文件副本
输入数据文件副本 RECID=4 STAMP=804973935 文件名=D:\APP\LUOPING\ORADATA\WINORCL\TEST4.DBF

启动 recover 于 17-1月 -13

正在开始介质的恢复
介质恢复完成, 用时: 00:00:00

完成 recover 于 17-1月 -13

sql 语句: alter database datafile 6 online
释放的通道: t1

3.4 查看修改的路径
SQL> @files.sql
Type     Tablspace       Filename                                                                   File Size Status     Sequence Arch
-------- --------------- ----------------------------------------------------------------- ------------------ ---------- -------- ----
Data     TEST1           D:\APP\LUOPING\ORADATA\WINORCL\TEST4.DBF                                  10,485,760 Available         0

已经成功完成修改

虽然上面三种方法都可以,但是我们应该选择那一种方法呢?这个要根据当时的环境来看,

个人觉得第二个方法最好,因为在COPY过程中不需要把数据文件OFFLINE,这样不会影响业务,只有在switch过程中才需要把datafile offline.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息