这篇文章主要介绍了如何利用RMAN备份重建数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
有时数据库由于某些原因需要全部销毁重建,之前的RMAN备份是存在的,希望利用,如系统被重建而导致数据库重建,或者数据库备份后需要恢复到其它机器上。
一、重建前的准备
1、准备测试用表
在RMES用户下创建测试用表,插入并提交数据
create table rmes.r_rmantest_t(a varchar2(30)) tablespace rmes;
insert into rmes.r_rmantest_t values('Before rman backup');
commit;
做一次检查点操作,保证数据写入到数据文件中
alter system checkpoint;
2、准备备份路径
创建数据文件备份路径e:\rman_bak\mes
创建控制文件和初始化参数文件备份路径e:\rman_bak\mes\control_bak
创建联机日志文件备份路径e:\rman_bak\mes\redolog
3、配置RMAN备份参数
登录RMAN,查看并配置RMAN的备份参数
show all;
控制文件和spfile文件自动备份设为on,并配置备份路径
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'e:\rman_bak\mes\control_bak\%F';
配置数据文件备份路径
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'e:\rman_bak\mes\%d_%u_%c_%T';
确认备份参数的更改
show all;
4、全备份
backup as compressed backupset database plus archivelog;
5、更新测试用表
完成备份后再插入一条记录到测试表中
insert into rmes.r_rmantest_t values('After rman backup');
commit;
不做检查点,这样数据只记录在联机日志中,不会马上写入数据文件。
6、备份联机日志文件
在操作系统下将联机日志文件复制到备份目录e:\rman_bak\mes\redolog
所有的备份都已完备,现在可以在本机上用DBCA销毁数据库,或者将备份文件转出到其他机器上进行数据库重建。
二、重建数据库
1、重建实例服务
在操作系统命令提示符下执行oradim命令,创建名为mes的服务,并设置环境变量
C:\> oradim -new -sid mes
C:\> set oracle_sid=mes
2、还原服务器参数文件并重建丢失的目录
登陆RMAN
C:\Users\Administrator>rman target /
恢复管理器: Release 11.2.0.4.0 - Production on 星期四 5月 3 16:55:47 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库 (未启动)
使用之前的备份,在非加载模式下还原spfile服务器参数文件
RMAN> startup nomount
启动失败: ORA-01078: failure in processing system parameters
LRM-00109: ???????????????? 'C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\INITMES.ORA'
在没有参数文件的情况下启动 Oracle 实例以检索 spfile
Oracle 实例已启动
系统全局区域总计 1068937216 字节
Fixed Size 2288080 字节
Variable Size 285214256 字节
Database Buffers 775946240 字节
Redo Buffers 5488640 字节
RMAN> restore spfile from 'e:\rman_bak\mes\control_bak\C-2056489697-20180503-01';
启动 restore 于 2018-05-03 16:58:49
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=396 设备类型=DISK
通道 ORA_DISK_1: 正在从 AUTOBACKUP e:\rman_bak\mes\control_bak\C-2056489697-20180503-01 还原 spfile
通道 ORA_DISK_1: 从 AUTOBACKUP 还原 SPFILE 已完成
完成 restore 于 2018-05-03 16:58:50
创建pfile文件
RMAN> sql'create pfile from spfile';
sql 语句: create pfile from spfile
Windows中该文件默认位置为%ORACLE_HOME%\database\INITmes.ORA
打开pfile文本文件,将文件中提及的目录创建起来,如本例中需要保证以下目录存在
C:\Oracle\admin\mes\adump\
D:\ORADATA\MES\
E:\FAST_RECOVERY_AREA\MES\
E:\fast_recovery_area\mes\archivelog\
3、还原控制文件
用还原的服务器参数文件重启实例到非加载模式,还原控制文件
RMAN> shutdown abort
Oracle 实例已关闭
RMAN> startup nomount
已连接到目标数据库 (未启动)
Oracle 实例已启动
系统全局区域总计 1286066176 字节
Fixed Size 2280896 字节
Variable Size 771752512 字节
Database Buffers 503316480 字节
Redo Buffers 8716288 字节
RMAN> restore controlfile from 'e:\rman_bak\mes\control_bak\C-2056489697-20180503-01';
启动 restore 于 2018-05-03 17:06:41
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=156 设备类型=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:02
输出文件名=D:\ORADATA\MES\CONTROL01.CTL
输出文件名=E:\FAST_RECOVERY_AREA\MES\CONTROL02.CTL
完成 restore 于 2018-05-03 17:06:43
4、还原数据库
用还原的控制文件加载数据库
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
还原数据库
RMAN> restore database;
启动 restore 于 2018-05-03 17:19:26
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 D:\ORADATA\MES\SYSTEM01.DBF
通道 ORA_DISK_1: 将数据文件 00002 还原到 D:\ORADATA\MES\SYSAUX01.DBF
通道 ORA_DISK_1: 将数据文件 00003 还原到 D:\ORADATA\MES\UNDOTBS01.DBF
通道 ORA_DISK_1: 将数据文件 00004 还原到 D:\ORADATA\MES\USERS01.DBF
通道 ORA_DISK_1: 将数据文件 00005 还原到 D:\ORADATA\MES\EXAMPLE01.DBF
通道 ORA_DISK_1: 将数据文件 00006 还原到 D:\ORADATA\MES\CMES01.DBF
通道 ORA_DISK_1: 将数据文件 00007 还原到 D:\ORADATA\MES\RMES01.DBF
通道 ORA_DISK_1: 将数据文件 00008 还原到 D:\ORADATA\MES\HMES01.DBF
通道 ORA_DISK_1: 将数据文件 00009 还原到 D:\ORADATA\MES\INDX01.DBF
通道 ORA_DISK_1: 将数据文件 00010 还原到 D:\ORADATA\MES\FDA01.DBF
通道 ORA_DISK_1: 正在读取备份片段 E:\RMAN_BAK\MES\MES_85T1VQN6_1_20180503
通道 ORA_DISK_1: 段句柄 = E:\RMAN_BAK\MES\MES_85T1VQN6_1_20180503 标记 = TAG20180503T163757
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:56
完成 restore 于 2018-05-03 17:20:23
期间可能会遭遇ORA-19693:已包括备份片段的错误提示,这个是由于控制文件中的备份信息被重复编目所致。可以先将备份文件路径改名,然后进行一次交叉检查crosscheck backup,再用delete expired backup删除和注销备份信息,之后再进行重新编目注册备份catalog start with '...',经此处理后再进行restore还原应该可以解决问题。
5、拷回联机日志文件
确认联机日志文件应当存放的位置
17:16:07 SYS @ mes AS SYSDBA>select member from v$logfile;
MEMBER
------------------------------------------------------------
D:\ORADATA\MES\REDO03.LOG
D:\ORADATA\MES\REDO02.LOG
D:\ORADATA\MES\REDO01.LOG
在操作系统下将备份在e:\rman_bak\mes\redolog中的联机日志文件拷回到指定的联机日志目录中。
6、恢复并打开数据库
如果之前使用了块改变跟踪,则应当在执行恢复前先取消块改变跟踪,因为块改变跟踪的DBF数据文件已不存在,RMAN备份时不会去备份它
alter database disable block change tracking;
恢复数据库
RMAN> recover database;
启动 recover 于 2018-05-03 17:21:18
使用通道 ORA_DISK_1
正在开始介质的恢复
线程 1 序列 7 的归档日志已作为文件 D:\ORADATA\MES\REDO01.LOG 存在于磁盘上
线程 1 序列 8 的归档日志已作为文件 D:\ORADATA\MES\REDO02.LOG 存在于磁盘上
归档日志文件名=D:\ORADATA\MES\REDO01.LOG 线程=1 序列=7
归档日志文件名=D:\ORADATA\MES\REDO02.LOG 线程=1 序列=8
介质恢复完成, 用时: 00:00:01
完成 recover 于 2018-05-03 17:21:23
打开数据库,重置联机日志序列
RMAN> alter database open resetlogs;
数据库已打开
7、验证数据的恢复
查看测试用表,验证数据是否完整恢复
17:18:45 SYS @ mes AS SYSDBA>select * from rmes.r_rmantest_t;
A
------------------------------
Before rman backup
After rman backup
至此,完成了mes数据库的重新创建和恢复。
8、RMAN异地恢复需要注意的问题
根据备份文件存放的目录位置,修改指向后再还原
catalog start with 'e:\rman_bak\mes';
restore database;
从10g恢复到11g环境时需注意:
1)恢复前执行预升级工具脚本utlirp.sql
2)恢复数据库
3)以startup upgrade方式打开数据库
4)执行升级脚本catupgrd.sql
如果事先没有执行预升级脚本,则执行以上脚本时会报错,因为表registry$database缺少TZ_VERSION字段。解决方法是修改表registry$database,增加tz_version字段,number类型,并重新插入记录
truncate table registry$database;
insert into registry$database
(platform_id,platform_name,edition,tz_version)
values
((select platform_id from v$database),
(select platform_name from v$database),
null,
(select version from v$timezone_file));
之后再执行升级脚本catupgrd.sql就没有问题了。
感谢你能够认真阅读完这篇文章,希望小编分享的“如何利用RMAN备份重建数据库”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。