百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

通过RMAN恢复11G单实例数据库到RAC数据库

mhr18 2024-09-21 19:02 29 浏览 0 评论

介绍


服务器IP

数据库版本

备注

实例名

目标端

192.168.5.16/17

11.2.0.4

RAC

testdb

源端

192.168.5.15

11.2.0.4

单实例

testdb

本文介绍使用单实例数据库恢复到rac环境中,需要注意:

1.2个数据库版本要一致,包括小版本。

2.RMAN 异机恢复的时候,db_name必须相同。实例名的信息会记录到控制文件里,在恢复的时候,如果实例名不一致,恢复会报错。

3.目标端的RAC环境可以只安装grid软件和oracle软件,不用创建数据库

准备工作

1.使用RMAN在单实例数据库上创建全备:

RMAN>backup as compressed backupset tag S_FULL database PLUS ARCHIVELOG;

从备份信息中可以看:

数据文件备份:o1_mf_nnndf_S_FULL_j7wv8dv2_.bkp

参数文件和控制文件备份:o1_mf_s_1070373454_j7wvbgt0_.bkp

通过scp将这些备份文件全部传到RAC 节点1上(所有操作在一个节点完成)。

2.检查RAC环境

由于我是拿现有虚拟机来做,可以从上一篇文章《通过RMAN恢复11G RAC数据库到单实例》中知道,RAC环境是有数据库实例radb的,现在我需要将单实例testdb数据库还原成RAC数据库testdb.

开始恢复操作

恢复参数文件

随便创建一个参数文件,这里只给了一个db_name参数:

启动数据库到nomount 状态:

恢复参数文件,直接生成pfile文件:

[oracle@rac1 ~]$ export ORACLE_SID=testdb

[oracle@rac1 ~]$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on Tue Apr 20 14:14:07 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

connected to target database: TESTDB (not mounted)

RMAN> restore spfile to pfile '/u01/app/oracle/product/11.2.0/db_1/dbs/inittestdb.ora' from '/home/oracle/backup/o1_mf_s_1070373454_j7wvbgt0_.bkp';

1.修改参数文件

恢复出来的pfile文件名称inittestdb.ora,需要改成inittestdb1.ora,然后添加RAC相关参数.

[oracle@rac1 dbs]$ mv inittestdb.ora inittestdb1.ora

修改参数文件内容:*.cluster_database=false 参数暂时设置为false!

修改参数路径:control_files,db_create_file_dest,db_recovery_file_dest

添加RAC相关参数:instance_number,thread,undo_tablespace,cluster_database后面还会添加

根据参数文件创建相关的目录:

oracle用户:mkdir -p /u01/app/oracle/admin/testdb/adump --2个节点都需要

grid asmcmd中+DATA磁盘组中创建目录:

ASMCMD> mkdir TESTDB

ASMCMD>mkdir TESTDB/CONTROLFILE

ASMCMD> mkdir TESTDB/DATAFILE

ASMCMD> mkdir TESTDB/ONLINELOG

ASMCMD> mkdir TESTDB/PARAMETERFILE

ASMCMD> mkdir TESTDB/TEMPFILE

2.创建spfile文件

通过上面修改pfile文件,创建出spfile文件并放在共享存储上,并修改pfile文件中的内容。首先将前面使用到testdb实例关闭,重新设置ORACLE_SID=testdb1.

create spfile='+DATA/TESTDB/PARAMETERFILE/spfiletestdb.ora' from pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/inittestdb1.ora';

修改pfile文件inittestdb1.ora指向spfile文件:(2个节点都要做)

恢复控制文件

关闭上述临时数据库实例,然后使用spfile文件启动数据库testdb1实例到nomount状态:

登录rman恢复控制文件

RMAN> restore controlfile from '/home/oracle/backup/o1_mf_s_1070373454_j7wvbgt0_.bkp';

恢复数据文件

将数据库启动到mount 状态,然后恢复数据文件(需要rename数据文件位置)。

RMAN> alter database mount;

1.查看数据文件位置

2.注册备份文件

由于单实例的备份文件是在本地磁盘上,拷贝过来后没有放在相同的位置,控制文件就找到不到备份文件,所有备份信息都是无效的,可以先将控制文件中备份相关信息删除,然后将copy过来的备份文件注册到控制文件中。

RMAN>crosscheck backup of database;

RMAN> crosscheck backup of archivelog all;

RMAN> delete expired backupset;

注册整个备份目录:

RMAN > catalog start with '/home/oracle/backup';

3.编辑run脚本restore数据文件

