当前位置: 首页 > 编程日记 > 正文

人工手动冷备不完全恢复介绍(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;
[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,转载请标明出处。















转载于:https://www.cnblogs.com/andy6/p/6274603.html

相关文章:

半阈值法的实现

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace std; using namespace cv; int main( ) {// 读取源图像及判断cv::Mat srcImage cv::imread("..\\images\\hand1.jpg&q…

novaclient的api调用流程与开发

novaclient的api调用流程与开发 2015年07月05日 19:27:17 qiushanjushi 阅读数&#xff1a;3915 http://blog.csdn.net/tpiperatgod/article/details/18375387?utm_sourcetuicool 另一个地址&#xff1a;http://neuromancer.sinaapp.com/?p64 从nova client的入口查看 cat /u…

【C++】 保存内容到文件工具

1. c 输出到文件 // save mean distance between center and descriptorsstd::string filename configuration_.debug_output_path() "ref_max_mean_distance.txt";FILE* fp fopen(filename.c_str(), "w");try {if (fp nullptr) {return error::Failed…

你知道实习对你有多重要吗?

大学生就业一直是个永恒不变的话题&#xff0c;在过去几年中&#xff0c;每​‌‌次临近毕业季&#xff0c;我们肯定会一次次的听到“史上最难就业季”之说。而每一年的数据也会不断突破前一年的数字。在国新办举行的新闻发布会上&#xff0c;人力资源社会保障部部长尹蔚民提到…

灰度直方图的实现

#include <opencv2\opencv.hpp> int main() {// 图像源获取及判断 cv::Mat Image, ImageGray;Image cv::imread("..\\images\\flower3.jpg"); if(Image.empty()) return -1;cv::imshow("Image",Image);// 转换为灰度图像cv::cvtColor(Image,Image…

Android笔记之ViewModel的使用示例

依赖 implementation android.arch.lifecycle:extensions:1.1.1 implementation com.squareup.retrofit2:retrofit:2.5.0 implementation com.squareup.retrofit2:converter-gson:2.5.0 implementation com.squareup.retrofit2:adapter-rxjava2:2.5.0 implementation io.reacti…

vscode配置记录

vscode配置记录 按照官网教程安装好vs:实际上只需要配置launch.json的”program“如下所示 "configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch","program":…

unity 2d 游戏优化之路 遇坑记录

情景说明&#xff1a; unity 出的Android包&#xff0c;在目前一些主流机型跑都没有问题&#xff0c;但是在 小米3 这种比较老的机器上跑&#xff0c;报如下错误 GLSL compilation failed, no infolog provided 起先&#xff0c;我们一直以为是在低端机器上某个特定的GLSL 在这…

自定义直方图实现

#include <opencv2/opencv.hpp> int main() {// 图像获取及判断cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;cv::imshow("srcImage",srcImage);// 灰度转换 cv::Mat srcGray;cv::cvtColor(srcImage,sr…

js数组指定位置添加删除

示例参考&#xff1a;http://www.w3school.com.cn/jsref/jsref_splice.asp转载于:https://www.cnblogs.com/CarryYou-lky/p/10669859.html

【C++】对象实例化/成员函数/成员变量的内存管理

文章目录1. 对象实例化的内存管理总结2.C成员函数在内存中的存储方式3.C类的实例化对象的大小之sizeof()实例一&#xff1a;实例二&#xff1a;实例三&#xff1a;实例四&#xff1a;实例五&#xff1a;实例六&#xff1a;实例七&#xff1a;实例八&#xff1a;实例九&#xff…

HTML form 标签的 enctype 属性

1. enctype 的定义和用法 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认地&#xff0c;表单数据会编码为 "application/x-www-form-urlencoded"。 就是说&#xff0c;在发送到服务器之前&#xff0c;所有字符都会进行编码&#xff08;空格转…

灰度直方图均衡化实现

#include <opencv2/opencv.hpp> int main() {cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;cv::Mat srcGray;cv::cvtColor(srcImage, srcGray, CV_BGR2GRAY);cv::imshow("srcGray", srcGray);// 直方图均…

oracle汉化包下载地址

2019独角兽企业重金招聘Python工程师标准>>> https://www.allroundautomations.com/bodyplsqldevreg.html 转载于:https://my.oschina.net/u/3141521/blog/3034655

【C++】C/C++ 中 static 的用法全局变量与局部变量

C/C 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C 中static的作用 2.1 总的来说 2.2 静态变量与普通变量 2.3 静态局部变量有以下特点&#xff1a; 实例 3. static 用法 3.1 在 C 中 3.2 静态类相关…

浅谈C/C++中的static和extern关键字

一.C语言中的static关键字 在C语言中&#xff0c;static可以用来修饰局部变量&#xff0c;全局变量以及函数。在不同的情况下static的作用不尽相同。 (1)修饰局部变量 一般情况下&#xff0c;对于局部变量是存放在栈区的&#xff0c;并且局部变量的生命周期在该语句块执行结束时…

彩色直方图均衡化实现

#include <opencv2/opencv.hpp> int main() {// 图像获取及验证cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;// 存储彩色直方图及图像通道向量cv::Mat colorHeqImage; std::vector<cv::Mat> BGR_plane; …

二、python小功能记录——监听鼠标事件

1.原文链接 #-*- coding:utf-8 -*- from pynput.mouse import Button, Controller## ## 控制鼠标 ## # 读鼠标坐标 mouse Controller() print(The current pointer position is {0}.format(mouse.position)) # 设置鼠标坐标 mouse.position (10, 20) print(No…

【Smart_Point】C/C++ 中智能指针

C11智能指针 目录 C11智能指针 1.1 C11智能指针介绍 1.2 为什么要使用智能指针 1.2.1 auto_ptr&#xff08;C98的方案&#xff0c;C11已经抛弃&#xff09;采用所有权模式。 1.2.2 unique_ptr 1.2.3 shared_ptr 1.2.4 weak_ptr 1.3 share_ptr和weak_ptr的核心实现 1.…

Linux 虚拟内存和物理内存的理解【转】

转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先&#xff0c;让我们看下虚拟内存&#xff1a; 第一层理解 1. 每个进程都有自己独立的4G内存空间&#xff0c;各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候&#xff0c…

直方图变换——查找

#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> int main() {// 图像获取及验证cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;//…

【C++】C/C++ 中default/delete特性

C类的特殊成员函数及default/delete特性 本文内容侧重个人理解&#xff0c;深入理解其原理推荐https://www.geeksforgeeks.org 目录 目录 C类的特殊成员函数及default/delete特性 前言 1. 构造函数和拷贝构造函数 2. 拷贝赋值运算符 3. C11特性之default关键字(P237, P4…

Celery--任务调度利器

2019独角兽企业重金招聘Python工程师标准>>> Celery文档: http://docs.jinkan.org/docs/celery/getting-started/first-steps-with-celery.html 安装celery和celery-with-redis pip install Celery pip install celery-with-redis开始编写task.py # tasks.py import…

直方图变换——累计

#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> int main() {// 图像获取及验证cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;//…

iOS开发经验总结,我的2019进阶之路!

4G改变了生活&#xff0c;抓住机会的人已经在这个社会有了立足之地&#xff0c;马上迎来5G的时代&#xff0c;你做好准备了吗&#xff01;对于即将迎来的5G时代&#xff0c;无疑会是音视频的又一个高潮&#xff01;那么作为程序员的我们&#xff0c;应该怎么样去迎接它呢~~ 改变…

【C++】C/C++ 中多态情形下的虚函数表查看方法

1.查看工具 找到VS2017命令提示符工具 选择“VS 2017的开发人员命令提示符” 点击该选项栏&#xff0c;弹出“VS 2017的开发人员命令提示符”窗口 cd 控制进入带查看类躲在的位置 使用命令&#xff1a;cl /d1 reportSingleClassLayoutXXX [filename]&#xff0c;XXX表示类名&…

PHP中session_register函数详解用法

语法: boolean session_register(string name);注册新的变量。返回值: 布尔值函数种类: 资料处理内容说明本函数在全域变量中增加一个变量到目前的 Session 之中。参数 name 即为欲加入的变量名。成功则返回 true 值。假如在头文件&#xff0c;开启session,即使用session_start…

Fedora 提出统一流程,弃用上千 Python 2 软件包更可控

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> Fedora 社区正在讨论弃用 Python 2 软件包的统一流程。 https://pythonclock.org Python 2 将于 2020 年 1 月 1 日正式退休&#xff0c;官方不再提供维护&#xff0c;当前倒计时不…

【C++】C++对象模型:对象内存布局详解(C#实例)

C对象模型&#xff1a;对象内存布局详解 0.前言 C对象的内存布局、虚表指针、虚基类指针解的探讨&#xff0c;参考。 1.何为C对象模型? 引用《深度探索C对象模型》这本书中的话&#xff1a; 有两个概念可以解释C对象模型&#xff1a; 语言中直接支持面向对象程序设计的部分…

Mybatis插件原理和PageHelper结合实战分页插件(七)

今天和大家分享下mybatis的一个分页插件PageHelper,在讲解PageHelper之前我们需要先了解下mybatis的插件原理。PageHelper的官方网站&#xff1a;https://github.com/pagehelper/Mybatis-PageHelper一、Plugin接口mybatis定义了一个插件接口org.apache.ibatis.plugin.Intercept…