人工手动冷备不完全恢复介绍(purge表不完全恢复)

不完全恢复

不完全恢复的基本类型:
1)基于时间点 (until time): 使整个数据库恢复到过去的一个时间点前
2)基于scn (until change): 使整个数据库恢复到过去的某个SCN前
3)基于cancel (until cancel): 使整个数据库恢复到归档日志或当前日志的断点前

不完全恢复(Incomplete recover) 适用环境:
1)在过去的某个时间点重要的数据被破坏。
2)在做完全恢复时,丢失了归档日志或当前online redo log
3)当误删除了表空间时(有控制文件备份)
4)丢失了所有的控制文件,使用备份的控制文件恢复时  (条件满足时可以完全恢复)

传统的不完全恢复的操作步骤:
1)先通过logmnr 找到误操作的时间点
2)对现在的database做新全备
3)还原该时间点前所有的datafile
4)在mount状态下,对database做recover,恢复到误操作的时间点
5)将恢复出来的table做逻辑备份(exp)
6)再将全备还原
7)将导出的表导入database(imp)

实验 1:恢复过去某个时间点误操作的table    (基于时间点的不完全恢复)   前提:有冷备份,日志,归档齐全

1)准备实验数据

SQL> select * from andy;

ID
----------
         4

SQL> insert into andy values(5);

1 row created.

SQL> commit;

Commit complete.

SQL> drop table andy purge;

Table dropped.

2)查看日志,归档环境

SQL> set linesize 400
SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE#
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- -------------
         1          1         61   52428800        512          1 NO  CURRENT                1991534
         2          1         59   52428800        512          1 YES INACTIVE               1959769
         3          1         60   52428800        512          1 YES INACTIVE               1966481

SQL> alter system switch logfile;

System altered.

SQL> select name from v$archived_log;
NAME
----------------------------------------------------------------------------------------------------------

/home/oracle/archivelog/ORCL/archivelog/2014_12_01/o1_mf_1_47_b7rwlclg_.arc
/home/oracle/app/flash_recovery_area/ORCL/archivelog/2014_12_01/o1_mf_1_48_b7ryjgng_.arc
/home/oracle/app/flash_recovery_area/ORCL/archivelog/2014_12_01/o1_mf_1_49_b7rykz3l_.arc
/home/oracle/app/flash_recovery_area/ORCL/archivelog/2014_12_01/o1_mf_1_50_b7ryn3fl_.arc
/home/oracle/archivelog/1_51_860522448.dbf
/home/oracle/archivelog/1_52_860522448.dbf
/home/oracle/archivelog/1_53_860522448.dbf
/home/oracle/archivelog/1_54_860522448.dbf
/home/oracle/archivelog/1_55_860522448.dbf

NAME
----------------------------------------------------------------------------------------------------------
/home/oracle/archivelog/1_56_860522448.dbf
/home/oracle/archivelog/1_57_860522448.dbf
/home/oracle/archivelog/1_58_860522448.dbf
/home/oracle/archivelog/1_59_860522448.dbf
/home/oracle/archivelog/1_60_860522448.dbf
/home/oracle/archivelog/1_61_860522448.dbf

28 rows selected.

3)logmnr日志挖掘,找出purge时间点。

--日志挖掘至少要提前开SUPPLEME,如果没开,信息会报错
SQL> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;

SUPPLEME SUP SUP
-------- --- ---
YES      NO  NO
SQL> col member for a50;
SQL>  select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER                                             IS_
---------- ------- ------- -------------------------------------------------- ---
         3         ONLINE  /home/oracle/app/oradata/orcl/redo03.log           NO
         2         ONLINE  /home/oracle/app/oradata/orcl/redo02.log           NO
         1         ONLINE  /home/oracle/app/oradata/orcl/redo01.log           NO

SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
         1 ACTIVE
         2 CURRENT
         3 INACTIVE

SQL>  select name from v$archived_log where name is not null order by 1;

NAME
-----------------------------------------------------------------------------------------
/home/oracle/app/flash_recovery_area/ORCL/archivelog/2014_12_01/o1_mf_1_48_b7ryjgng_.arc
/home/oracle/app/flash_recovery_area/ORCL/archivelog/2014_12_01/o1_mf_1_49_b7rykz3l_.arc
/home/oracle/app/flash_recovery_area/ORCL/archivelog/2014_12_01/o1_mf_1_50_b7ryn3fl_.arc
/home/oracle/archivelog/1_51_860522448.dbf
/home/oracle/archivelog/1_52_860522448.dbf
/home/oracle/archivelog/1_53_860522448.dbf
/home/oracle/archivelog/1_54_860522448.dbf
/home/oracle/archivelog/1_55_860522448.dbf
/home/oracle/archivelog/1_56_860522448.dbf
/home/oracle/archivelog/1_57_860522448.dbf
/home/oracle/archivelog/1_58_860522448.dbf

