如何利用RMAN备份重建数据库

这篇文章主要介绍了如何利用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备份重建数据库”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


分享文章:如何利用RMAN备份重建数据库
文章源于:http://myzitong.com/article/ppiggc.html