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

RAC11.2.0.3异机迁移到RAC11.2.0.4

原创 董小姐 2025-07-22
868

需求描述

将源端RAC11.2.0.3核心库迁移到目标端RAC11.2.0.4(已部署),原本计划用ADG不停机迁移,无奈数据量太大10.5T,网络存在延迟,只能采用rman备份 异地rman恢复的方式,并且目标端配置略低于源端。

准备工作

数据库信息整理

源端

--ip信息
[oracle@rac93 report]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.37.254.92       rac92
192.37.254.93       rac93  唯一存活节点

192.37.254.94       rac92-vip
192.37.254.95       rac93-vip

172.16.1.92         rac92-priv
172.16.1.93         rac93-priv

192.37.254.96       scan.hljgs.gov.cn  scan

--查看数据库版本
sqlplus / as sysdba 
select * from v$version;
SQL*Plus: Release 11.2.0.3.0 Production

--业务数据量
select round(sum(bytes) / 1024 / 1024 / 1024, 2) || 'G'
  from dba_segments
 where owner in ('TOPICIS') ;

ROUND(SUM(BYTES)/1024/1024/1024,2)||'G'
-----------------------------------------
9793.42G

--asm磁盘使用情况
select group_number,name,state,type,total_mb,free_mb,usable_file_mb,allocation_unit_size/1024/1024 unit_mb from v$asm_diskgroup order by 1;

GROUP_NUMBER NAME			    STATE	TYPE	 TOTAL_MB    FREE_MB USABLE_FILE_MB    UNIT_MB
------------ ------------------------------ ----------- ------ ---------- ---------- -------------- ----------
		 1        BACKUP			MOUNTED	EXTERN	   1024000   224370	     224370	     1
	   2        DATA	  		MOUNTED	EXTERN	  16506880  3056771	    3056771	     1
	   3        OCR			    MOUNTED	EXTERN	      3072     2672	       2672	     1

目标端

[root@spjyxkdb01 /]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.3.107       spjyxkdb01   root:Xpsd3AyhAE8Py!WY&%bpHrPUkYTbhe#Wr2fre4!@ 
172.16.3.108       spjyxkdb02   root: &bqcvq^ma%9$zkY3XnYGRPMJWjVka3EhymqM%n#x

172.16.3.178       spjyxkdb01-vip
172.16.3.195       spjyxkdb02-vip

172.16.8.107    spjyxkdb01-priv
172.16.8.108    spjyxkdb02-priv

172.16.3.24     spjyxkdb-scan

--查看数据库版本
sqlplus / as sysdba 
select * from v$version;
SQL*Plus: Release 11.2.0.4.0 Production

--asm磁盘使用情况
select group_number,name,state,type,total_mb,free_mb,usable_file_mb,allocation_unit_size/1024/1024 unit_mb from v$asm_diskgroup order by 1;
GROUP_NUMBER NAME			    STATE	TYPE	 TOTAL_MB    FREE_MB USABLE_FILE_MB    UNIT_MB
------------ ------------------------------ ----------- ------ ---------- ---------- -------------- ----------
	   1        DATA		  	MOUNTED	EXTERN	   17516880   17316880    17316880     1
	   2        FRA			    MOUNTED	EXTERN	   1023998    1021854 	  1021854      1
	   3        OCR			    MOUNTED	NORMAL	     30717    29791        9776        1

应用方

注意事项:停止应用,更改应用用户密码,并锁定用户。

alter user topicis identified by oracle20250720;
alter user topicis account lock;

特别说明:为避免有应用漏停,避免有人给用户解锁,避免有人将停止的监听启动,保险办法就是更改应用用户密码。

备份数据库

由于将近10T的数据量,迁移前再全备会很耗时,所以采用全备+增备的方式进行备份。

备份脚本省略。

将备份文件传送到目标端节点1服务器上的/data目录下。

恢复过程

更改备份文件所在的目录权限

存放备份文件的目录权限必须如下图:

chown -R oracle:asmadmin /data/

恢复参数文件

关闭目标端现有实例

shutdown immediate

生成临时参数模板

将目标端现有实例启动到nomount阶段,生成临时参数模板。

startup nomount;
create pfile='/home/oracle/pfiletopicistemp.ora' from spfile;

恢复二进制参数文件

rman target /
restore spfile to '/home/oracle/spfiletopicis.ora' from '/data/autobackup/c-3139746499-20250720-00';