run {

set newname for datafile 5 to '+DATA';

set newname for datafile 4 to '+DATA';

set newname for datafile 3 to '+DATA';

set newname for datafile 2 to '+DATA';

set newname for datafile 1 to '+DATA';

set newname for tempfile 1 to '+DATA';

restore database;

switch datafile all;

switch tempfile all;

}

可以看到tempfile是不会还原的,只是在控制文件修改记录!同时,tempfile也不需要创建,后面数据库resetlog后,会自动根据路径重建!

4.恢复数据库recover database

RMAN> recover database;

这里报错是因为还缺少日志文件,这里在单实例数据库上,创建一个表,然后切换归档日志,最后将归档日志传到rac环境中,可以看看最后数据是否一致!(临时加的一个测试)

SQL> create table testrac(id number,name varchar(10));

Table created.

SQL> insert into testrac values(1,'testrac');

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

SQL> alter system checkpoint;

System altered.

查看单实例上归档日志:

这里把8号和9号归档日志一起传到RAC服务器上并注册这2个归档:

注册归档:

RMAN> catalog archivelog '/home/oracle/backup/o1_mf_1_8_j7wz0zkr_.arc','/home/oracle/backup/o1_mf_1_9_j7x60nj5_.arc';

再次recover database:

依然还会存在报错,单实例数据库一直是开启状态,scn号会一直往前走,所以归档日志会指向下一个,这里就出现报错,由于我们知道,单实例数据库已经没有数据录入,所以直接做不完全恢复就可以了!

RMAN> recover database until scn 1001740;

5.重置在线日志路径

这里只是重置了在线日志的路径,并不会创建,创建是在resetlog后自动创建!

SQL>select * from v$logfile;

alter database rename file '/u01/app/oracle/oradata/TESTDB/onlinelog/o1_mf_3_j7hc5zkm_.log' to '+DATA';

alter database rename file '/u01/app/oracle/fast_recovery_area/TESTDB/onlinelog/o1_mf_3_j7hc5zl9_.log' to '+FRA';

alter database rename file '/u01/app/oracle/oradata/TESTDB/onlinelog/o1_mf_2_j7hc5z3c_.log' to '+DATA';

alter database rename file '/u01/app/oracle/fast_recovery_area/TESTDB/onlinelog/o1_mf_2_j7hc5z7m_.log' to '+FRA;

alter database rename file '/u01/app/oracle/oradata/TESTDB/onlinelog/o1_mf_1_j7hc5yq2_.log' to '+DATA';

alter database rename file '/u01/app/oracle/fast_recovery_area/TESTDB/onlinelog/o1_mf_1_j7hc5yqt_.log' to '+FRA';

6.open数据库

RMAN> alter database open RESETLOGS;

后续工作

1.检查并修改几个初始化参数

SQL>select * from v$option where parameter = 'Real Application Clusters';

SQL>show parameter cluster

SQL>show parameter thread

SQL>show parameter instance_number

这里需要修改参数:cluster_database,cluster_database_instances

alter system set cluster_database=true scope=spfile sid='*';

alter system set cluster_database_instances=2 scope=spfile sid='*';

2.创建节点2的undo 表空间

SQL> create undo tablespace UNDOTBS2 datafile '+DATA' size 200m;

我在参数文件中已经指定了参数,所以不用再修改!

3.添加节点2的redo 文件

SQL>alter database add logfile thread 2 group 4 ('+DATA','+FRA') size 50m;

SQL>alter database add logfile thread 2 group 5 ('+DATA','+FRA') size 50m;

SQL>alter database add logfile thread 2 group 6 ('+DATA','+FRA') size 50m;

SQL>alter database enable thread 2;

4.将数据库信息注册到CRS里(一定要用ORACLE用户来做)

[oracle@rac1 ~]$ srvctl add database -d testdb -o $ORACLE_HOME -p +DATA/TESTDB/PARAMETERFILE/spfiletestdb.ora

[oracle@rac1 ~]$ srvctl add instance -d testdb -i testdb1 -n rac1

[oracle@rac1 ~]$ srvctl add instance -d testdb -i testdb2 -n rac2

5.重启节点一数据库实例,并启动第二个节点

SQL> shutdown immediate;

SQL> startup;

6.执行catclust.sql脚本创建cluster database的相关视图

SQL> @$ORACLE_HOME/rdbms/admin/catclust.sql

7.创建监听

如果没有监听,就需要创建监听(netca),如果已经存在了,直接修改监听的参数local_listener,remote_listener

SQL>alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.203.107)(PORT=1521))' scope=both sid='*';

SQL>alter system set remote_listener ='rac-cluster-scan:1521' scope=both sid='*';

验证RAC环境

1. 查看数据库的状态

