暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

windows单实例迁移至Linux RAC 平台 - 实操

原创 心在梦在 2022-10-19
1414

 
windows单实例迁移至Linux RAC 平台
 

一、环境描述

 背景:

当前DB环境: windows server 2016 + oracle11.2.0.4 企业版 (单机)

客户需求: 将windows 系统更换为linux系统,将单机环境更换为RAC 环境。

迁移思路: 利用rman备份将数据库从windows恢复至linux环境,在执行转换单实例转RAC脚本。

 
备注:

  1. windows 到 linux rman备份需要冷备,也可以考虑DG,这里数据量不大,我们采用冷备方式。

  2. RAC数据库通过dbca 建库,然后手动将datafile、redo log、tempfile删除,保留集群信息和参数文件。也可以恢复完成后,修改集群相关参数和通过srvctl add命令添加数据库信息到集群中。

 

二、迁移步骤

第一部分: Windows备份恢复至Linux

1.主库冷备

– 1) 记录当前无效对象

SQL> select 'alter '||object_type||' '||owner||'.'||object_name||' compile;' from dba_objects t where t.status = 'INVALID';

图片.png

– 2) 重启数据库至mount状态

SQL> alter system switch logfile; SQL> alter system checkpoint; SQL> Shutdown immediate ; SQL> Startup mount ; SQL> select name,open_mode from v$database;

图片.png

–3) 检查一下alert日志,确认数据库为一致性关闭。

图片.png

– 4) rman备份

RMAN> run{ allocate channel c1 device type disk; allocate channel c2 device type disk; allocate channel c3 device type disk; allocate channel c4 device type disk; allocate channel c5 device type disk; backup as compressed backupset database filesperset 3 format 'E:\backup\db_%d_%T_%U'; backup current controlfile format 'E:\backup\cntrl_%s_%p_%s'; release channel c1; release channel c2; release channel c3; release channel c4; release channel c5; }

图片.png
图片.png

2. 拷贝备份到RAC 环境

3. 启动数据库至nomount状态

-- 因为参数文件已经存在了,直接启动 SQL> startup nomount

图片.png

4. 修改参数文件

SQL> alter system set cluster_database=FALSE scope=spfile sid='*'; SQL> alter system set job_queue_processes= 0; -- 将job参数改为0,避免数据库恢复后job自动运行,导致数据更改 -- 重启数据库至nomount状态,生效参数 SQL> shutdown immediate SQL> startup nomount

图片.png

5. 恢复控制文件

RMAN> restore controlfile from '/soft/backup/CNTRL_51_1_51'; RMAN> alter database mount;

图片.png

6. 重新注册备份集

RMAN> crosscheck backup; RMAN> delete EXPIRED backup; RMAN> catalog start with '/soft/backup/';

图片.png

7. restore 数据库

RMAN> run{ allocate channel c1 device type disk; allocate channel c2 device type disk; allocate channel c3 device type disk; allocate channel c4 device type disk; allocate channel c5 device type disk; set newname for datafile 1 to '+DATA/xxx/datafile/system01.dbf'; set newname for datafile 2 to '+DATA/xxx/datafile/sysaux01.dbf'; set newname for datafile 3 to '+DATA/xxx/datafile/undotbs01.dbf'; set newname for datafile 4 to '+DATA/xxx/datafile/users01.dbf'; set newname for datafile 5 to '+DATA/xxx/datafile/xxx_data01_a.dbf'; set newname for datafile 6 to '+DATA/xxx/datafile/xxx_data01_b.dbf'; set newname for datafile 7 to '+DATA/xxx/datafile/xxx_data01_c.dbf'; set newname for datafile 8 to '+DATA/xxx/datafile/xxx_data01_d.dbf'; set newname for datafile 9 to '+DATA/xxx/datafile/xxx_index01_a.dbf'; set newname for datafile 10 to '+DATA/xxx/datafile/xxx_data01_e.dbf'; set newname for datafile 11 to '+DATA/xxx/datafile/xxx_index01_b.dbf'; set newname for datafile 12 to '+DATA/xxx/datafile/xxx_data01_f.dbf'; set newname for datafile 13 to '+DATA/xxx/datafile/xxx_data01_g.dbf'; set newname for datafile 14 to '+DATA/xxx/datafile/xxx_data01_h.dbf'; restore database; switch datafile all; release channel c1; release channel c2; release channel c3; release channel c4; release channel c5; }

