8、使用RMAN执行oracle ASM数据迁移
Oracle ASM数据迁移概述
Oracle ASM数据迁移的目的
Oracle ASM的替代品包括文件系统、裸设备和SAN配置。和这些替代品相比,Oracle ASM有一些超越的优点,包括性能优化、冗余包含和负载均衡。不再需要第三方的逻辑卷管理器,因为oracle ASM为你管理磁盘。Oracle RAC数据库受益于oracle ASM,因为它提供现成的共享存储。在ASM和非ASM中迁移。
本地操作系统命令例如linux的cp或者windows的copy,不能读写oracle ASM存储中的文件。RMAN可以读写oracle ASM文件,可以使用rman来拷贝数据文件到oracle ASM存储里或者外、或者在oracle ASM磁盘组之间。如果必须存储备份到用户管理的磁盘上,这项技术非常有用。
Oracle ASM数据迁移的基础概念
迁移需要一个rman数据库备份。迁移快速恢复区到oracle ASM存储。迁移一个数据库从oracle ASM到非ASM,步骤差不多。
使用RMAN数据迁移到oracle ASM的基本步骤
从本地存储迁移整个数据库和快速恢复区到oracle ASM,执行如下步骤:
1) 备份数据库和服务器参数文件,并且禁用oracle 闪回数据库功能。
数据库闪回和传统的介质恢复不一样,因为它不涉及物理文件的还原,而是使用保存的改变数据块镜像来还原当前的数据文件到过去的状态。这个特性使用闪回日志和归档日志文件。
2) 还原文件到oracle ASM,恢复数据库,可选地迁移快速恢复区到oracle ASM
使用rman迁移数据库到oracle ASM准备工作
假设+DATA存放数据库,+FRA存放快速恢复区
1)如果数据库参数compatible设置小于11.0.0,那么将任何只读可传输的表空间置为读写模式(只读可传输表空间不能被迁移,因为rman不能备份它们)
2)如果数据库是物理standby数据库,如果恢复管理是开启的,那么停止恢复管理。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
(保持该终端窗口打开状态)
3) 拷贝服务器参数文件或初始化参数到临时目录
$ cp spfileMYDB.ora orig_spfileMYDB.ora
4) 开启一个新的终端窗口,打开rman会话,连接到需要被迁移的目标数据库。可选的,连接到恢复目录 recovery catalog
5) 备份数据库文件到oracle ASM磁盘组
RUN
{
ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;
BACKUP AS COPY
INCREMENTAL LEVEL 0
DATABASE
FORMAT '+DATA'
TAG 'ORA_ASM_MIGRATION';
}
说明:+DATA为存放数据库的磁盘组名称。
6) 如果数据库的快改变跟踪被启用了,那么可选地可以做一个1级别的增量备份,稍后用于数据库拷贝恢复。
RUN
{
ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 1
FOR RECOVER OF COPY WITH TAG 'ORA_ASM_MIGRATION'
DATABASE;
}
7) 如果数据库是归档模式,如果数据库是打开的,那么归档当前在线日志
RMAN> sql “alter system archive log current”;
8)如果数据库实例当前使用服务器参数文件,那么备份下
RMAN>backup as backupset spfile;
9)如果块改变跟踪被启用,那么禁用它
RMAN> SQL "ALTER DATABASE DISABLE BLOCK CHANGE TRACKING";
10)如果闪回数据库被启用,那么禁用它然后删除任何保证还原点
(如果不准备迁移快速恢复区,那么跳过此步骤)。
RMAN> SQL "ALTER DATABASE FLASHBACK OFF";
RMAN> SQL "DROP RESTORE POINT Q106";
11)一致性关闭数据库
RMAN>shutdown immediate;
使用rman迁移数据库到oracle ASM
最小化数据库down机时间。步骤会略有不同取决于是否迁移主库还是备库。如果不迁移快速恢复区到oracle ASM,那么必须修改一些步骤,有提示。
1)按照之前的准备步骤进行
2)在oracle ASM存储中,还原或创建新的服务器参数文件
此步骤取决于当前数据库是否使用服务器参数文件。
如果数据库使用服务器参数文件,那么使用如下命令还原它到oracle ASM磁盘组:
RMAN> STARTUP MOUNT;
RMAN> RESTORE SPFILE TO '+DATA/spfilesid.ora';
RMAN> SHUTDOWN IMMEDIATE;
如果数据库没有使用服务器参数文件,那么在oracle ASM中创建一个。在sqlplus中使用create spfile命令:
SQL> CREATE SPFILE='+DATA/spfilesid.ora' FROM PFILE='?/dbs/initsid.ora';
3)设置oracle管理文件初始化参数到oracle ASM目录
注意:如果不迁移快速恢复区,那么不要修改这两个参数的设置db_recovery_file_dest和db_recovery_file_dest_size。但是必须设置参数db_create_online_log_dest_n到oracle ASM目录为了迁移在线重做日志。
设置db_create_file_dest和可选的db_create_online_log_dest_n初始化参数到oracle ASM磁盘组。如果使用快速恢复区,那么修改快速恢复区目录到oracle ASM磁盘组,同时修改快速恢复区大小。
SQL> STARTUP FORCE NOMOUNT;
SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='+DATA' SID='*';
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=100G SID='*';
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+FRA' SID='*';
4)设置初始化参数control_files为oracle ASM目录
如果迁移快速恢复区,那么+DATA和+FRA
SQL> STARTUP FORCE NOMOUNT;
SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA','+FRA' SCOPE=SPFILE SID='*';
如果不迁移快速恢复区,那么+DATA和+DATA
SQL> STARTUP FORCE NOMOUNT;
SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA','+DATA' SCOPE=SPFILE SID='*';
5)迁移控制文件到oracle ASM,并且挂载控制文件
RMAN> STARTUP FORCE NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM 'original_cf_name';
RMAN> ALTER DATABASE MOUNT;
6)迁移数据文件到oracle ASM
Switch切换重命名所有数据文件到oracle ASM磁盘组的文件。更改控制文件中的相关信息。
SWITCH DATABASE TO COPY;
RUN
{
ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;
RECOVER DATABASE;
}
7)如果数据库使用块改变跟踪或者闪回数据库功能,那么启用这些功能
注意:如果你没有迁移回恢复区,那么你没有启用闪回数据库,除非你以前禁用了它。
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA';
SQL> ALTER DATABASE FLASHBACK ON;
8)将数据库置于普通操作模式
普通操作模式取决于数据库是否是主库还是备库
如果是主库,SQL>alter database open;
如果是备库,那么恢复管理恢复模式:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;
9)在oracle ASM中删除临时文件,然后重新创建
SQL> ALTER DATABASE TEMPFILE 'tempfile_name' DROP;
SQL> ALTER TABLESPACE temp_tbs_name ADD TEMPFILE;
10)迁移在线重做日志文件
如果是主库,那么在oracle ASM中添加新的日志组成员,然后删掉旧的成员。还可以使用下面的脚本来迁移在线重做日志组到oracle ASM磁盘组。
Example 8–1 Migrating the online redo logs
SET SERVEROUTPUT ON;
DECLARE
CURSOR rlc IS
SELECT GROUP# GRP, THREAD# THR, BYTES, 'NO' SRL
FROM V$LOG
UNION
SELECT GROUP# GRP, THREAD# THR, BYTES, 'YES' SRL
FROM V$STANDBY_LOG
ORDER BY 1;
stmt VARCHAR2(2048);
BEGIN
FOR rlcRec IN rlc LOOP
IF (rlcRec.srl = 'YES') THEN
stmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' ||
rlcRec.thr || ' SIZE ' || rlcRec.bytes;
EXECUTE IMMEDIATE stmt;
stmt := 'ALTER DATABASE DROP STANDBY LOGFILE GROUP ' || rlcRec.grp;
EXECUTE IMMEDIATE stmt;
ELSE
stmt := 'ALTER DATABASE ADD LOGFILE THREAD ' ||
rlcRec.thr || ' SIZE ' || rlcRec.bytes;
EXECUTE IMMEDIATE stmt;
BEGIN
stmt := 'ALTER DATABASE DROP LOGFILE GROUP ' || rlcRec.grp;
DBMS_OUTPUT.PUT_LINE(stmt);
EXECUTE IMMEDIATE stmt;
EXCEPTION
WHEN OTHERS THEN
EXECUTE IMMEDIATE 'ALTER SYSTEM SWITCH LOGFILE';
EXECUTE IMMEDIATE 'ALTER SYSTEM CHECKPOINT GLOBAL';
EXECUTE IMMEDIATE stmt;
END;
END IF;
END LOOP;
END;
/
11)可选地,迁移旧的快速恢复区中的备份和拷贝到oracle ASM:
如果快速恢复区中存在外来归档日志,那么不能迁移到oracle ASM。在rman中运行如下命令:
RMAN> DELETE REMOTE ARCHIVELOG ALL;
备份归档重做日志文件,备份集,数据文件拷贝到oracle ASM。
RUN
{
ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;
ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;
BACKUP AS COPY ARCHIVELOG ALL DELETE INPUT;
BACKUP BACKUPSET ALL DELETE INPUT;
BACKUP AS COPY DATAFILECOPY ALL DELETE INPUT;
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21256317/viewspace-1063388/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21256317/viewspace-1063388/