Oracle 数据恢复从恢复类型来说,抛开具体的文件,总共可分为两大类型的恢复,一是完全恢复,一个是不完全恢复。其实,熟悉了Oracle
体系结构之后,对于Oracle恢复就会有一个总体的概念。因为Oracle组成的外围部分,主要由不同的文件来组成,每种不同类型的文件有不同的
作用,因此只要了解了其作用,更利于了解与掌握Oralce数据库的备份与恢复。言归正传,完全恢复即是把数据库恢复到最新的SCN,出故障前
的那一刻,是无损恢复。而不完全恢复即是有损恢复,多用于恢复用户误操作,归档日志丢失等情形。本文主要描述基于用户管理的不完全恢复。
一、不完全恢复特性
1、不完全恢复
不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而不是当前时间点。不完全恢复会影响整个数据库,需要在MOUNT状
态下进行。在不完全恢复成功之后,通常需要使用 resetlogs 选项来打开数据库。当使用resetlogs后,SCN 计数器不会被重置,原来的日
志序号 log sequence 会结束,从新开始新的日志序列号。在Oracle里称之为产生一个新的incarnation。同时Oracle还会重置联机重做日
志内容,因此resetlogs之后建议重新全备数据库。
2、不完全恢复的情形
介质故障(media failure)导致部分或全部联机重做日志(online redo log)损坏
用户操作失误(user error)导致数据丢失,例如,用户由于疏忽而移除了表,提交了无效的数据到表
由于归档重做日志(archived redo log)丢失而无法进行完全恢复(complete recovery)
当前控制文件(control file)丢失,必须使用备份的控制文件打开(open)数据库
3、不完全恢复的步骤
关闭数据库并备份数据库(以防止恢复失败)
启动数据库到mount 状态
还原所有数据文件,同时可以选择还原控制文件(注意需要还原所有数据文件,而不仅仅是受损文件)
将数据库恢复至某个时间点、序列、或系统改变号
使用RESETLOGS关键字打开数据库
4、注意
不完全恢复的前提条件是Oracl数据库够到mount状态,即参数文件,控制文件
在做不完全恢复前建议在恢复前后做一次备份,避免恢复失败导致不必要的损失
不完全恢复完成后,建议不要直接使用OPEN RESETLOGS 命令以读/写模式打开(open)数据库,而应先以只读模式打开数据库,并检查是否已
将数据库恢复到正确的时间点。如果恢复的时间点有误,在没有使用OPEN RESETLOGS命令的情况下,重新执行恢复操作相对简单。
对于恢复结果早于指定的时间点,只需重新执行恢复操作。如果恢复结果超过了指定的时间点,则应再次还原数据库并重新进行恢复。
本文中的示例为便于演示,没有在恢复前备份故障数据,也没有在resetlog之后进行备份。
注:Oracle 10g中已经可以在 resetlogs 之后不备份数据库,恢复的时候能够穿越resetlogs
5、不完全介质恢复的几种类型
基于时间的恢复(Time-based recovery) 将数据恢复到指定的时间点
用户控制的恢复(Cancel-based recovery) 当用户提交CANCEL后停止恢复(此选项在使用RMAN时无效)
基于SCN 的恢复(Change-based recovery) 将数据恢复到指定的SCN
按重做日志序号恢复(Log sequence recovery)将数据恢复到指定的重做日志序号(仅使用RMAN时有效)
二、演示基于用户管理的不完全恢复
-
-
- sys@SYBO2SZ>conn/assysdba
- Connected.
- sys@SYBO2SZ>archiveloglist;
- DatabaselogmodeArchiveMode
- AutomaticarchivalEnabled
- Archivedestination/u02/database/SYBO2SZ/archive/
- Oldestonlinelogsequence0
- Nextlogsequencetoarchive1
- Currentlogsequence1
-
- sys@SYBO2SZ>@db_hot_bak
- hocp/u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf/u02/database/SYBO2SZ/backup/hotbak
- hocp/u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf/u02/database/SYBO2SZ/backup/hotbak
- hocp/u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf/u02/database/SYBO2SZ/backup/hotbak
- hocp/u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf/u02/database/SYBO2SZ/backup/hotbak
- hocp/u02/database/SYBO2SZ/oradata/SYBO2SZ_system_tbl.dbf/u02/database/SYBO2SZ/backup/hotbak
- hocp/u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf/u02/database/SYBO2SZ/backup/hotbak
- hocp/u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_tbl.dbf/u02/database/SYBO2SZ/backup/hotbak
- hocp/u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_l_tbl.dbf/u02/database/SYBO2SZ/backup/hotbak
-
- sys@SYBO2SZ>settimeon;
- 12:40:07sys@SYBO2SZ>createtabledeptasselect*fromscott.dept;
-
- 12:40:31sys@SYBO2SZ>createtableempasselect*fromscott.emp;
-
- 12:40:41sys@SYBO2SZ>
- 12:40:55sys@SYBO2SZ>truncatetableemp;
-
- Tabletruncated.
-
- 12:41:02sys@SYBO2SZ>insertintodeptselect50,'DEV','SZ'fromdual;
-
- 12:41:14sys@SYBO2SZ>insertintodeptselect60,'HR','GZ'fromdual;
-
- 12:41:19sys@SYBO2SZ>commit;
-
- Commitcomplete.
-
- 12:41:22sys@SYBO2SZ>altersystemcheckpoint;
-
- Systemaltered.
-
- 12:41:31sys@SYBO2SZ>shutdownimmediate;
-
- 12:42:25sys@SYBO2SZ>startupmount;
- ORACLEinstancestarted.
-
- TotalSystemGlobalArea599785472bytes
- FixedSize2074568bytes
- VariableSize213911608bytes
- DatabaseBuffers377487360bytes
- RedoBuffers6311936bytes
- Databasemounted.
- 12:42:36sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf/u02/database/SYBO2SZ/oradata/.
-
- 12:42:57sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/sys*.dbf/u02/database/SYBO2SZ/oradata/.
-
- 12:43:24sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/undotbs*/u02/database/SYBO2SZ/undo/.
-
- 12:43:50sys@SYBO2SZ>recoverdatabaseuntiltime'2012-08-22:12:40:55';
- Mediarecoverycomplete.
- 12:44:07sys@SYBO2SZ>alterdatabaseopenresetlogs;
-
- Databasealtered.
-
- 12:44:20sys@SYBO2SZ>selectcount(*)fromemp;
-
- COUNT(*)
-
- 14
-
- 12:44:28sys@SYBO2SZ>select*fromdept;
-
- DEPTNODNAMELOC
-
- 10ACCOUNTINGNEWYORK
- 20RESEARCHDALLAS
- 30SALESCHICAGO
- 40OPERATIONSBOSTON
-
- 4rowsselected.
-
-
-
- sys@SYBO2SZ>@db_hot_bak
-
- sys@SYBO2SZ>select*fromdept;
-
- DEPTNODNAMELOC
-
- 10ACCOUNTINGNEWYORK
- 20RESEARCHDALLAS
- 30SALESCHICAGO
- 40OPERATIONSBOSTON
-
- 4rowsselected.
-
- sys@SYBO2SZ>insertintodeptselect50,'DEV','SZ'fromdual;
-
- 1rowcreated.
-
- sys@SYBO2SZ>commit;
-
- Commitcomplete.
-
- sys@SYBO2SZ>selectcurrent_scnfromv$database;
-
- CURRENT_SCN
-
- 471613
-
- sys@SYBO2SZ>insertintodeptselect60,'HR','GZ'fromdual;
-
- sys@SYBO2SZ>commit;
-
- Commitcomplete.
-
- sys@SYBO2SZ>deletefromempwheredeptno=10;
-
- 3rowsdeleted.
-
- sys@SYBO2SZ>commit;
-
- Commitcomplete.
-
- sys@SYBO2SZ>altersystemcheckpoint;
-
- Systemaltered.
-
- sys@SYBO2SZ>shutdownimmediate;
-
- sys@SYBO2SZ>startupmount;
- ORACLEinstancestarted.
-
- TotalSystemGlobalArea599785472bytes
- FixedSize2074568bytes
- VariableSize218105912bytes
- DatabaseBuffers373293056bytes
- RedoBuffers6311936bytes
- Databasemounted.
-
- sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf/u02/database/SYBO2SZ/oradata/.
-
- sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/sys*.dbf/u02/database/SYBO2SZ/oradata/.
-
- sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/undotbs*/u02/database/SYBO2SZ/undo/.
-
- sys@SYBO2SZ>recoverdatabaseuntilchange471613
- Mediarecoverycomplete.
- sys@SYBO2SZ>alterdatabaseopenresetlogs;
-
- Databasealtered.
-
- sys@SYBO2SZ>select*fromdept;
-
- DEPTNODNAMELOC
-
- 10ACCOUNTINGNEWYORK
- 20RESEARCHDALLAS
- 30SALESCHICAGO
- 40OPERATIONSBOSTON
- 50DEVSZ
-
- 5rowsselected.
-
-
-
-
- sys@SYBO2SZ>@db_hot_bak
- sys@SYBO2SZ>select*fromdept;
-
- DEPTNODNAMELOC
-
- 10ACCOUNTINGNEWYORK
- 20RESEARCHDALLAS
- 30SALESCHICAGO
- 40OPERATIONSBOSTON
- 50DEVSZ
-
- sys@SYBO2SZ>hols-hltr/u02/database/SYBO2SZ/archive
- total348K
- -rw-r
- -rw-r
- -rw-r
-
- sys@SYBO2SZ>altersystemswitchlogfile;
-
- Systemaltered.
-
- sys@SYBO2SZ>hols-hltr/u02/database/SYBO2SZ/archive
- total416K
- -rw-r
- -rw-r
- -rw-r
- -rw-r
-
- sys@SYBO2SZ>insertintodeptselect60,'HR','SHANGHAI'fromdual;
-
- sys@SYBO2SZ>insertintodeptselect70,'INFRA','HONGKONG'fromdual;
-
- sys@SYBO2SZ>commit;
-
- Commitcomplete.
-
- sys@SYBO2SZ>altersystemcheckpoint;
-
- Systemaltered.
-
- sys@SYBO2SZ>altersystemarchivelogcurrent;
-
- Systemaltered.
-
- sys@SYBO2SZ>hols-hltr/u02/database/SYBO2SZ/archive
- total420K
- -rw-r
- -rw-r
- -rw-r
- -rw-r
- -rw-r
-
- sys@SYBO2SZ>insertintodeptselect80,'MARKET','BEIJING'fromdual;
-
- sys@SYBO2SZ>commit;
-
- Commitcomplete.
-
- sys@SYBO2SZ>altersystemarchivelogcurrent;
-
- Systemaltered.
-
- sys@SYBO2SZ>hols-hltr/u02/database/SYBO2SZ/archive
- total424K
- -rw-r
- -rw-r
- -rw-r
- -rw-r
- -rw-r
- -rw-r
-
- sys@SYBO2SZ>hostrings/u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc|grepHONGKONG
- HONGKONG
-
- sys@SYBO2SZ>hostrings/u02/database/SYBO2SZ/archive/arch_792003491_1_6.arc|grepBEIJING
- BEIJING
-
- sys@SYBO2SZ>horm/u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc
-
- sys@SYBO2SZ>hols-hltr/u02/database/SYBO2SZ/archive
- total420K
- -rw-r
- -rw-r
- -rw-r
- -rw-r
- -rw-r
-
- sys@SYBO2SZ>shutdownimmediate;
-
- sys@SYBO2SZ>startupmount;
- ORACLEinstancestarted.
-
- TotalSystemGlobalArea599785472bytes
- FixedSize2074568bytes
- VariableSize243271736bytes
- DatabaseBuffers348127232bytes
- RedoBuffers6311936bytes
- Databasemounted.
- sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf/u02/database/SYBO2SZ/oradata/.
-
- sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/sys*.dbf/u02/database/SYBO2SZ/oradata/.
-
- sys@SYBO2SZ>hocp/u02/database/SYBO2SZ/backup/hotbak/undotbs*/u02/database/SYBO2SZ/undo/.
-
- sys@SYBO2SZ>recoverdatabaseuntilcancel;
- ORA-00279:change494124generatedat08/22/201217:02:30neededforthread1
- ORA-00289:suggestion:/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc
- ORA-00280:change494124forthread1isinsequence#4
-
- Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}
- /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc
- ORA-00279:change494189generatedat08/22/201217:04:46neededforthread1
- ORA-00289:suggestion:/u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc
- ORA-00280:change494189forthread1isinsequence#5
- ORA-00278:logfile'/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc'nolongerneededforthisrecovery
-
- Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}
- cancel
- Mediarecoverycancelled.
- sys@SYBO2SZ>alterdatabaseopenresetlogs;
-
- Databasealtered.
-
- sys@SYBO2SZ>select*fromdept;
-
- DEPTNODNAMELOC
-
- 10ACCOUNTINGNEWYORK
- 20RESEARCHDALLAS
- 30SALESCHICAGO
- 40OPERATIONSBOSTON
- 50DEVSZ
-
- 5rowsselected.
三、更多参考
有关基于用户管理的备份和备份恢复的概念请参考
Oracle 冷备份
Oracle 热备份
Oracle 备份恢复概念
Oracle 实例恢复
Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)
SYSTEM 表空间管理及备份恢复
SYSAUX表空间管理及恢复
有关RMAN的备份恢复与管理请参考
RMAN 概述及其体系结构
RMAN 配置、监控与管理
RMAN 备份详解
RMAN 还原与恢复
RMAN catalog 的创建和使用
基于catalog 创建RMAN存储脚本
基于catalog 的RMAN 备份与恢复
RMAN备份路径困惑(使用plus archivelog时)
有关ORACLE体系结构请参考
Oracle 表空间与数据文件
Oracle 密码文件
Oracle 参数文件
Oracle 联机重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 归档日志
Oracle 回滚(ROLLBACK)和撤销(UNDO)
Oracle 数据库实例启动关闭过程
Oracle 10g SGA 的自动化管理
Oracle 实例和Oracle数据库(Oracle体系结构)