[grid@rac1 ~]$ srvctl status database -d testdb

2. 查看数据的配置情况

[grid@rac1 ~]$ srvctl config database -d testdb

3.查看资源情况

[grid@rac1 ~]$ crsctl status resource -t

4.检查刚创建的表

可以看到数据还在!

5.重启整个服务器观察是否正常。

至此,单实例数据库还原到RAC环境测试完成!

相关推荐

一文带您了解数据库的行列之争:行式与列式存储的异同

数据库存储格式是数据库管理系统中一个至关重要的方面,它直接影响到数据的组织和检索效率。在数据库中,有两种主要的存储格式,即行式存储和列式存储。这两者采用截然不同的方法来组织和存储数据,各自具有一系列优...

NL2SQL(三)开源项目怎么选:talk is cheap, show me the code!

老规矩,先看效果下面的demo来自试用的SuperSonic,将会在下面详细介绍:大模型时代Text-to-SQL特点随着基于LLM技术的发展,RAG/AIAgent/Fine...

JDK25长期支持版九月降临:18项王炸功能全解析

Java要放大招啦!9月份推出的JDK25长期支持版已经锁定18个超能力,从稳定值到结构化并发,还有Linux系统下的"预知未来"性能分析!下面我用打游戏的术语给你们掰扯明白:1、飞...

OceanBase 推出单机版 高度兼容MySQL和Oracle

【环球网科技综合报道】3月27日,独立数据库厂商OceanBase正式发布单机版产品。据悉,这一产品基于自主研发的单机分布式一体化架构设计,具备极简数据库架构和高度兼容性,为中小规模业务提供兼具性能与...

黄远邦:应对7月1日闰秒对Oracle数据库影响

由于今年7月1日全世界会多出一秒,这可能对时间敏感的IT系统造成较大影响。中亦科技数据库团队对此问题做了深入的研究,并对用户系统提出了相应的解决方法及建议。中亦科技数据库产品总监黄远邦认为,闰秒调整会...

MySQL数据库密码忘记了,怎么办?(mysql 数据库密码)

#头条创作挑战赛#MySQL数据库密码忘记了且没有其他可以修改账号密码的账户时怎么办呢?登录MySQL,密码输入错误/*密码错误,报如下错误*/[root@TESTDB~]#mysql-u...

Chinese AI Talent in Spotlight as Nvidia and Meta Escalate Talent War

OntherightisBanghuaZhu,ChiefResearchScientistatNVIDIATMTPOST--SiliconValley’stoptech...

用Cursor开启JAVA+AI生涯(javascirpt怎么开启)

Cursor是基于VSCode开发的一款编辑器,支持多种语言的开发编辑。与传统的开发工具相比,它有多种优势:与AI无缝集成,响应速度快,占用内存小。但很多同学在"起步"过程中遇到了...

毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远

办公系统类:办公软件Word、Excel、PowerPoint三大必备技能+腾讯/金山在线文档解压缩操作:7-zip/winrar文件文本处理:Notepad++(文本编辑器正则表达式超级好...

盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?

一、Stack类:“继承Vector”的历史bug,为何成了性能拖油瓶?你是不是在学Java集合时,老师说过“栈结构用Stack类”?是不是在老代码里见过"newStack<>(...

Gemini 2.5 Pro 0506发布,编程最强大模型, 碾压 Claude3.7 sonnent

一、Gemini2.5Pro(I/Oedition)发布1、为何叫I/Oedition?谷歌史上最强编程模型Gemini2.5Pro(I/Oedition)发布,具体型号是Gemin...

如何让无聊变得有趣(附本人大量美图)

文/图:金冬成在这条长300公里的公路上,我已经来回往返了无数次。3小时车程,一个人,想想都是多么无聊的一件事。其实,人生道路上,类似这种无聊的事情有很多很多。无聊的事情、枯燥的工作,往往让我们容易失...

Oracle 推出 Java 24,增强 AI 支持和后量子加密

导读:Oracle宣布正式发布Java24,该语言增加了几个新功能,例如StreamGatherersAPI和Class-FileAPI的可用性,以及专门为AI推理和量子安全设计...

公司ERP突然变慢?“索引重建”这颗“药”可不能随便吃!

各位老板、IT小哥、财务小姐姐,有没有遇到过公司ERP系统突然卡顿得像“老爷车”,点个按钮半天没反应,急得直跺脚?这时候,可能有人会跳出来说:“我知道,重建一下数据库索引就好了!”听起来像个“神操作”...

基于Java实现,支持在线发布API接口读取数据库,有哪些工具?

基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...

取消回复欢迎 发表评论: