利用RMAN进行Oracle数据库的异构迁移(Windows to Linux)

1、 名词解释
RMAN:RMAN(Recovery Manager)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。

冷备:数据库关闭状态时进行备份

CRS:Cluster Ready Service(Oracle集群就绪服务)

RAC:RAC是real application clusters的缩写,译为“实时应用集群”, 是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。

2 、 方案说明
为了保障系统能横向扩展,使用RAC架构,操作系统为Linux系统。由此需要Windows 向 Linux ASM RAC 迁移的方案。
方案主要分成4大块,分别是源端数据备份、目标端还原、还原后的调整、RAC相关参数调整,以下是对每个步骤的时间预估。预估时间前每个步骤都做了测试,业务数据约1.5T。

3、 源端备份
3.1 一致性关闭数据库
Oracle 在Windows下的redo 不支持在Linux进行还原,所以备份必须是冷备。
命令:

sqlplus / as sysdba
shutdown immediate
startup mount

3.2 创建pfile
生成pfile文件
命令:

create pfile='c:\rmanbackup\pfile.ora' from spfile;

3.3 创建备份
此处使用RMAN对数据库进行备份,以下的备份命令会进行压缩,是否使用压缩需要考虑传输速度快还是CPU压缩数据快。如果源端Windows服务器磁盘IO/CPU性能不怎么样,建议不要压缩。
命令:

rman target /

run{
allocate channel c1 type disk maxpiecesize=30G;
allocate channel c2 type disk maxpiecesize=30G;
allocate channel c3 type disk maxpiecesize=30G;
allocate channel c4 type disk maxpiecesize=30G;
allocate channel c5 type disk maxpiecesize=30G;
allocate channel c6 type disk maxpiecesize=30G;
allocate channel c7 type disk maxpiecesize=30G;
allocate channel c8 type disk maxpiecesize=30G;
allocate channel c9 type disk maxpiecesize=30G;
allocate channel c10 type disk maxpiecesize=30G;
backup as compressed backupset database tag 'dbfull' format 'c:\rmanbackup\full_%U_%T';
backup current controlfile format 'c:\rmanbackup\ctl_%U_%T';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
}

3.4 修改pfile文件
将一系列目录改为linux上的对应目录,注意sga和PGA的修改,控制文件位置做好调整,调整后将RMAN备份文件、pfile文件传到linux上。
修改:

#*.audit_file_dest='C:\app\Administrator\admin\ORCL\adump'
*.audit_file_dest= "/u01/app/oracle/admin/ORCL/adump"
*.audit_trail='db'
*.compatible='11.2.0.4.0'
#*.control_files='C:\app\Administrator\oradata\ORCL\control01.ctl','C:\app\Administrator\fast_recovery_area\ORCL\control02.ctl'
*.control_files='+DATA/ORCL/controlfile/control01.ctl','+DATA/ORCL/controlfile/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ORCL'
#*.db_recovery_file_dest='C:\app\Administrator\fast_recovery_area'
*.db_recovery_file_dest='+LOG'
#*.db_recovery_file_dest_size=4385144832
*.db_recovery_file_dest_size=512G
#*.diagnostic_dest='C:\app\Administrator'
*.diagnostic_dest="/u01/app/oracle"
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.pga_aggregate_target=2G
*.sga_max_size=3G
*.sga_target=3G

4、 目标端还原
4.1 创建路径
目标环境创建pfile中几个参数的路径:包括audit_file_dest、control_files、数据文件路径。其中audit_file_dest需要在两个节点中分别创建。
命令:

su - oracle
mkdir -p /u01/app/oracle/admin/ORCL/adump
exit
su - grid
asmcmd <<eof
mkdir +DATA/ORCL
mkdir +DATA/ORCL/controlfile
mkdir +DATA/ORCL/datafile
exit
eof
exit
chmod 777 /rmanbackup/ -R

4.2 nomount启动数据库
在节点1上启动数据库到nomount状态,如报错,根据报错排查对应错误。
命令:

su - oracle
export ORACLE_SID=ORCL1
sqlplus / as sysdba <<eof
startup nomount pfile='/rmanbackup/pfile.ora';
exit
eof