将二进制参数文件内容输出成文本格式

cd /home/oracle
strings spfiletopicis.ora > /home/oracle/pfiletopicis.ora

生成新的文本参数文件

结合pfiletopicistemp.ora pfiletopicis.ora,更改pfiletopicistemp.ora 生成pfiletopicisnew.ora文件

cd /home/oracle
cp pfiletopicistemp.ora pfiletopicisnew.ora
vim pfiletopicisnew.ora

增加和更改的内容如下:

compatible 和源端保持一致;local_listener 为虚拟ip

topicis2.__oracle_base='/opt/u02/app/oracle'#ORACLE_BASE set from environment
*.audit_trail='NONE'
*.compatible='11.2.0.0.0'
*.control_files='+DATA/topicis/controlfile/current.266.839960323','+FRA/topicis/controlfile/current.256.839960323'
*.db_files=500
*.db_recovery_file_dest_size=569083166720
*.deferred_segment_creation=FALSE
*.local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.3.178)(PORT=1521))))'
topicis2.local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.3.195)(PORT=1521))))'
*.log_archive_dest_1='LOCATION=+FRA/topicis/archive'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=6000
*.undo_retention=5400
*.sessions=7680

启库到nomount阶段

关闭数据库

sqlplus / as sysdba
shutdown immediate

用新的文本参数文件启库到nomount

startup nomount pfile='/home/oracle/pfiletopicisnew.ora';

生成新的二进制参数文件

create SPFILE='+DATA/topicis/spfiletopicis.ora' from pfile='/home/oracle/pfiletopicis20250720.ora';

注意:千万不要用下面的sql创建参数文件,默认会创建到dbs目录下而不是asm磁盘里。

create spfile from pfile='/home/oracle/pfiletopicisnew.ora';

关闭数据库

sqlplus / as sysdba
shutdown immediate

再次nomount启动数据库

再次nomount启动数据库,这次是以默认的spfile参数文件启动数据库

startup nomount 

查看参数文件位置是否是spfile

SQL> set linesize 999
SQL> show parameter spfile;

NAME				     TYPE			       VALUE
------------------------------------ --------------------------------- ---------------
spfile				     string			       +DATA/topicis/spfiletopicis.ora

恢复控制文件

rman target /
restore controlfile from '/data/autobackup/c-3139746499-20250720-00';

特别注意:

因为数据库重启了几次,所以需要退出先前的rman重新进入,不然提示如下报错:

mount数据库

alter database mount;

还原数据文件

该环境中源库和目标库部分数据文件路径相同,部分数据文件路径不同,需将控制文件中记录的数据文件位置进行转换。

补充:catalog的原理是查文件头,里面 文件号 相对文件号 scn,目的就是把信息取出来,写到控制文件的rman那一部分,就是建个档

查看文件位置

su - oracle
sqlplus / as sysdba

--查看数据文件存放位置
col name for a60
select name from v$datafile; 
或 
col name for a60
select * from v$dbfile;

--查看临时文件位置
col name for a50
select file#,name from v$tempfile;

--查看控制文件位置
select name from v$controlfile;

--查看日志文件位置
select member from v$logfile;
查看历史redo日志  select * from v$log_history;

--查看归档文件位置
select name from v$archived_log;

数据位置位置不同,多了个表空间目录

临时文件位置相同

日志文件和归档文件目录均不同

还原

SET NEWNAME FOR DATABASE TO '+DATA/topicis/DATAFILE/%f_%b';一条命令可实现所有数据文件重命名至指定位置。

--加载备份目录下的备份集
catalog start with '/data/';

--更改控制文件中数据文件,还原数据库  如果cpu核数多,可多增加通道加快还原速度
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
SET NEWNAME FOR DATABASE TO '+DATA/topicis/DATAFILE/%f_%b';
restore database;
switch datafile all;
release channel c1;
release channel c2;
}

--恢复归档至指定路径
run{
crosscheck archivelog all;
set archivelog destination to '+FRA/topicis/archive';
restore archivelog all;
}

select name from v$archived_log;

--在alter database open resetlogs之前,更改contorlfile中redo的路径
select 'alter database rename file  '||chr(39)||member||chr(39)||' to '||chr(39)||replace(member,'+BACKUP/topicis/onlinelog/','+FRA/topicis/onlinelog/')||chr(39)||';' from v$logfile where member  like '+BACKUP%';
执行输出的语句

