不完全恢复

不完全恢复的基本类型:
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;
[oracle@11g logmnr]$ cd /home/oracle/app/oradata/orcl/
[oracle@11g orcl]$ rm -rf *.dbf

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

[oracle@11g 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,转载请标明出处。

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

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

    冷备手工完全恢复 1.   手工完全恢复三种级别: recover database: 所有或大部分datafile丢失,一般是在mount状态完成.recover tablespace:    非关 ...

  2. mysql之冷备和mysqldump、mydumper、xtrabackup备份

    1.冷备流程: 停库备份,冷备份一般用于非核心业务,这类业务一般都允许停库. 在停止数据库后,将数据文件拷贝出来,然后对原始数据文件进行备份. 流程: 1.关闭数据库备份          2.拷贝数 ...

  3. Oracle冷备迁移脚本(文件系统)

    Oracle冷备迁移脚本(文件系统) 两个脚本: 配置文件生成脚本dbinfo.sh 网络拷贝到目标服务器的脚本cpdb16.sh 1. 配置文件生成脚本 #!/bin/bash #Usage: cr ...

  4. web测试一般分为那几个阶段,哪些阶段是可以用工具实现的,都有些什么工具,哪些阶段必须要人工手动来实现呢?

    这是我在知乎上遇到的一个问题: web测试一般分为那几个阶段,哪些阶段是可以用工具实现的,都有些什么工具,哪些阶段必须要人工手动来实现呢? 首先这个提问本身就是有问题的, 没有哪个阶段是用工具实现的, ...

  5. Windows系统下Oracle数据库冷备

    一.背景: 具体的场景是数据库不是普通的OLTP系统,更像是OLAP系统,数据的更新频率很低,在noarchivelog 模式下运行,实时性要求低,但是数据只有一份不能弄丢,需要应付磁盘损坏等情况.这 ...

  6. linux/windows系统oracle数据库简单冷备同步

    linux/windows系统oracle数据库简单冷备同步 我们有一个财务系统比较看重财务数据的安全性,同时我们拥有两套系统,一个生产环境(linux),一个应急备份环境(windows).备份环境 ...

  7. oracle数据库冷备中的手工备份和恢复

    我的操作系统是red hat5.5 32位系统oracle11g 以我的系统为例: 冷备状态下,数据库必须是关闭的,但是我们现在要做一个实验,在开库的状态下分别查询出: 1.show paramete ...

  8. 工作随笔——elasticsearch数据冷热分离、数据冷备

    概述: 适合日志类型的数据存储方案.即当日数据写入,历史数据只读. 节省部分硬件成本.热数据采用更好的硬件. 环境: 已有6个ES节点,使用docker-compose方式搭建. es1:master ...

  9. Oracle冷备和热备脚本

    Oracle冷备和热备脚本 冷备脚本: set feedback off set heading off set verify  off set trimspool off set echo off ...

随机推荐

  1. 关于C#时间格式化中的“f”

    示例: DateTime.Now.ToString("yyyyMMddHHmmssfff") 上面的示例就是将日期格式化到毫秒级.那么问题来了,格式化到微秒级.纳秒级怎么整?f又是 ...

  2. url在线编码和解码

    在工作中,经常遇到encode之后的url.想查看里面的某个参数的时候,很不直观.今天在网上搜了一下对url在线编码和解码的网站.对我来说,使用起来很方便.而且这个网站里面,不仅仅有对url的编码和解 ...

  3. Java 简单工厂模式

    首先 定义一接口 package com.org; public interface SampleInterface { public void print(String s); } 定义两个接口的实 ...

  4. jQuery Validation让验证变得如此容易(二)

    上一个例子我们是统一引用jquery.validate.js这样所有必填字段的提示信息都将是This field is required. 现在要改成动态提示,比如姓名如果为空则提示姓名不能为空,密码 ...

  5. java正则表达式去除html标签

    当我们用ckeditor或其他一些在线文本编辑器的时候 内容里会有很多的标签 如下片段: <p><img alt="" src="/img/upload ...

  6. sql server DateTime相关内置函数总结

    本文部分内容参考msdn帮助文档和博客园!汇总备忘 1.获取当前日期      getdate()函数以datetime数据类型的格式返回当前SQLServer服务器所在计算机的日期和时间.其语法格式 ...

  7. C++应用程序在Windows下的编译、链接(一)概述

    C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 c ...

  8. 更快的memcpy

    更快的memcpy 写代码有时候和笃信宗教一样,一旦信仰崩溃,是最难受的事情.早年我读过云风的一篇<VC 对 memcpy 的优化>,以及<Efficiency geek 2: co ...

  9. 怀念的东西:Pirka咖啡,芬兰的味道

    怀念的东西:Pirka咖啡,芬兰的味道 前一段收到了小牛同学从芬兰托人寄来的咖啡.拿着提货单的时候,我满脑子问号.这寄货人是谁的呢,我完全没有印象.而且写的是食品.我又想起了最近报道的诈骗消息,给你寄 ...

  10. javaapplicationWeb application setup on Ubuntu VPS

    题记:写这篇博客要主是加深自己对javaapplication的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. Now there are many hosting server ...