在Oracle 10g数据库中,如果需要将ASM实例中一个磁盘组的数据文件转移到另一个磁盘组上。可以采用以前传统的文件系统的方式迁移,也可以采用表空间级别拷贝的方式迁移。
例如有一个库sdb,users表空间的数据文件都在vg1磁盘组上,现在要移动vg2磁盘组上,这样操作一下就能完成这个任务。
backup as copy tablespace users format '+vg2';
switch tablespace users to copy;
这两个命令需要在rman下操作,因为只有rman下才能管理ASM磁盘组中的文件。
测试环境为oracle 10.2.0.4 for linux x86,以下为测试过程。
第一步,检查环境,确认users表空间,并将数据库重启到mounted状态。
[oracle@db-172-17-2-8 bdump]$ export ORACLE_SID=sdb
[oracle@db-172-17-2-8 bdump]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Feb 19 16:47:13 2013
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$tablespace
2 ;
NAME
------------------------------
USERS
UNDOTBS1
SYSTEM
SYSAUX
OFCARDQUERY
TEMP
6 rows selected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 2084296 bytes
Variable Size 385876536 bytes
Database Buffers 1207959552 bytes
Redo Buffers 14692352 bytes
Database mounted.
第二步,使用rman工具copy表空间,再switch。这个switch操作完成了数据字典的修改。
[oracle@db-172-17-2-8 bdump]$ rman target /
Recovery Manager: Release 10.2.0.4.0 - Production on Tue Feb 19 16:48:20 2013
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: SDB (DBID=2245827732, not open)
RMAN> backup as copy tablespace users format '+vg2';
Starting backup at 19-FEB-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=151 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00005 name=+VG1/sdb/users02.dbf
output filename=+VG2/sdb/datafile/users.285.807814137 tag=TAG20130219T164857 recid=17 stamp=807814139
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=+VG1/sdb/users01.dbf
output filename=+VG2/sdb/datafile/users.284.807814141 tag=TAG20130219T164857 recid=18 stamp=807814141
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 19-FEB-13
RMAN> switch tablespace users to copy;
datafile 4 switched to datafile copy "+VG2/sdb/datafile/users.284.807814141"
datafile 5 switched to datafile copy "+VG2/sdb/datafile/users.285.807814137"
RMAN> recover database;
Starting recover at 19-FEB-13
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 19-FEB-13
第三步,open数据库,检查一下。
[oracle@db-172-17-2-8 bdump]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Feb 19 16:49:51 2013
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter database open;
Database altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+VG1/sdb/system01.dbf
+VG1/sdb/undotbs01.dbf
+VG1/sdb/sysaux01.dbf
+VG2/sdb/datafile/users.284.807814141
+VG2/sdb/datafile/users.285.807814137
+VG1/sdb/ofcardquery01.dbf
6 rows selected.
SQL>
从结果中,我们可以看到users表空间的两个数据文件已经移动vg2中了。再到ASM实例下rm掉原来的users表空间所属的文件,就最终完成了这个迁移工作。