alter database rename file  '+BACKUP/topicis/onlinelog/group_202.12531.917255213' to '+FRA/topicis/onlinelog/group_202.12531.917255213';
alter database rename file  '+BACKUP/topicis/onlinelog/group_203.5148.917255223' to '+FRA/topicis/onlinelog/group_203.5148.917255223';

select member from v$logfile;

问题处理

ORA-15005: name "crmdb/fund_table04.dbf" is already used by an existing alias
问题描述

特别注意:如果restore database;过程中手动ctrl+c取消后再次restore database;会报如下错误:

解决办法

解决办法:ps -ef | grep rman 然后kill掉rman进程,重启库至nomount阶段重新恢复控制文件。

参考链接:https://blog.csdn.net/FJ_MUsea/article/details/127841398

RMAN-06023: no backup or copy of datafile 1 found to restore
问题描述
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 07/20/2025 10:28:14 上) 失败
RMAN-06026: 有些目标没有找到 - 终止还原
RMAN-06023: 没有找到数据文件4的副本来还原
RMAN-06023: 没有找到数据文件3的副本来还原
RMAN-06023: 没有找到数据文件2的副本来还原
RMAN-06023: 没有找到数据文件1的副本来还原
分析过程
RMAN> report schema;

看看SIZE和NAME列。 0的SIZE很好地表明该文件在物理上不存在于磁盘上。

RMAN> list copy of datafile 1,2,3,4;

解决办法

多个RMAN-06094: 数据文件1,2,3,4 必须重新存储,多个数据文件一起重命名。自此restore不再报错

--查出数据文件id和name
select file#,name from v$datafile;

--对文件重命名
RMAN> switch datafile 1,2,3,4 to copy;

对一个数据文件重命名

switch datafile 1 to copy;

如果以上操作之后还是不行,继续按如下办法:

--查目标库list incarnation
RMAN> list incarnation;


数据库原型列表
DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间
------- ------- -------- ---------------- --- ---------- ----------
1       1       TOPICIS  3139746499       PARENT  1          17-9月 -11
2       2       TOPICIS  3139746499       PARENT  995548     19-2月 -14
3       3       TOPICIS  3139746499       CURRENT 166089860424 19-7月 -25

--查源库 list incarnation
RMAN> list incarnation;

使用目标数据库控制文件替代恢复目录

数据库原型列表
DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间
------- ------- -------- ---------------- --- ---------- ----------
1       1       TOPICIS  3139746499       PARENT  1          17-9月 -11
2       2       TOPICIS  3139746499       CURRENT 995548     19-2月 -14

在目标库上执行:

reset database to incarnation 2;

再次restore不再报错。

参考链接:https://blog.csdn.net/u010692693/article/details/78537018

https://blog.csdn.net/weixin_33755649/article/details/90068749

恢复数据库

run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
recover database;
release channel c1;
release channel c2;
}

输出如下:

释放的通道: c42
释放的通道: c43
释放的通道: c44
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 07/20/2025 20:25:57 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 2 序列 1101898 的归档日志以及起始 SCN 166096655866

问题描述

open resetlogs库

使用resetlogs选项,会把当前的日志序号(log sequence number)重设为1,并抛弃所有日志信息。在以下条件时需要使用resetlogs选项:

在不完全恢复(介质恢复);

使用备份控制文件。

使用resetlogs打开数据库后,务必要完整地进行一次数据库备份。

会发现按照提示进行open resetlogs操作也报错,报错后实例也关闭了。

idle 28-MAY-24> alter database open resetlogs;
ERROR:
ORA-03114: not connected to ORACLE


alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
Process ID: 26049
Session ID: 1 Serial number: 5

版本升级

将数据库11.2.0.3版本升级至11.2.0.4版本。

再次startup upgrade

更改参数,再次STARTUP UPGRADE

STARTUP NOMOUNT;
ALTER SYSTEM SET CLUSTER_DATABASE=FALSE scope=spfile;
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;

问题处理

SQL> startup upgrade;
ORACLE 例程已经启动。

Total System Global Area 1.2079E+11 bytes
Fixed Size		    2267952 bytes
Variable Size		 1.8254E+10 bytes
Database Buffers	 1.0227E+11 bytes
Redo Buffers		  261361664 bytes
数据库装载完毕。
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-39701: database must be mounted EXCLUSIVE for UPGRADE or DOWNGRADE
进程 ID: 565210
会话 ID: 3961 序列号: 3

