通过RMAN恢复11G单实例数据库到RAC数据库
sinye56 2024-10-07 14:48 4 浏览 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环境测试完成!
相关推荐
- Linux基础知识之修改root用户密码
-
现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...
- Linux如何修改远程访问端口
-
对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...
- 如何批量更改文件的权限
-
如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...
- CentOS「linux」学习笔记10:修改文件和目录权限
-
?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...
- Linux下更改串口的权限
-
问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...
- Linux chown命令:修改文件和目录的所有者和所属组
-
chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...
- chmod修改文件夹及子目录权限的方法
-
chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...
- Android 修改隐藏设置项权限
-
在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...
- 完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!
-
最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...
- linux改变安全性设置-改变所属关系
-
CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...
- Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod
-
#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...
- linux更改用户权限为root权限方法大全
-
背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...
- 怎么用ip命令在linux中添加路由表项?
-
在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...
- Linux配置网络
-
1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...
- Linux系列---网络配置文件
-
1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)