ITPub博客

利用RMAN备份重建数据库

原创 Oracle 作者:llnnmc 时间:2018-05-03 20:42:28 0 删除 编辑

有时数据库由于某些原因需要全部销毁重建,之前的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数据库的重新创建和恢复。

 

8RMAN异地恢复需要注意的问题

 

根据备份文件存放的目录位置,修改指向后再还原

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就没有问题了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28974745/viewspace-2153785/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Oracle坏块处理
请登录后发表评论 登录
全部评论

注册时间:2016-12-29

  • 博文量
    90
  • 访问量
    55625