手工完全恢复

3.1 完全恢复;通过备份、归档日志、current log ,将database恢复到failure 前的最后一次commit状态。

3.2 完全恢复的步骤

1)restore: OS拷贝命令还原所有或部分datafile
2)recover:SQL*PLUS利用归档日志和当前的redo日志做恢复

3.3 手工完全恢复可以基于三个级别

recover database: 包括system表空间损坏或大部分datafile丢失,一般是在mount状态完成
recover tablespace: 非关键表空间损坏,表空间下某些数据文件不能访问,一般是在open下完成
recover datafile: 单一或少数数据文件损坏,可以在mount或open 状态完成

什么是关键文件:如果关键文件损坏,数据库将不能维持在open状态,或崩溃或死机!

考点:哪些文件是关键文件:四个:1)system01.dbf, 2) undo tablespace,3)control file 4)current log file

3.4 恢复过程可以查看的视图:

1)v$recover_file: 查看需要恢复的datafile
2)v$recovery_log: 查看recover 需要的redo 日志
3)v$archvied_log: 查看已经归档的日志

3.5 非归档模式下只能做全备的完整还原,还原后仍会缺失联机日志文件(因为只备数据文件和控制文件),需要在mount下发出
alter database clear logfile group <组号>. (如果是在RMAN下还原,这一过程是自动完成的)。

3.6 手工完全恢复的实验

前提: 1)有一套datafile全备, 2)使用当前控制文件, 3)自上次备份以来的归档日志和当前联机日志是完整的。

范例1:recover database 说明:由于media failure 所有datafile丢失,

sys:
SQL> select * from scott.test;

ID
----------
1

在这个状态下先在OS下做一个数据文件和控制文件的冷备。

SQL> shutdown immediate