NAME
-----------------------------------------------------------------------------------------
/home/oracle/archivelog/1_59_860522448.dbf
/home/oracle/archivelog/1_60_860522448.dbf
/home/oracle/archivelog/1_61_860522448.dbf
/home/oracle/archivelog/ORCL/archivelog/2014_12_01/o1_mf_1_47_b7rwlclg_.arc

15 rows selected.

-- 利用redolog日志进行挖掘

SQL>  EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>‘/home/oracle/app/oradata/orcl/redo01.log‘,Options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.

SQL>EXECUTE DBMS_LOGMNR.ADD_LOGFIL (LogFileName=>‘/home/oracle/app/oradata/orcl/redo02.log‘,Options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

SQL>EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>‘/home/oracle/app/oradata/orcl/redo03.log‘,Options=>dbms_logmnr.ADDFILE);

PL/SQL procedure successfully completed.

SQL>  execute DBMS_LOGMNR.START_LOGMNR(options=>dbms_logmnr.dict_from_online_catalog);

PL/SQL procedure successfully completed.

SQL>  col username for a10;
SQL> col sql_redo for a45;
SQL>  select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name=‘ANDY‘ order by scn;

USERNAME          SCN TIMESTAMP           SQL_REDO
---------- ---------- ------------------- ---------------------------------------------
ANDY          2000934 2014-12-11 09:47:15 drop table andy purge;        //找到purge时间

--利用归档进行日志挖掘

SQL> show parameter utl

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
create_stored_outlines               string
utl_file_dir                         string

SQL> alter system set utl_file_dir=‘/home/oracle/logmnr‘ scope=spfile;

System altered.

SQL> startup force;

SQL> show parameter utl;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
create_stored_outlines               string
utl_file_dir                         string      /home/oracle/logmnr

SQL> execute dbms_logmnr_d.build(‘dict.ora‘,‘/home/oracle/logmnr‘,dbms_logmnr_d.store_in_flat_file);

PL/SQL procedure successfully completed.

SQL> execute dbms_logmnr.add_logfile(logfilename=>‘/home/oracle/archivelog/1_61_860522448.dbf‘,options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.

SQL> execute dbms_logmnr.start_logmnr(dictfilename=>‘/home/oracle/logmnr/dict.ora‘,options=>dbms_logmnr.ddl_dict_tracking);

PL/SQL procedure successfully completed.

SQL> select username,scn,to_char(timestamp,‘yyyy-mm-dd hh24:mi:ss‘),sql_redo from v$logmnr_contents WHERE lower(sql_redo) like ‘drop table%‘;

USERNAME                              SCN TO_CHAR(TIMESTAMP,‘ SQL_REDO
------------------------------ ---------- ------------------- --------------------------------------------------
ANDY                              2000934 2014-12-11 09:47:15 drop table andy purge;

SQL>  execute dbms_logmnr.end_logmnr;

PL/SQL procedure successfully completed.

4)关闭数据库,删除所有dbf,准备做不完全恢复

SQL> shutdown immdiate;
[[email protected] logmnr]$ cd /home/oracle/app/oradata/orcl/
[[email protected] orcl]$ rm -rf *.dbf

5)还原所有备份的数据文件

