在研究RMAN的时候突然想到,使用RMAN做的数据库全备的备份集可不可以拿到其他的服务器做一个恢复操作?说干就干,我在帖子上看到最好是相同版本相同安装目录的一个数据库,然后仅安装Oracle软件,然后使用rman备份恢复。那么一个大致流程出来了:
1.使用RMAN备份整个源数据库;
2.使用VirtualBox的复制虚拟机功能复制一个相同的副本,配置好网络;
3.将副本虚拟机内的Oracle实例删除;
4.完成恢复前的准备工作
5.使用当前只有Oracle软件的副本虚机加上源数据库的备份完成恢复工作。
第一步: 备份
在源数据库上登录RMAN使用全备命令做一个全备操作
RMAN target / --登录rman工具
backup database format '/home/oracle/prod_%s.bak'; --数据库全备
list backupset; --查看全部备份集复制代码
可以看到备份5包括的是数据文件,备份6包括的是控制文件和参数文件。
第二步:复制虚拟机
为了保证一个相同的数据库软件版本相同的安装路径,同时也是为了偷懒,在这里我就直接做了一个复制副本的操作,正常应该搭建一个相同的服务器,安装同版本的数据库,但不建数据库的操作。
复制虚拟机后从新配置好网络ip。
如果你要是自己搭建环境的话可以使用相同的数据版本安装,最好路径相同,在选择安装Oracle软件还是同时建库时可以选择仅安装Oracle软件。
第三步:删除副本服务器内的Oracle实例,这里我选择简单点的操作,使用图形界面使用DBCA操作删除数据库实例,然后就会自动删除掉数据文件等。当然也可以手动删除这些文件,一定要先关闭实例才好。
第四步:恢复前的准备工作
1.在我操作的过程中有两个报错产生,第一个是和审计文件有关,另一个是在恢复控制文件时和创建有关,他们都有一个共同的错误,没有办法自己创建文件夹!!!!
如图:这两个文件夹在做第三步的时候,删除Oracle的实例时已经被删掉了,在恢复的过程中没有办法自己创建这个文件夹,所以需要自己创建好,在创建文件时要注意属主和属组的问题。
2.另一个准备工作很重要,但是因为我是做的虚拟机直接拷贝的操作,所以理论上这步不需要做,但是如果你要是自己搭建一定要做这个操作。那就是.bash_profile文件的创建。这个是必须要做的操作,如果是在Windows下,一定要指定ORACLE_SID和创建服务。
在这里我们就可以直接将源数据库的.bash_profile文件拷贝过来。
这样我们的准备工作就做好了。
第五步:RMAN恢复
现在我们的环境已经配置好了,Oracle数据库的启动模式是首先调取参数文件,参数文件内记录着数据控制文件的位置和一系列内存分配情况,参数文件分配好内存后指定控制文件位置,在nomount状态下打开控制文件,控制文件内记录着数据库的一系列的参数和数据文件的位置,在mount状态下打开数据文件,完成数据库实例打开的操作。
同样这也是我的数据库实例恢复流程,参数文件——控制文件——数据文件
1.首先打开rman环境,在这里我们首先要指定好源数据库的DBID
rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on 星期四 12月 13 14:47:32 2018
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: PROD (DBID=335947904)
这段是rman启动时的显示情况,是在源数据启动时拷贝的,我们的副本数据库不会存在这DBID的。
RMAN> set DBID=335947904
executing command: SET DBID
复制代码
2.恢复参数文件
正常启动到nomount环境下需要调取参数文件,但是目前我们的副本环境下不存在参数文件,而且首先要恢复的就是参数文件,很矛盾,所以在这里可打开rman自带的一个nomount小环境下去恢复参数文件。
RMAN> startup nomount; --rman自带的nomount小环境
RMAN> restore spfile from '/home/oracle/prod_6.bak'; 复制代码
在dbs/目录下查看,此时spfileprod.ora文件已经恢复成功
RMAN> startup force nomount --使用恢复的spfile启动复制代码
3.恢复控制文件
在nomount下恢复实例的控制文件
RMAN> restore controlfile from '/home/oracle/prod_6.bak';
RMAN> alter database mount; --加载恢复的控制文件
RMAN> list backup; --可以看到RMAN的元数据了复制代码
4.还原所有的数据文件
在mount环境下可以看到rman备份的元数据,可以直接使用restore恢复数据库。
RMAN> restore database;复制代码
5.运用日志恢复
运用recover日志尽可能的多恢复数据。
RMAN> recover database; 尝试恢复,使用尽量多的归档恢复。复制代码
7.打开数据库
在数据库备份时由于当前日志没有切换,所以当前日志不在备份中,当前日志的缺失,又使用备份的控制文件,所以是不完全恢复的形式打开数据库。否则无法打开数据库。
RMAN> alter database open resetlogs; 复制代码
总结:这是一个不完全的恢复操作,原因是缺少当前日志文件,所有在下次备份时,最好做一次日志切换,尽最大可能的恢复数据。总体来说RMAN是一个很好用的工具。