图片.png
图片.png

8. open 数据库

SQL> alter database open resetlogs; SQL> select open_mode from v$database;

图片.png

9. 重建temp

SQL> select name from v$tempfile; SQL> create temporary tablespace temp1 tempfile '+DATA' size 10M autoextend on; SQL> alter database default temporary tablespace temp1; SQL> drop tablespace temp including contents and datafiles; SQL> create temporary tablespace temp tempfile '+DATA' size 30g autoextend on; SQL> alter database default temporary tablespace temp; SQL> drop tablespace temp1 including contents and datafiles;

图片.png

10. 重建redo

-- 先建新的redo,切换日志,让旧的日志组状态都变为inactive,再删旧的redo SQL> select group#,member from v$logfile; SQL> select group#,status from v$log; SQL> alter system switch logfile; SQL> alter system checkpoint; SQL> alter database drop logfile group 4; SQL> alter database drop logfile group 5; SQL> alter database drop logfile group 6; SQL> alter database add logfile group 1 '+DATA' size 500M; SQL> alter database add logfile group 2 '+DATA' size 500M; SQL> alter database add logfile group 3 '+DATA' size 500M; SQL> alter database add logfile group 4 '+DATA' size 500M; SQL> alter database add logfile group 5 '+DATA' size 500M;

11. 重启数据库

SQL> shutdown immediate SQL> startup SQL> @?/rdbms/admin/utlrp.sql -- 对比无效对象,检查有没有新增的无效对象 SQL> select 'alter '||object_type||' '||owner||'.'||object_name||' compile;' from dba_objects t where t.status = 'INVALID';

图片.png

– 清除控制文件中关于v$archived_log的残留的windows信息 (可选)

SQL> select sequence#,name,blocks from v$archived_log; SQL> execute sys.dbms_backup_restore.resetCfileSection(11);

此时,数据库已经从windows恢复到linux rac环境,但是数据库依然是一个单实例的数据库,因此还需要将数据库转换为RAC库。

 

第二部分: 单实例转RAC

1. 执行将单机转换成rac的脚本

SQL> @?/rdbms/admin/catclust.sql

图片.png

2. 添加日志组

SQL> alter database add logfile thread 2 group 6 ('+DATA') size 500M; SQL> alter database add logfile thread 2 group 7 ('+DATA') size 500M; SQL> alter database add logfile thread 2 group 8 ('+DATA') size 500M; SQL> alter database add logfile thread 2 group 9 ('+DATA') size 500M; SQL> alter database add logfile thread 2 group 10('+DATA') size 500M;

图片.png

3. 修改rac参数

SQL> alter system set cluster_database=true scope=spfile;

图片.png

4. 添加其他节点undo

SQL> create undo tablespace undotbs2 datafile '+DATA/xxx/datafile/undotbs02.dbf' SIZE 10G autoextend on;

图片.png

5. 启用其他节点

SQL> select thread#,status,enabled from v$thread; SQL> alter database enable public thread 2;

图片.png

6. 重建数据字典

SQL> @?/rdbms/admin/catalog.sql SQL> @?/rdbms/admin/catproc.sql SQL> @?/rdbms/admin/utlrp.sql

7. 使用集群命令管理数据库

-- 先将恢复的库关闭 SQL> shutdown immediate -- 通过集群命令,可以正常管理数据库 srvctl stop database -d xxx srvctl start database -d xxx srvctl status database -d xxx

图片.png

8. 启用job

– 应用测试无问题后,恢复job参数

SQL> alter system set job_queue_processes= 1000;

图片.png

此时,数据库已经从单实例库转换为RAC库。系统也从windows 更换为linux,迁移完成。

最后修改时间:2022-10-19 16:13:47
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论