4.3 catalog 备份文件
备份文件存放的位置是记录在控制文件中的,前面做了控制文件的还原,能查询到所有的备份信息。但是记录的备份位置都是Windows的路径,此处主要做了备份的校验删除失效的备份信息,加载传输到Linux系统上的备份文件信息。其中/rmanbackup是本次演示备份文件存放的位置,根据实际情况做好调整。
命令:

rman target / <<eof
restore controlfile from '/rmanbackup/CONTROL_04UHB8EN_1_1';
sql 'alter database mount';
crosscheck backup;
delete expired backup;
yes
catalog start with '/rmanbackup/FULL_';
yes
eof

4.4 还原数据库
以下RMAN命令,会将备份还原出一个新库,set newname for database to '+DATA/ORCL/datafile/dbf_%U’指的是将数据文件指定到一个新的目录下。这里存在一个问题,数据文件名称就不再和以前一致了。
命令:

rman target / <<eof
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
allocate channel c7 type disk;
allocate channel c8 type disk;
allocate channel c9 type disk;
allocate channel c10 type disk;
set newname for database to '+DATA/ORCL/datafile/dbf_%U';
restore database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
}
switch database to copy;
exit
eof

5、 目标端还原后的调整
5.1 创建spfile
前面启动时直接指定了pfile文件,为了方便参数调整,通过pfile创建一个spfile,保存到ASM磁盘组中,再将默认pfile的内容修改为spfile的位置。
注意,如果实例名与本方案不一样,需要注意调整实例名、路径、文件名。
命令:

sqlplus / as sysdba <<eof
alter database open resetlogs upgrade;
create spfile='+DATA/ORCL/spfileORCL.ora' from pfile='/rmanbackup/pfile.ora';
! echo "spfile=+DATA/ORCL/spfileORCL.ora" > $ORACLE_HOME/dbs/initORCL1.ora
eo

5.2 创建redo日志组
RAC数据库在启用其他节点前,需要为这个节点添加redo日志。日志的存放位置,可以根据需要做调整,为了保证节点奔溃后事物能继续,需要将redo文件存放在ASM磁盘组中。
命令:

sqlplus / as sysdba <<eof
alter database add logfile thread 1 group 11 ('+LOG') size 1024M;
alter database add logfile thread 1 group 12 ('+LOG') size 1024M;
alter database add logfile thread 1 group 13 ('+LOG') size 1024M;
alter database add logfile thread 1 group 14 ('+LOG') size 1024M;
alter database add logfile thread 1 group 15 ('+LOG') size 1024M;
alter database add logfile thread 1 group 16 ('+LOG') size 1024M;
alter database add logfile thread 1 group 17 ('+LOG') size 1024M;
alter database add logfile thread 1 group 18 ('+LOG') size 1024M;
alter database add logfile thread 2 group 21 ('+LOG') size 1024M;
alter database add logfile thread 2 group 22 ('+LOG') size 1024M;
alter database add logfile thread 2 group 23 ('+LOG') size 1024M;
alter database add logfile thread 2 group 24 ('+LOG') size 1024M;
alter database add logfile thread 2 group 25 ('+LOG') size 1024M;
alter database add logfile thread 2 group 26 ('+LOG') size 1024M;
alter database add logfile thread 2 group 27 ('+LOG') size 1024M;
alter database add logfile thread 2 group 28 ('+LOG') size 1024M;
eof

5.3 查询自动生成的redolog
查询数据库根据原Windows环境自动创建的redolog,并记住group#号。这部分日志会自动生成在$ORACLE_HOME/dbs目录下,需要删除掉。
命令:

$sqlplus / as sysdba
set lines 300
set pages 300
col member for a60

5.4 删除自动生成的redolog
前面查的是三组,这里就切3次日志。如果遇到无法删除的,再次切换日志并触发检查点操作。
命令:

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system checkpoint;
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;

5.5 创建UNDO2
源库是单实例数据库时,通常只有1个undo表空间,而RAC中每个节点都需要1个UNDO表空间,所以双节点的RAC需要再加多一个UNDO表空间。
命令:

create undo tablespace UNDOTBS2 datafile '+DATA/orcl/datafile/undotbs02.dbf' size 100M AUTOEXTEND ON next 200M;

5.6 重建TEMP表空间
还原后,所有的temp表空间都需要重新创建,通过查询就能发现,其对应的文件路径还是Windows环境下的路径。
命令:

select file#, ts# ,name ,status from v$tempfile;

根据查询,确定目前有多少个临时表空间,这里只有一个。将其删除,重建。数据库的默认临时表空间是不然删除的。所以,如果只有一个表空间,就需要一个临时顶替的临时表空间。
命令:
#创建新的tempfile:

CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '+data/orcl/datafile/TEMP2.DBF' SIZE 200m AUTOEXTEND ON ;

#将新的temp表空间设置为默认表空间:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

#删除原默认temp 表空间:

drop tablespace temp;

#重新创建原temp表空间:

CREATE TEMPORARY TABLESPACE temp TEMPFILE '+data/orcl/datafile/TEMP01.DBF' SIZE 1G REUSE AUTOEXTEND ON NEXT 200M  MAXSIZE 30G;

#将数据库默认temp表空间设置为原表空间:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

#删除刚刚创建的temp2 临时表空间:

DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;

注意:上一步修改完之后, 删除temp表空间可能会宕住,需要退出再重新进sqlplus。

5.7 重新编译数据库
重新编译PLSQL代码块,并重新编译无效对象,注意不是utlrp脚本,而是使用utlirp。如果系统版本存在升级,需要根据readme.html中的要求执行脚本。如果存在新的补丁的,执行补丁对应的SQL脚本。
命令:

@?/rdbms/admin/utlirp.sql

#执行升级脚本(如果不存在版本升级,不需要执行):

#@?/rdbms/admin/catupgrd.sql

6 、 目标端RAC参数调整
6.1 修改数据库参数
经过前面一系例操作,数据库跨操作系统的问题就全部都解决了。到目前为止,接下来的操作和调整,是为了启用RAC。
命令:

startup mount force
alter system set instance_name='ORCL1' scope=spfile sid='ORCL1';
alter system set instance_name='ORCL2' scope=spfile sid='ORCL2';
alter system set instance_number=1 scope=spfile sid='ORCL1';
alter system set instance_number=2 scope=spfile sid='ORCL2';
alter system set thread=1 scope=spfile sid='ORCL1';
alter system set thread=2 scope=spfile sid='ORCL2';
alter system set undo_tablespace='UNDOTBS1' scope=spfile sid='ORCL1';
alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='ORCL2';
alter system set cluster_database_instances=2 scope=spfile sid='*';
alter system set cluster_database=TRUE scope=spfile sid='*';

6.2 重新启动数据库并打开节点2
调整完后需要重启数据库。
命令:

SHUTDOWN IMMEDIATE
STARTUP
alter database enable thread 2;

6.3 编译无效对象
再次编译无效对象。
命令:

@?/rdbms/admin/utlrp.sql

6.4 添加CRS资源并测试启停数据库
操作完这一波,迁移就算完成了。注意这个操作是在oracle用户下完成,其中-d 是数据库唯一名、-p spfile、-i 实例名/SID、-n node 。
命令:

srvctl add database -d ORCL -o $ORACLE_HOME -p +DATA/orcl/spfileorcl.ora
srvctl add instance -d ORCL -i ORCL1 -n db01
srvctl add instance -d ORCL -i ORCL2 -n db02
srvctl start database -d ORCL -o open
srvctl stop database -d ORCL
srvctl start database -d ORCL -o open

6.5 创建密码文件
创建密码文件用来存放sys用户的密码,如果没有密码文件,sys用户无法通过远程连接数据库。
节点1
命令:

orapwd file=$ORACLE_HOME/dbs/orapwdORCL1 password=oracle123

节点2
命令:

orapwd file=$ORACLE_HOME/dbs/orapwdORCL2 password=oracle123
发布了59 篇原创文章 · 获赞 89 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41944882/article/details/104065474
今日推荐