[oracle@timran ~] $cp /u01/oradata/timran11g/*.dbf /u01/back1
[oracle@timran ~] $cp /u01/oradata/timran11g/*.ctl /u01/back1

[oracle@timran ~] $startup

SQL> insert into scott.test values(2);
SQL> commit;
SQL> select * from scott.test;

ID
----------
2
1

SQL> insert into scott.test values(3);
SQL> select * from scott.test;

ID
----------
2
3 //这条记录未提交,恢复时会回滚掉
1

1)模拟介质失败,所有数据文件丢失

[oracle@timran ~]$ rm /u01/oradata/timran11g/system01.dbf //数据库在打开的情况下就删掉了所有dbf文件
$sqlplus / as sysdba //换个session登录,然后关闭数据库
SQL> shutdown abort //数据库直接abort了

2)启动database,报错!

SQL> startup
SQL>select file#,error from v$recover_file;

3)首先还原system01.dbf数据文件

[oracle@timran ~]$ cp /u01/back1/system01.dbf /u01/oradata/timran11g

比较控制文件和数据文件头的SCN

SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header;

4)恢复database

SQL> recover database;

5)打开数据库

SQL> alter database open;

6)验证

SQL> select * from scott.test;

ID
----------
2
1

范例2:recover tablespace(状态:database open)

说明:针对的是非关键表空间的损坏,基于表空间的完全恢复实际上还是对其下的datafile的恢复

模拟这种情形非常实用,通常是某个非关键表空间下的数据文件受损,但并没有造成Oracle崩溃, 我们只需针对个别有问题的tablespace去做单独的在线恢复操作,也就是说恢复时数据库整体是online的,而局部表空间是offline的,数据库不需要shutdown。

恢复表空间(删除了tablespace下的所有的datafile)

1)了解一下当前状态,在test表空间上建立scott.t1表,

SQL> conn scott/scott
SQL> create table t1 (id int) tablespace test;
SQL> insert into t1 values(1);
SQL> commit;
SQL> select * from t1;

NAME
--------------------------------------------------
1

2)模拟表空间损坏,数据库open下,直接删除表空间下的数据文件
[oracle@timran ~]$ rm /u01/oradata/timran11g/test01.dbf
[oracle@timran ~]$

3)查证该表空间上的表不可访问了

SQL> alter system flush buffer_cache; //清除data buffer

SQL> conn / as sysdba //换个session登陆,访问t1表,因内存里已清除了buffer块,只好去做物理读,所以报错!
SQL> select * from scott.t1;

4)看看scn的情况

SQL> select file#,checkpoint_change# from v$datafile;

FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 3550907
2 3550907
3 3550907
4 3550907
5 3550907
6 3550339

SQL> select file#,checkpoint_change# from v$datafile_header;

FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 3550907
2 3550907
3 3550907
4 3550907
5 3550907
6 0

5)test表空间offline

SQL> alter tablespace test offline immediate; //immediate使表空间能立即脱机,不等Oracle对任何数据文件做检查

6)数据库open下,使用备份还原这个表空间下的所有数据文件

[oracle@timran ~]$ cp /u01/back1/test01.dbf /u01/oradata/timran11g

7)恢复tablespace

SQL> recover tablespace test;

8)使表空间online

SQL> alter tablespace test online; //注意:此时数据库状态一直是open的。

9)验证

SQL> select * from scott.t1;

ID
--------------------------------------------------
1

范例3:(recover datafile,database mount或open状态)

恢复datafile, 同范例2不同的是模拟UNDO文件损坏: 因UNDO数据文件也是关键文件,所以只能在mount状态下恢复。

1) 模拟环境:

SQL> insert into scott.t1 values(2); //插入一行记录是为了使t1和备份有区别
SQL> commit;
SQL> select * from scott.t1;

ID
--------------------------------------------------
1
2

SQL> delete scott.t1; //注意:删掉了t1并没有提交,老值在UNDO里。

2)在open 状态下删除datafile
[oracle@timran ~]$ rm /u01/oradata/timran11g/undotbs01.dbf
[oracle@timran ~]$

3)关闭数据库
SQL> shtudown abort //abort埋下伏笔,等到完全恢复时会做UNDO回滚。

4)启动数据库mount
SQL> startup mount
...
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 3 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 3: '/u01/oradata/timran11g/undotbs01.dbf'

5)还原并恢复UNDO数据文件

[oracle@timran timran11g]$ cp /u01/back1/undotbs01.dbf ./

SQL> recover datafile 3;
完成介质恢复。

6)打开数据库(会完成UNDO表空间数据的回滚)

SQL> alter database open;

数据库已更改

7) 验证
SQL> select * from scott.t1;

ID
--------------------------------------------------
1
2

3.7 手工完全恢复特点小结:

3.7.1 recover database (system01.dbf或大部分数据文件损坏,mount下进行)

OS: 使用cp 还原受损的dbf(不一定是全部,v$recover_file记录的都需要还原)
SQLPLUS:
1)recover database;
2)alter database open;

3.7.2 recover tablespace (针对表空间的非关键数据文件损坏,一般是open下进行)

OS:使用cp 还原该表空间XXX下的所有数据文件
SQLPLUS:
1)alter tablespace XXX offline;
2)recover tablespace XXX;
3)alter tablespace XXX online;

3.6.3 recover datafile (单个或几个数据文件损坏,关键文件在mount下进行,非关键文件在open下进行)

OS:使用cp 还原相关的关键数据文件(mount)
SQLPLUS:
1)recover datafile 6,8;
2)alter database open;

OS:使用cp 还原相关的非关键数据文件(open)
SQLPLUS:
1)alter database datafile 6,8 offline;
2)recover datafile 6,8;
3)alter database datafile 6,8 online;

oracle之三手工完全恢复的更多相关文章

  1. oracle之三手工不完全恢复

    手工不完全恢复 4.1 不完全恢复的特点: 1)让整个database 回到过去某个时间点,不能避免数据丢失. 2)想跳过坏日志而继续恢复所有其他工作是不可能的,前滚没有这个功能(考点). 3)必须以 ...

  2. oracle之三rman 完全恢复

    rman 完全恢复 8.1 recover 恢复: 1)归档 : 完全恢复和不完全恢复 2)非归档:只能恢复到最后一次备份状态(还原) 8.2 完全恢复: ----先对数据库做一个备份(如果是arch ...

  3. oracle之三手工备份与恢复

    手工备份与恢复 2.1 手工备份和恢复的命令 1)备份和还原都使用OS命令,如linux中的cp 2)恢复用sqlplus命令:recover 2.2 备份前要对数据库进行检查: 1) 检查需要备份的 ...

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

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

  5. Oracle 10g AND Oracle 11g手工建库案例--Oracle 11g

    Oracle 10g AND Oracle 11g手工建库案例--Oracle 11g 系统环境: 操作系统: RedHat EL6 Oracle:  Oracle 10g and Oracle 11 ...

  6. Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g

    Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g 系统环境: 操作系统: RedHat EL6 Oracle:  Oracle 10g and Oracle 11 ...

  7. oracle之三rman 不完全恢复

    rman 不完全恢复 9.1 rman 不完全恢复的三个标准模式:基于time.基于scn和基于sequence: 范例1:恢复过去某个时间点误操作,一般使用基于time或scn. 1)环境:有一套全 ...

  8. oracle之三目录库和辅助库

    目录库和辅助库 10.1 创建目录库(Catalog database)的必要性 如果没有catalog,RMAN的存储库(元数据)保存在目标库的控制文件里,这样可能存在如下隐患 1)目标库上的控制文 ...

  9. oracle之三备份恢复概述

    备份恢复概述 1.1 数据库故障的类型: 1)user process failure: pmon 自动处理 2)instance failure: smon 自动处理 3)user errors : ...

随机推荐

  1. ElasticSearch 7.8.1集群搭建

    通往集群的大门 集群由什么用? 高可用 高可用(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间.如果系统每运行100个时间 ...

  2. 收集整理element-ui 表格组件的常用操作方法

    一.简单的表格行内编辑效果 原理是通过Css控制绑定的输入控件与显示值,在选中行样式下对控件进行隐藏或显示. 1.注意下样式的设置 2.change事件 @change="handleEdi ...

  3. 精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证

    本文是精讲RestTemplate第9篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  4. start-stop-daemon: matching on world-writable pidfile /var/run/redis/redis-server.pid is insecurefailed

    Microsoft Store上 看到最新的Ubuntu 20.04 LTS 已经适配到WSL上了, 于是卸载了老版本 18.04 LTS,安装上了最新版本的. 第一次启动会比较慢,需耐心等待 Ins ...

  5. golang安装及vscode编辑器配置

    安装Go语言及搭建Go语言开发环境 下载 下载地址:https://studygolang.com/dl 系统选择: 根据不同系统下载安装包: 安装 Windows MAC安装 点开可执行程序 下一步 ...

  6. CSS动画实例:小圆球的海洋

    CSS背景属性用于定义HTML元素的背景,在CSS提供的背景属性中, background-image:指定要使用的一个或多个背景图像: background-color:指定要使用的背景颜色: ba ...

  7. Deep Learning-Based Video Coding: A Review and A Case Study

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 1.Abstract: 本文主要介绍的是2015年以来关于深度图像/视频编码的代表性工作,主要可以分为两类:深度编码方案以及基于传统编码方 ...

  8. pandas外部数据的读取构造数据框-文本文件读取(一种utf-8中文编码乱码处理经验)

    上面一篇文章有记录pandas构造数据框的方式有二维数组,字典,嵌套的列表和元组等,本篇用于介绍通过外部数据读取的方式来构造数据框. python读取外部数据集的时候,这些数据集可能包含在文本文件(c ...

  9. Java动态代理(三)——Cglib动态代理

    一.Cglib动态代理Cglib是一个优秀的动态代理框架,它的底层使用ASM在内存中动态的生成被代理类的子类,使用Cglib即使代理类没有实现任何接口也可以实现动态代理功能.而且,它的运行速度要远远快 ...

  10. 【原创】Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...