1、Oracle数据库多种故障场景Rman恢复手册10vORACLE数据库各种故障场景RMAN恢复操作手册文件状态:【 】草 稿【 】修 改 稿【 】正式发布公 司尚福科技保 密 等 级作 者福哥最后完成日期2015-01-29审核人员最后审核日期修改记录日期版本作者/修改者修订类型描述2015-01-291.0/福武修改目 录1 概述 11.1 前言 11.2 备份与恢复重要性 12 数据库环境说明 13 数据库系统环境要求 14 RMAN异机恢复场景 24.1 数据完全恢复方式 24.1.1 完全恢复场景 24.2 数据不完全恢复方式 54.2.1 基于时间点恢复场景 54.2.2 基于tab
2、lespace恢复场景 95 RMAN本机恢复场景 145.1 数据完全恢复方式 145.1.1 所有数据文件被误删恢复场景 145.1.2 单个数据文件被误删除恢复场景 165.1.3 数据文件所在ASM磁盘组故障恢复场景 185.1.4 控制文件损坏恢复场景 236 恢复结束 251 概述1.1 前言随着商业银行业务规模的扩大,信息系统处理和存储的数据量不断增加,对信息系统稳定和数据的可用性提出了严格要求。如何保障系统数据的安全完整、保障银行业务系统的正常持续运行越来越重要。为了更加有效保障业务系统数据的安全性与可靠性。为此,结合XX银行业务系统的实际情况,制定了Oracle数据库各种故障
3、场景恢复方案。以便在突如其来的数据库各种故障面前,能迅速确认故障类型、评估风险、选择有效而快速的恢复方案。1.2 备份与恢复重要性数据库备份与恢复是为了保护一个数据库免于数据损失或者在发生数据损失后进行数据重新创建的各种策略、步骤和方法。数据库系统在运行中,随时可能发生各种故障。在发生故障后,能快速、有效的根据业务需求使用备份文件进行完全库恢复或按不完全恢复。2 数据库环境说明项目名称Oracle数据库源主机Oracle数据库目标主机系统平台Linux Rehat 5.5Linux Rehat 5.5主机名称lzsjptdb01p/ lzsjptdb02plzsjptdbIP地址11.66.1
4、.xx/xx11.66.1.xxOracle版本Oracle Release 11.1.0.6.0Oracle Release 11.1.0.6.0数据库模式RAC单实例或RAC数据文件存储FilesystemFilesystem实例名ORADBORADB数据文件路径ASM磁盘本地系统文件或ASM磁盘3 数据库系统环境要求(1) 安装操作系统Linux Rehat 5.5,过程省略;(2) Oracle 11g R1 数据库软件安装,过程省略;(3) 创建一个实例与源数据库实例一致。4 RMAN异机恢复场景4.1 数据完全恢复方式4.1.1 完全恢复场景场景描述:数据库业务系统,由于故障(硬件
5、或软件故障),导致数据库系统全面崩溃,数据库无法正常运行,业务中断。故障分析:短时间内无法恢复数据库故障,需要紧急切换到备机数据库系统。恢复方式:选择完全恢复方式。恢复步骤:(1)备份文件管理。从源数据库系统的备份目录中拷贝出“控制文件备份”、“数据库全备文件”、“归档日志备份文件”到目标数据库系统指定目录下。(2)恢复控制文件。登录RMAN管理中心,先shutdown immediate 实例,然后在把实例启动到nomount状态下set DBID(dbid要与源数据库实例相同),使用从源数据库拷贝过来的控制文件备份,进行restoer Control文件。命令:oraclestat $ r
6、man target /RMAN startup nomount;RMAN set dbid 2573003471;RMAN restore controlfile from /path /controlfile.ctl;(3)恢复数据文件。把数据库实例启动到mount的状态下,先注册从源数据库拷贝过来的备份集(数据库全备文件)到rman中,通过list backup命令查看SCN号和Elapsed Time。然后使用RESTORE命令转储数据文件备份。命令:RMAN alter database mount;RMAN catalog start with /path /数据库全备文件.bak
7、 ;RMAN run set newname for datafile 1 to /path/oradb/system.dbf;set newname for datafile 2 to /path/oradb/sysaux.dbf;set newname for datafile 3 to /path/oradb/undotbs1.dbf;set newname for datafile 4 to /path/oradb/users.dbf;allocate channel c1 device type disk;allocate channel c2 device type disk;al
8、locate channel c3 device type disk;restore database;switch datafile all;release channel c1;release channel c2;release channel c3;备注:由于源数据库数据文件路径是ASM磁盘,因此需要将数据文件定义到新的路径上。(4)Recover数据库。先注册从源数据库拷贝过来的归档备份文件备份集到rman中,然后通过RECOVER命令将数据文件恢复到失败点的状态,或者说Oracle会自行根据archived log里面的信息来恢复到控制文件记录最终点。命令:RMAN catalog
9、 start with /path /归档备份文件.bak; RMAN run allocate channel c1 device type disk;allocate channel c2 device type disk;allocate channel c3 device type disk;recover database;release channel c1;release channel c2;release channel c3;(5)修改在线日志文件。由于在线重做文件源数据库路径是在ASM磁盘组,需要重命名或者重建在线重做日志。使用sqlplus 登录修改。命令:oracle
10、lzoracle01t$ sqlplus / as sysdbaSQL*Plus: Release 11.1.0.6.0 - Production on Wed Feb 4 11:44:06 2015Copyright (c) 1982, 2007, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Applica
11、tion Testing options -查看在线重做日志原来的路径-SQL select GROUP# ,STATUS,MEMBER,IS_RECOVERY_DEST_FILE from v$logfile; GROUP# STATUS MEMBER IS_RECOVERY_DEST_FILE - - - - 4 ONLINE +DATADG/oradb/onlinelog/group_4.264.819738751 NO 3 ONLINE +DATADG/oradb/onlinelog/group_3.263.819738729 NO 2 ONLINE +DATADG/oradb/onl
12、inelog/group_2.262.819738713 NO 1 ONLINE +DATADG/oradb/onlinelog/group_1.261.819738703 NO -修改在线重做日志的路劲-SQL alter database rename file +DATADG/redo01.log to /path/redo01.log; alter database rename file +DATADG/redo02.log to /path/redo02.log; alter database rename file +DATADG/redo03.log to /path/redo
13、03.log; alter database rename file +DATADG/redo04.log to /path/redo04.log;Database altered. -查看修改后在线重做日志的路劲状态-SQL select GROUP# ,STATUS,MEMBER,IS_RECOVERY_DEST_FILE from v$logfile; GROUP# STATUS MEMBER IS_RECOVERY_DEST_FILE - - - - 4 ONLINE /app/oracle/oradata/oradb/redo01.log NO 3 ONLINE /app/oracl
14、e/oradata/oradb/redo02.log NO 2 ONLINE /app/oracle/oradata/oradb/redo03.log NO 1 ONLINE /app/oracle/oradata/oradb/redo04.log NO(6)Open数据库。以Resetlogs打开数据库后,会复位日志序列号,并生成新的数据库副本。 命令:RMAN alter database open resetlogs;database opened(7)重建临时表空间。由于RMAN是不备份temp 表空间的,所以目前temp 表空间是不可用的,同时temp01.dbf临时表空间的数据文件
15、也是不存在的。需要给临时表空间添加数据文件。 命令:SQL set line 200-查看源temp file-SQL select name from v$tempfile; NAME-+DATADG/oradb/tempfile/temp.265.819738817-添加临时表空间新数据-SQLalter tablespace temp add tempfile /app/oracle/oradata/oradb/temp01.dbf size 1024m;-查看添加临时表空间数据文件-SQL select name from v$tempfile; NAME-+DATADG/oradb/
16、tempfile/temp.265.819738817/app/oracle/oradata/oradb/temp01.dbf-把旧临时表空间数据文件修改为offline状态-SQL alter database tempfile +DATADG/oradb/tempfile/temp.265.819738817 offline;Database altered. -drop旧临时表空间数据文件-SQL alter database tempfile +DATADG/oradb/tempfile/temp.265.819738817 drop including datafiles;Datab
17、ase altered.4.2 数据不完全恢复方式4.2.1 基于时间点恢复场景场景描述:某财务总账数据库业务系统,业务员在进行对账时,不小心造成部分数据混乱或者出现错误。业务员要求查看未对账之前的所有数据。由于该财务总账数据库业务系统是实时性,不能停数据库进行恢复。经过与数据库管理员讨论,决定在数据库备机系统进行数据恢复。故障分析: 原业务数据库不能动。业务员要求恢复数据到故障前(未对账前数据)的某个时间点,而在对账之后的时间段里所产生的数据都不需要恢复。由此,选择基于某个时间点不完全恢复方式,比如故障时间点是:2015-02-05 11:25:30。恢复方式: 基于时间点恢复恢复步骤:(1
18、)备份文件管理。查看源数据库系统的备份目录及备份时间,从中选择正确而易于恢复 “控制文件备份”、“数据库全备文件”、“归档日志文件”拷贝到目标数据库系统指定目录下。(2)恢复控制文件。登录RMAN管理中心,先shutdown immediate 实例,然后在把实例启动到nomount状态下set DBID(dbid要与源数据库实例相同),使用从源数据库拷贝过来的控制文件备份,进行restoer Control文件。命令:oraclestat $ export NLS_DATE_FORMAT=yyyy-mm-dd hh24:mi:ssoraclestat $ rman target / RMAN
19、 startup nomount;RMAN set dbid 2573003471;RMAN restore controlfile from /path /controlfile.ctl;(3)恢复数据文件。把数据库实例启动到mount的状态下,先注册从源数据库拷贝过来的备份集(数据库全备文件)到rman中,然后使用RESTORE命令转储数据文件备份。命令:RMAN alter database mount;RMAN catalog start with /path /数据库全备文件.bak ;RMAN run set newname for datafile 1 to /path/orad
20、b/system.dbf;set newname for datafile 2 to /path/oradb/sysaux.dbf;set newname for datafile 3 to /path/oradb/undotbs1.dbf;set newname for datafile 4 to /path/oradb/users.dbf;allocate channel c1 device type disk;allocate channel c2 device type disk;allocate channel c3 device type disk;restore database
21、;switch datafile all;release channel c1;release channel c2;release channel c3;备注:由于源数据库数据文件路径是ASM磁盘,因此需要将数据文件定义到新的路径上。(4)catalog归档备份集。先注册从源数据库拷贝过来的归档备份文件备份集到rman中,通过list backup命令查看归档日志文件时间状态。命令:RMAN catalog start with /path /归档备份文件.bak;RMAN list backup;(5)Recover数据库。根据业务要求,通过RECOVER命令将数据文件恢复到故障点(某个时
22、间点)之前的状态。 命令: RMAN run allocate channel c1 device type disk;allocate channel c2 device type disk;allocate channel c3 device type disk;recover database until time 2015-02-05 11:25:30;release channel c1;release channel c2;release channel c3;(6)修改在线日志文件。由于在线重做文件源数据库路径是在ASM磁盘组,需要重命名或者重建在线重做日志。使用sqlplus
23、登录修改。oraclelzoracle01t$ sqlplus / as sysdbaSQL*Plus: Release 11.1.0.6.0 - Production on Wed Feb 4 11:44:06 2015Copyright (c) 1982, 2007, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and R
24、eal Application Testing options -查看在线重做日志原来的路径-SQL select GROUP# ,STATUS,MEMBER,IS_RECOVERY_DEST_FILE from v$logfile; GROUP# STATUS MEMBER IS_RECOVERY_DEST_FILE - - - - 4 ONLINE +DATADG/oradb/onlinelog/group_4.264.819738751 NO 3 ONLINE +DATADG/oradb/onlinelog/group_3.263.819738729 NO 2 ONLINE +DATAD
25、G/oradb/onlinelog/group_2.262.819738713 NO 1 ONLINE +DATADG/oradb/onlinelog/group_1.261.819738703 NO -修改在线重做日志的路劲-SQL alter database rename file +DATADG/redo01.log to /path/redo01.log; alter database rename file +DATADG/redo02.log to /path/redo02.log; alter database rename file +DATADG/redo03.log to
26、 /path/redo03.log; alter database rename file +DATADG/redo04.log to /path/redo04.log;Database altered. -查看修改后在线重做日志的路劲状态-SQL select GROUP# ,STATUS,MEMBER,IS_RECOVERY_DEST_FILE from v$logfile; GROUP# STATUS MEMBER IS_RECOVERY_DEST_FILE - - - - 4 ONLINE /app/oracle/oradata/oradb/redo01.log NO 3 ONLINE
27、 /app/oracle/oradata/oradb/redo02.log NO 2 ONLINE /app/oracle/oradata/oradb/redo03.log NO 1 ONLINE /app/oracle/oradata/oradb/redo04.log NO(7)Open数据库。以Resetlogs打开数据库后,会复位日志序列号,并生成新的数据库副本。 命令:RMAN alter database open resetlogs;database opened(8)重建临时表空间。由于RMAN是不备份temp 表空间的,所以目前temp 表空间是不可用的,同时temp01.dbf临时表空间的数据文件也是不存在的。需要给临时表空间添加数据文件。 命令:SQL set line 200-查看源temp file-SQL select name from v$tempfile; NAME-+DATADG/oradb/tempfile/temp.265.819738817-添加临时表空间新数据-SQLalter tablespace temp add tempfile /app/oracle/oradata/oradb/temp01.dbf size 1024m;-查看添加临时表空间数据文件-SQL select name from v$tempfile; NAME-