[[email protected] orcl]$ cp /home/oracle/coldbak/*.dbf  /home/oracle/app/oradata/orcl/

6)根据log miner提供的信息,做基于时间点的不完全恢复

SQL> recover database until time ‘2014-12-11 09:47:15‘;
ORA-00279: change 1968596 generated at 12/10/2014 06:26:35 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_60_860522448.dbf
ORA-00280: change 1968596 for thread 1 is in sequence #60

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 1991534 generated at 12/10/2014 07:25:45 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_61_860522448.dbf
ORA-00280: change 1991534 for thread 1 is in sequence #61

Log applied.
Media recovery complete.

说明:如果恢复过程中用到归档日志则输入 auto 。用到当前日志,则输入 filename 。

7)resetlogs方式打开数据库

SQL> alter database open resetlogs;

Database altered.

8)验证
SQL> select * from andy;

ID
----------
         5
         4

OK,转载请标明出处。

时间: 2024-10-21 21:44:10

人工手动冷备不完全恢复介绍(purge表不完全恢复)的相关文章

冷备手工完全恢复(recover database,recover tablespace,recover datafile)

冷备手工完全恢复 1.   手工完全恢复三种级别: recover database: 所有或大部分datafile丢失,一般是在mount状态完成.recover tablespace:    非关键表空间损坏,表空间下某些数据文件不能访问,一般是在open下完成.recover datafile: 单一或少数数据文件损坏,可以在mount或open 状态完成.四个关键文件:1)system01.dbf, 2) undo tablespace,3)control file 4)current

冷备下模拟rm -rf *.dbf恢复案例

关于备份恢复一直是所有关系型数据库的重头戏.下面会介绍冷备数据库,并模拟破坏数据文件进行恢复数据库,并涉及到其他相关内容. [[email protected] ~]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.5 (Tikanga) SQL> select * from v$version where rownum<2; BANNER ----------------------------------

数据库备份之热备,冷备,温备

备份和恢复 备份类型: 完全备份,部分备份 完全备份:整个数据集 1 部分备份:只备份数据子集,如部分库或表 完全备份.增量备份.差异备份 2增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂 3差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单 注意:二进制日志文件不应该与数据文件放在同一磁盘 备份和恢复 冷.温.热备份 冷备:读写操作均不可进行 温备:读操作可执行:但写操作不可执行 热备:读写操作均可执行 MyISAM:温备,不支持热

从冷备到多活,阿里毕玄谈数据中心的异地容灾

大数据时代,数据中心的异地容灾变得非常重要.在去年双十一之前,阿里巴巴上线了数据中心异地双活项目.InfoQ就该项目采访了阿里巴巴的林昊(花名毕玄). 毕玄是阿里巴巴技术保障部的研究员,负责性能容量架构.数据中心异地多活项目就是他主导的.多活:从同城到异地 InfoQ:首先请介绍一下数据中心异地多活这个项目. 毕玄:这个项目在我们内部的另外一个名字叫做单元化,双活是它的第二个阶段,多活是第三个阶段.所以我们把这个项目分成三年来实现.所谓异地多活,故名思义,就是在不同地点的数据中心起多个我们的交易

mysql的数据备份方式,及热备与冷备的优缺点对比

一.按照数据库的运行状态分类:(1)热备:在数据库运行时,直接进行备份,对运行的数据库没有影响(2)冷备:在数据库停止运行的时候进行备份,这种备份方式最为简单,只需要拷贝数据库物理文件即可.(3)温备:同样是在数据库运行的时候进行备份的,但对当前数据库的操作会产生影响. 数据库热备与冷备的优缺点:热备份的优点: 1.可在表空间或数据文件级备份,备份时间短.2.备份时数据库依然可以使用.3.可达到秒级恢复,能够恢复到某一个时间点上.4.恢复的速度很快,在大多数情况下在数据库工作时就可恢复.5.几乎

oracle 11g下冷备数据库

1.关闭数据库 [email protected]>shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down. 2.退出[email protected]>exitDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning,

Oracle数据库手动恢复备忘日志

最近因为升级了Mac os x 10.10 Yosemite,突然前几天的一个晚上,开机发现就停留在开机界面了,看来BETA果然是不靠谱,然后想到自己这不前几天刚备份完吗,没事,TimeMachine是何等神器,二话不说直接恢复.但是恢复完,我后悔了,一来是忘了昨天晚上还加班呢,加班的成功保留成果所剩无几,关键我这才发现TimeMachine既然不备份虚拟机文件(虚拟机文件30G,估计直接给略过了吧),难怪每次都觉得备份那么快. 不过后悔也没用,重新搭开发环境吧.操作系统WIN7->开发工具VS

热备,冷备,云备的区别

转自:http://blog.csdn.net/hynet/article/details/48345495 很多人对热备,冷备,云备了解不深,我科普一下IT行业各种备份术语.以后别闹笑话了. 假设你是一位女性,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友 好,又不是恋人.你随时可以甩了现任男友,另外一位马上就能补上.这是冷备份. 假设你是一位女性,同时和两位男性在交往,两位都是你男朋友.并且他们还互不干涉,独立运行.这就是双机热备份. 假设你是一位女性,不安于男朋友给你的安全感.在

oracle &nbsp; rman冷备shell脚本

oracle rman冷备shell脚本(我这里是全备份,创建了2个通道c1.c2)可以在这基础上更改 文本: #!/bin/bash #Author:wangergui       Email:[email protected]          Date:2016-08-17 #Function:oracle_rman_cold_backup ( Full backup ) [ "${USER}" == "oracle" ] || exit 2 [ ! -d $