解决办法

在 RAC 环境中,必须禁用集群参数 CLUSTER_DATABASE 才能以独占模式启动数据库

STARTUP NOMOUNT;
ALTER SYSTEM SET CLUSTER_DATABASE=FALSE scope=spfile;
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;

https://cn.bing.com/search?q=ORA-39701%3A+database+must+be+mounted+EXCLUSIVE+for+UPGRADE+or+DOWNGRADE&cvid=dc7b429347cc4059bacd00d6c6c332e8&aqs=edge..69i57j69i58.789j0j1&FORM=ANAB01&PC=CNNDDB

执行脚本

不要多窗口并行执行脚本,会引发死锁,该过程比较耗时。

@?/rdbms/admin/catalog.sql     --这个脚本执行很快就结束了
@?/rdbms/admin/catproc.sql     --这个脚本执行大概3-5分钟
@?/rdbms/admin/catupgrd.sql    --这个脚本执行时间比较久,脚本执行结束会shutdown immediate;

脚本说明:

主要用于创建数据字典视图。其中,脚本catalog.sql 和 catproc.sql 是创建数据库后必须要运行的两个脚本。
catalog.sql 创建系统常用的数据字典视图和同义词
catproc.sql 运行服务器端所需要的PL/SQL脚本
(1) catalog.sql
该脚本创建相对于系统基表的视图和系统动态性能视图以及他们的同义词。该脚本又同时运行创建其他对象的脚本,主要有:
基本PL/SQL环境,包括PL/SQL的声明:
- 数据类型
- 预定义例外
- 内建的过程和函数
- SQL操作等

- 审计
- 导入/导出
- SQL*Loader
- 安装选项

(2)catproc.sql
该脚本主要用于建立PL/SQL功能的使用环境。此外,还创建几个PL/SQL包用于扩展RDBMS功能。该脚本同时还为下面的一些RDBMS功能创建另外的一些包和视图:

-警告(Alerts)
-管道(Pipes)
-日志分析(LogMiner)
-大对象(Large objects)
-对象(Objects)
- 高级队列(Advanced queuing)
-复制选项( Replication option)
-其他的一些内建包和选项(Other built-ins and options)

(3) catupgrd.sql

随着Oracle版本的升级,某些对象的属性需要改变,而这些改变操作都将体现在升级脚本catupgrd.sql中

启库

一定要记得改回参数

sqlplus / as sysdba
startup nomount;
ALTER SYSTEM SET CLUSTER_DATABASE=true scope=spfile;

shutdown immediate;
startup;

查看版本

SQL> SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE	11.2.0.4.0	Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

重启实例

重启实例,确保迁移升级后重启后正常,避免出现重启后启库失败。

一个节点操作,会在所有节点上同步执行

srvctl stop database -d topicis  -o immediate

srvctl start database -d topicis

srvctl status database -d topicis

附加场景

如果迁移、升级完成后发现参数文件使用的集群每个节点本地的二进制参数文件,如下图:

查看init_sid.ora文本参数文件内容,是指向asm磁盘中的二进制参数文件的。

解决办法:用pfile启动到open,再建spfile到asm里

--创建文本参数文件 ,一个节点操作即可
create pfile='/home/oracle/pfiletopicis20250720.ora' from spfile;

--关闭数据库, ,一个节点操作即可
shutdown immediate;

--文本参数文件启库 ,一个节点操作即可
startup nomount pfile='/home/oracle/pfiletopicis20250720.ora';
alter database mount;
alter database open;

--查看参数文件位置  该值显示为空
show parameter spfile;

--分别在所有节点$ORACLE_HOME/
删除dbs目录下spfiletopicis1.ora文件
删除dbs目录下spfiletopicis2.ora文件

--创建二进制参数文件 ,一个节点操作即可
create SPFILE='+DATA/topicis/spfiletopicis.ora' from pfile='/home/oracle/pfiletopicis20250720.ora';

--重启库 ,一个节点操作即可
shutdown immediate
startup

--查看参数文件位置   ,一个节点操作即可
show parameter spfile;
NAME				     TYPE			       VALUE
------------------------------------ --------------------------------- ---------------
spfile				     string			       +DATA/topicis/spfiletopicis.ora

注意:集群下所有节点的$ORACLE_HOME/dbs目录下是没有spfile+sid.ora参数文件的。


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

评论