我们用RMAN实现这一功能。在转移数据库以前,先设若干跟文件存储位置相关的参数。
C:¥oracle¥product¥10.2.0¥db_1¥database>set oracle_sid=orcl
C:¥oracle¥product¥10.2.0¥db_1¥database>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 28 10:38:52 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect/ as sysdba
已连接。
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
--------------------- --------- ------------------------------
db_create_file_dest string C:¥oracle¥product¥10.2.0¥orada
ta
SQL> alter system set db_create_file_dest='+DGROUP1' scope=spfile;
系统已更改。
SQL> alter system set db_recovery_file_dest='+DGROUP1' scope=spfile;
系统已更改。
SQL> alter system set db_recovery_file_dest_size=3000M scope=spfile;
系统已更改。
SQL> alter system reset control_files scope=spfile sid='*';
系统已更改。
ALTER SYSTEM RESET 命令用来在SPFILE中删除(unset)参数,此处用来删除control_file参数,因为移到ASM上后需要重建control file。
将数据库重启到nomount状态。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 272632708 bytes
Database Buffers 331350016 bytes
Redo Buffers 7135232 bytes
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
启动RMAN。
C:¥oracle¥product¥10.2.0¥db_1¥database>rman target /
恢复管理器: Release 10.2.0.1.0 - Production on 星期四 12月 28 10:42:58 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: orcl (未装载)
RMAN> restore controlfile from
'C:¥oracle¥product¥10.2.0¥oradata¥ORCL¥CONTROLFILE¥O1_MF_2OT4KXWB_.CTL';
启动 restore 于 28-12月-06
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
通道 ORA_DISK_1: 已复制控制文件副本
输出文件名=+DGROUP1/orcl/controlfile/backup.256.610368623
输出文件名=+DGROUP1/orcl/controlfile/backup.257.610368627
完成 restore 于 28-12月-06
由于参数CREATE_FILE_DEST和RECOVERY_FILE_DEST都进行了设置,所以创建了2份controlfile。
转移数据库时使用命令 BACKUP AS COPY DATABASE...
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
RMAN> backup as copy database format '+DGROUP1';
启动 backup 于 28-12月-06
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=153 devtype=DISK
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00001 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_SYSTEM_2OT4J2H4_.DBF
输出文件名 = +DGROUP1/orcl/datafile/system.258.610368679 标记 = TAG20061228T105117 recid = 1 时间戳 = 610368724
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:56
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00003 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_SYSAUX_2OT4J2J3_.DBF
输出文件名 = +DGROUP1/orcl/datafile/sysaux.259.610368733 标记 = TAG20061228T105117 recid = 2 时间戳 = 610368759
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00002 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_UNDOTBS1_2OT4J2M1_.DBF
输出文件名 = +DGROUP1/orcl/datafile/undotbs1.260.610368769 标记 = TAG20061228T105117 recid = 3 时间戳 = 610368771
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:04
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00004 name=C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_USERS_2OT4J2M1_.DBF
输出文件名 = +DGROUP1/orcl/datafile/users.261.610368773 标记 = TAG20061228T105117 recid = 4 时间戳 = 610368773
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
通道 ORA_DISK_1: 启动数据文件副本
复制当前控制文件
输出文件名 = +DGROUP1/orcl/controlfile/backup.262.610368775 标记 = TAG20061228T105117 recid = 5 时间戳 = 610368778
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 28-12月-06
通道 ORA_DISK_1: 已完成段 1 于 28-12月-06
段句柄=+DGROUP1/orcl/backupset/2006_12_28/nnsnf0_tag20061228t105117_0.263.610368779 标记=TAG20061228T105117 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 28-12月-06
RMAN> switch database to copy;
数据文件 1 已切换成数据文件副本 "+DGROUP1/orcl/datafile/system.258.610368679"
数据文件 2 已切换成数据文件副本 "+DGROUP1/orcl/datafile/undotbs1.260.610368769"
数据文件 3 已切换成数据文件副本 "+DGROUP1/orcl/datafile/sysaux.259.610368733"
数据文件 4 已切换成数据文件副本 "+DGROUP1/orcl/datafile/users.261.610368773"
RMAN> alter database open;
数据库已打开
RMAN> exit
恢复管理器完成。
数据库转移完成,用SQL*PLUS进入数据库检查状态。
C:¥oracle¥product¥10.2.0¥db_1¥database>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 28 10:56:48 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect / as sysdba
已连接。
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
orcl OPEN
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DGROUP1/orcl/controlfile/backup.256.610368623
+DGROUP1/orcl/controlfile/backup.257.610368627
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DGROUP1/orcl/datafile/system.258.610368679
+DGROUP1/orcl/datafile/undotbs1.260.610368769
+DGROUP1/orcl/datafile/sysaux.259.610368733
+DGROUP1/orcl/datafile/users.261.610368773
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥ONLINELOG¥O1_MF_3_2OT4L52X_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥FLASH_RECOVERY_AREA¥ORCL¥ONLINELOG¥O1_MF_3_2OT4L63F_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥ONLINELOG¥O1_MF_2_2OT4L2VC_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥FLASH_RECOVERY_AREA¥ORCL¥ONLINELOG¥O1_MF_2_2OT4L43X_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥ONLINELOG¥O1_MF_1_2OT4L0WS_.LOG
C:¥ORACLE¥PRODUCT¥10.2.0¥FLASH_RECOVERY_AREA¥ORCL¥ONLINELOG¥O1_MF_1_2OT4L1X9_.LOG
已选择6行。
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_TEMP_2OT4LL2X_.TMP
可以看到controlfile和datafile都已经建在ASM磁盘上了,但是logfile和tempfile还在原先位置上。
转移tempfile。
SQL> alter tablespace TEMP add tempfile;
表空间已更改。
SQL> alter database tempfile 'C:¥ORACLE¥PRODUCT¥10.2.0¥ORADATA¥ORCL¥DATAFILE¥O1_MF_TEMP_2OT4LL2X_.TMP' drop;
数据库已更改。
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
+DGROUP1/orcl/tempfile/temp.264.610369327
转移logfile,先增加3个组。
SQL> alter database add logfile size 50m;
数据库已更改。
SQL> alter database add logfile size 50m;
数据库已更改。
SQL> alter database add logfile size 50m;
数据库已更改。
SQL> select group#,status from v$log order by group#;
GROUP# STATUS
---------- --------------------------------
1 CURRENT
2 INACTIVE
3 INACTIVE
4 UNUSED
5 UNUSED
6 UNUSED
已选择6行。
SQL> alter database drop logfile group 2;
数据库已更改。
SQL> alter database drop logfile group 3;
数据库已更改。
删除logfile group 1的时候会有些麻烦,因为你执行 SQL> alter system switch logfile 以后,GROUP 1的状态并不是INACTIVE,而是ACTIVE。得执行多次该命令,才能使GROUP 1处于INACTIVE状态。当然重启数据库也是个办法。
当GROUP 1处于INACTIVE状态时,我们就可以DROP GROUP 1。
SQL> select group#,status from v$log order by group#;
GROUP# STATUS
---------- --------------------------------
1 INACTIVE
4 INACTIVE
5 CURRENT
6 INACTIVE
SQL> alter database drop logfile group 1;
数据库已更改。
SQL> select group#,status from v$log order by group#;
GROUP# STATUS
---------- --------------------------------
4 INACTIVE
5 CURRENT
6 INACTIVE
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------
+DGROUP1/orcl/onlinelog/group_4.265.610369507
+DGROUP1/orcl/onlinelog/group_4.266.610369511
+DGROUP1/orcl/onlinelog/group_5.267.610369523
+DGROUP1/orcl/onlinelog/group_5.268.610369527
+DGROUP1/orcl/onlinelog/group_6.269.610369537
+DGROUP1/orcl/onlinelog/group_6.270.610369541
已选择6行。
这样我们把整个数据库都移到了ASM上。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/207/viewspace-896065/ ,如需转载,请注明出处,否则将追究法律责任。