1 完全恢复
如果数据文件的一个备份与所有必需的归档日志、联机重做日志以及控制文件的副本都可用,那么在任意数量的任何数据文件受损的情况下,数据库都可以幸存,并且不会丢失任何数据。
数据文件(不包括system表空间和当前活动的撤销表空间)完全恢复步骤:
(1) 使受损的数据文件脱机
(2) 还原受损的数据文件
(3) 恢复受损的数据文件
RMAN>run {
sql "alter tablespace example offline immediate"; --使受损的数据文件脱机
restore tablespace example; --还原受损的数据文件
recover tablespace example delete archivelog; --恢复受损的数据文件
sql "alter tablespace example online";} --使已恢复的数据文件联机不完全恢复的场合
2 不完全恢复的方法
不完全恢复意味着会丢失数据。
需要不完全恢复的原因:
。无法进行完全恢复
。有意丢失某些数据
如果丢失了某个归档日志或丢失了当前联机重做日志的所有副本,那么就需要进行不完全恢复。
不完全恢复的方法:
。sqlplus恢复
。RMAN恢复
不完全恢复的步骤:
(1) 加载数据库。
(2) 还原所有数据文件,同时可以选择还原控制文件。
(3) 将数据库恢复至某个时间点、序列或系统改变号。
(4) 使用resetlogs关键字打开数据库。
不完全恢复与完全恢复的不同点:
(1) 只要损失文件不是关键文件就可以进行不完全恢复,不完全恢复只能在加载模式中进行。
(2) 所有不完全恢复操作都会首先还原所有的数据文件。
(3) 应用来自归档日志的重做,将还原的文件恢复至指定的时间点。
(4) 使用resetlogs关键字打开数据库,会创建新的数据库的一个新场景。
数据库的场景(incarnation):指的是数据库的一个版本,该版本具有从日志切换序列号1开始的新重做线程。
执行不完全恢复时,必须作为SYSDBA用户进行连接。
不完全恢复的选项:
(1) 恢复至某个时间点(until time):通过应用重做将数据文件向后回滚至某个特定的时间点,时间精度为妙。一般用于修正用户错误。
(2) 恢复至某个系统改变号(rman:until scn;sqlplus:until change):用于已知出差时准确的系统改变号。
(3) 恢复至某个日志序列号(rman:until sequence;sqlplus:until cancel):用于丢失某个某个归档日志文件或联机重做文件组。
不完全恢复的最优方法:
。恢复前,完整地关闭数据库。
。在不完全恢复完后,应当进行一次全部备份操作。
。在不完全恢复完后,查看不完全备份是否真正成功。通过startup restrict命令来验证。
。在不完全恢复完后,将前一个场景的归档日志全部删除。
3 使用sqlplus进行不完全恢复
3.1 until time恢复
步骤:
Shutdown immediate;
Startup mount;
Recover database until time ‘2012-01-01:18:18:18’;
Alter database open resetlogs;
Until time 恢复的格式是固定的,也就是必须为“yyyy-mm-dd:hh24:mi:ss”。
查询视图v$log确定以丢失的当前日志文件组的日志序列号
执行until cancel恢复将数据库恢复至该日志序列号
Recover database until cancel;
3.3 until change恢复
执行until change恢复将数据库恢复至某个系统改变号
Recovery database until change 101101;
Until change 恢复会停止在指定scn(101101)前的scn(101100)。
4 使用RMAN的不完全恢复
4.1 until time恢复
RMAN>run {
allocate channel d1 type disk;
allocate channel t1 type sbt_tape;
shutdown immediate;
startup mount;
sql "alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss''";
set until time '1-jan-2012 18:18:18';
restore database;
recover database;
alter database open resetlogs;}
4.2 until sequence 恢复
RMAN>run {
shutdown immediate;
startup mount;
set until sequence 10303 thread 1;
restore database;
recover database;
alter database open resetlogs;}
4.3 until scn 恢复
RMAN>run {
shutdown immediate;
startup mount;
set until scn 38831;
restore database;
recover database;
alter database open resetlogs;}
例子:
1 准备 system@ORCL>select log_mode from v$database; LOG_MODE ------------ ARCHIVELOG
system@ORCL>select archiver from v$instance; ARCHIVE ------- STARTED
system@ORCL>set time on 14:51:30 system@ORCL>create table test_rec as select * from all_users;
表已创建。 1 RMAN备份 C:\>rman target /
恢复管理器: Release 10.2.0.4.0 - Production on 星期四 5月 10 14:53:57 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到目标数据库: ORCL (DBID=1308114557)
RMAN> backup database; 启动 backup 于 10-5月 -12 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=138 devtype=DISK 通道 ORA_DISK_1: 启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _UNDOTBS1_7RBDDGN0_.DBF 输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _SYSTEM_7RBDD3PY_.DBF 输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _SYSAUX_7RBDDK4D_.DBF 输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _USERS_7RBDDPSW_.DBF 输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\OCP10 GDATA01.DBF 输入数据文件 fno=00006 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\UNDO0 2.DBF 输入数据文件 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNDO_NG01.DBF
输入数据文件 fno=00008 name=E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNDO_G01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 10-5月 -12 通道 ORA_DISK_1: 已完成段 1 于 10-5月 -12 段句柄 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_10\O1_MF_NNNDF_TAG20120510T145710_7TPSP7TC_.BKP 标记 =TAG20120510T145710 注释=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:46 完成 backup 于 10-5月 -12
启动 Control File and SPFILE Autobackup 于 10-5月 -12 段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2012_05_1 0\O1_MF_S_782924276_7TPSQOQG_.BKP comment=NONE 完成 Control File and SPFILE Autobackup 于 10-5月 -12 2 删除新建的表 14:52:18 system@ORCL> 14:59:08 system@ORCL> 14:59:15 system@ORCL>drop table test_rec;
表已删除。
14:59:33 system@ORCL>select count(*) from test_rec; select count(*) from test_rec * 第 1 行出现错误: ORA-00942: 表或视图不存在 3 RMAN恢复 RMAN>run { shutdown immediate; startup mount; sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''"; set until time '2012-05-10 14:59:15'; restore database; recover database; alter database open resetlogs;} 使用目标数据库控制文件替代恢复目录 数据库已关闭 数据库已卸装 Oracle 实例已关闭
已连接到目标数据库 (未启动) Oracle 实例已启动 数据库已装载
系统全局区域总计 532676608 字节
Fixed Size 1297700 字节 Variable Size 301990620 字节 Database Buffers 222298112 字节 Redo Buffers 7090176 字节
sql 语句: alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''
正在执行命令: SET until clause
启动 restore 于 10-5月 -12 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件 正将数据文件00001还原到 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_SYST EM_7RBDD3PY_.DBF 正将数据文件00002还原到 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_UNDO TBS1_7RBDDGN0_.DBF 正将数据文件00003还原到 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_SYSA UX_7RBDDK4D_.DBF 正将数据文件00004还原到 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_USER S_7RBDDPSW_.DBF 正将数据文件00005还原到 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\OCP10GDATA 01.DBF 正将数据文件00006还原到 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\UNDO02.DBF 正将数据文件00007还原到 E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNDO_NG01.DBF 正将数据文件00008还原到 E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNDO_G01.DBF 通道 ORA_DISK_1: 正在读取备份片段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\O RCL\BACKUPSET\2012_05_10\O1_MF_NNNDF_TAG20120510T145710_7TPSP7TC_.BKP 通道 ORA_DISK_1: 已还原备份片段 1 段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_10\O1_MF_NNNDF_TAG20120510T145710_7TPSP7TC_.BKP 标记 = TAG20120510T145710 通道 ORA_DISK_1: 还原完成, 用时: 00:02:07 完成 restore 于 10-5月 -12
启动 recover 于 10-5月 -12 使用通道 ORA_DISK_1
正在开始介质的恢复 介质恢复完成, 用时: 00:00:03
完成 recover 于 10-5月 -12
数据库已打开 4 检查是否恢复成功 15:22:43 system@ORCL>select count(*) from test_rec; COUNT(*) ---------- 25 15:22:48 system@ORCL>select group#,sequence#, status from v$log; GROUP# SEQUENCE# STATUS ---------- ---------- ------------------------------------------ 1 1 CURRENT 2 0 UNUSED 3 0 UNUSED 5 备份一个新的备份 RMAN> backup database; |
5 使用EM的不完全恢复
拥有sysdba的用户才能进行不完全恢复。
6 控制文件的恢复
控制文件的恢复采用用于不完全恢复的方法,实际上不会丢失数据。
需要还原控制文件的一种特殊情况是:表空间被删除。
6.1 创建新的控制文件
sys@ORCL>alter database backup controlfile to trace;
数据库已更改。
在USER_DUMP_DEST parameter 指定的目录中生成一个跟踪文件。这个跟踪文件中含有create controlfile命令的语句,通过这条语句就可以生成控制文件。
6.2 使用sqlplus还原控制文件
关闭数据库,直接使用操作系统命令进行copy。
数据库在线时使用以下命令
sys@ORCL>alter database backup controlfile to 'd:\control_bak.ctl';
数据库已更改。
在数据库加载时,使用以下命令进行恢复
sys@ORCL>recover database until cancel using backup controlfile;
6.3 使用RMAN还原控制文件
RMAN备份控制文件的方法
RMAN>backup as copy current controlfile;
RMAN>backup as backupset current controlfile;
RMAN>backup tablespace system including current controlfile;
RMAN>configure controlfile autobackup on;
RMAN还原控制文件
RMAN>restore controlfile from autobackup;
Or
RMAN>set dbid 1234567890
RMAN>run{
startup nomount;
restore controlfile from autobackup;
alter database mount;
recover database;
alter database open resetlogs;}
例子:
1 PMAN备份 RMAN> configure controlfile autobackup on; RMAN> backup database;
启动 backup 于 10-5月 -12 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _UNDOTBS1_7RBDDGN0_.DBF 输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _SYSTEM_7RBDD3PY_.DBF 输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _SYSAUX_7RBDDK4D_.DBF 输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF _USERS_7RBDDPSW_.DBF 输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\OCP10 GDATA01.DBF 输入数据文件 fno=00006 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\UNDO0 2.DBF 输入数据文件 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNDO_NG01.DBF
输入数据文件 fno=00008 name=E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNDO_G01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 10-5月 -12 通道 ORA_DISK_1: 已完成段 1 于 10-5月 -12 段句柄 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2012_05_10\O1_MF_NNNDF_TAG20120510T152551_7TPVD0SW_.BKP 标记 =TAG20120510T152551 注释=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:46 完成 backup 于 10-5月 -12
启动 Control File and SPFILE Autobackup 于 10-5月 -12 段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2012_05_10\O1_MF_S_782925997_7TPVFFYR_.BKP comment=NONE 完成 Control File and SPFILE Autobackup 于 10-5月 -12 1 模拟全部控制文件丢失 sys@ORCL>select name from v$controlfile; NAME ------------------------------------------------------------ E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_7RBDCXXS_.CTL
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\ O1_MF_7RBDCY2G_.CTL
E:\ORACLE\CONTROLFILE\CONTROL03_.CTL
sys@ORCL>select dbid from v$database; DBID ----------
sys@ORCL>shutdown abort; ORACLE 例程已经关闭。 idle>startup; ORACLE 例程已经启动。 Total System Global Area 532676608 bytes Fixed Size 1297700 bytes Variable Size 301990620 bytes Database Buffers 222298112 bytes Redo Buffers 7090176 bytes ORA-00205: ?????????, ??????, ??????? 2 RMAN恢复控制文件 RMAN> set dbid 1308114557 Set dbid命令要在run{}运行块外部运行。 正在执行命令: SET DBID
RMAN> run{ 2> shutdown abort; 3> startup nomount; 4> restore controlfile from autobackup; 5> alter database mount; 6> recover database; 7> alter database open resetlogs;}
Oracle 实例已关闭
已连接到目标数据库 (未启动) Oracle 实例已启动
系统全局区域总计 532676608 字节
Fixed Size 1297700 字节 Variable Size 301990620 字节 Database Buffers 222298112 字节 Redo Buffers 7090176 字节
启动 restore 于 10-5月 -12 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=157 devtype=DISK
恢复区目标: E:\oracle\product\10.2.0\flash_recovery_area 用于搜索的数据库名 (或数据库的唯一名称): ORCL 通道 ORA_DISK_1: 在恢复区域中找到自动备份 通道 ORA_DISK_1: 已找到的自动备份: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ ORCL\AUTOBACKUP\2012_05_10\O1_MF_S_782927356_7TPWQXCQ_.BKP 通道 ORA_DISK_1: 从自动备份复原控制文件已完成 输出文件名=E:\ORACLE\PRODUCT\ 10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_7RBDCXXS_.CTL
输出文件名=E:\ORACLE\PRODUCT\ 10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\O1_MF_7RBDCY2G_.CTL 输出文件名=E:\ORACLE\CONTROLFILE\CONTROL03_.CTL 完成 restore 于 10-5月 -12
数据库已装载 释放的通道: ORA_DISK_1
启动 recover 于 10-5月 -12 启动 implicit crosscheck backup 于 10-5月 -12 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=157 devtype=DISK 已交叉检验的 22 对象 完成 implicit crosscheck backup 于 10-5月 -12
启动 implicit crosscheck copy 于 10-5月 -12 使用通道 ORA_DISK_1 已交叉检验的 1 对象 完成 implicit crosscheck copy 于 10-5月 -12
搜索恢复区中的所有文件 正在编制文件目录... 目录编制完毕
已列入目录的文件的列表 ======================= 文件名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\ 2012_05_10\O1_MF_S_782927356_7TPWQXCQ_.BKP
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 1 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7RBDCYRW_.LOG 存在于磁盘上 存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_M F_1_7RBDCYRW_.LOG 线程 =1 序列 =1 介质恢复完成, 用时: 00:00:03 完成 recover 于 10-5月 -12
数据库已打开 3 确认控制文件是否恢复 sys@ORCL>select name from v$controlfile; NAME ------------------------------------------------------------ E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_7RBD CXXS_.CTL
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFIL E\O1_MF_7RBDCY2G_.CTL
E:\ORACLE\CONTROLFILE\CONTROL03_.CTL
sys@ORCL>select dbid from v$database; DBID ---------- 1308114557 |
7 使用RESETLOGS操作的恢复
为归档日志生成名称时,应当使oracle能够区分不同场景产生的日志。
Sql>alter system set log_archive_format=’arch_%d_%t_%r_%s.log’
sys@ORCL>show parameter log_archive_format
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_format string arch_%d_%t_%r_%s.log
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9537053/viewspace-723376/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9537053/viewspace-723376/