Oracle 12C的闪回技术详解

2024-06-17 19:52
文章标签 oracle 技术 详解 闪回 12c

本文主要是介绍Oracle 12C的闪回技术详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 闪回技术介绍

闪回技术是oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于oracle一些高级的备份恢复工具如ramn去完成

1.1 撤销段

在讲闪回技术前,需要先了解oracle中一个逻辑结构–撤销段。因为大部分闪回技术都需要依赖撤销段中的撤销数据。撤销数据是反转dml语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段。(事务回滚也会用到撤销段中的数据)。事务启动时,oracle会为其分配一个撤销段,事务和撤销段存在多对一的关系,即一个事务只能对应一个撤销段,多个事务可以共享一个撤销段(不过在数据库正常运行时一般不会发生这种情况)。

1.2 闪回技术

oracle提供了四种可供使用的闪回技术(闪回查询,闪回删除,闪回归档,闪回数据库),每种都有不同的底层体系结构支撑,但其实这四种不同的闪回技术部分功能是有重叠的,使用时也需要根据实际场景合理选择最合适的闪回功能。

闪回查询

基本闪回查询

功能描述:可以查询过去某个时间段的数据库状态。
工作原理:oracle会提取所需要的撤销数据(前提是撤销是可用的,即撤销数据还没被覆盖)进行回滚,但这种回滚是临时的,仅针对当前session可见

闪回表

功能描述:可将某个表回退到过去某个时间点
工作原理:同样,oracle会先去查询撤销段,提取过去某个时间点之后的所有变更,构造反转这些变更的sql语句进行回退,闪回操作是一个单独的事务,所以若由于撤销数据过期之类的原因导致无法闪回,整个操作会回滚,不会存在不一致的状态。

闪回表可能会失败,有可能有以下几种情况:

  1. 违反了数据库约束,比如用户不小心删除了子表中的数据,现在想利用闪回表技术进行回退,恰好在这中间,父表中与该数据对应的那条记录也被删除了,在这种情况下,由于违反了外键约束,导致闪回表操作失败了;
  2. 撤销数据失效,比如用于支撑闪回操作的撤销数据被覆盖了,这种情况闪回表操作自然会失败;
  3. 闪回不能跨越ddl,即在闪回点和当前点之间,表结构有过变更,这种情况闪回操作也会失败。

注意:上述闪回功能都是基于撤销数据的,而撤销数据是会被重写的(expired会被重写,active不会被重写),所以,在需要使用这几种闪回功能去恢复数据的时候(确切地说,是需要使用基于撤销数据的闪回功能时),最短时间发现错误,第一时间执行闪回操作,才能最大程度地保证闪回功能的成功。

闪回删除

功能描述:闪回删除可以轻松将一个已经被drop的表还原回来。相应的索引,数据库约束也会被还原(除了外键约束)
原理描述:drop命令其实是rename命令,早期的oracle版本(10g之前),闪回删除意味着从数据字典中删除了该表的所有引用,虽然表中数据可能还存在,但已成了孤魂野鬼,没法进行恢复了,10g版本之后,drop命令则仅仅是一个rename操作,所以恢复就很容易了。

注意:闪回删除只针对drop命令,注意区分truncate操作和drop操作,truncate称为表截断,会清空表中数据(调节oracle高水位线实现),表结构不受影响,速度很快,弊端是此过程不会产生任何撤销数据或是重做日志,如果误删,恢复异常麻烦,要慎重使用。而drop则会删除数据+表结构,闪回删除仅针对drop操作。

闪回数据归档

功能描述:闪回数据归档可使表具有回退到过去任何时间点的能力,前面提到的闪回查询,闪回表都会受限于撤销数据是否失效,如果撤销数据被覆盖重写了,闪回操作自然会失败,闪回删除则受限于表空间是否有足够可用空间,而闪回数据归档,则没有这些限制。

闪回数据库

功能描述:闪回数据库可将整个数据库回退到过去某个时间点,闪回表是某张表的时空穿梭,闪回数据库则是整个数据库的时空穿梭。当然,闪回点之后的所有工作就丢失了,其实就相当于数据库的不完整恢复,所以只能以resetlogs模式打开数据库。闪回数据库会造成停机时间,当然相比于传统备份恢复机制,恢复过程会快很多。
工作原理:闪回数据库不使用撤销数据,使用另外一种机制来保留回退所需要的恢复数据,当启用闪回数据库,发生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(recovery writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的过程,则是一个 提取闪回日志–>将块映像复制回数据文件 的过程。

2 闪回技术操作

2.1 开启闪回功能

查看数据库是否开启归档模式和闪回功能:

SQL> show user
USER is "SYS"--闪回功能依赖归档,因此归档模式也需要打开--SQL> select log_mode,flashback_on from v$database;LOG_MODE     FLASHBACK_ON
------------ ------------------
ARCHIVELOG   NO

打开闪回功能

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.Total System Global Area 1660944384 bytes
Fixed Size		    8621376 bytes
Variable Size		 1459618496 bytes
Database Buffers	  184549376 bytes
Redo Buffers		    8155136 bytes
Database mounted.SQL> alter database flashback on;Database altered.SQL> alter database open;Database altered.SQL> select log_mode,flashback_on from v$database;LOG_MODE     FLASHBACK_ON
------------ ------------------
ARCHIVELOG   YES

快速恢复区会有flashback的专用文件夹

[oracle@ora-server flashback]$ pwd
/u01/app/oracle/fast_recovery_area/orcl/ORCL/flashback
[oracle@ora-server flashback]$ ls
o1_mf_ksctqkwx_.flb  o1_mf_ksctqn4l_.flb
[oracle@ora-server flashback]$ du -h
401M	.

闪回日志的参数

SQL> show parameter flashbackNAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target	     integer	 1440

值的单位是分钟,默认1440,也就是闪回的日志可以记录24小时

2.2 删表恢复

先在管理员账户中找到某一个用户,然后为某一个用户创建一张表

--查看数据库账户--SQL> select username from dba_users;
...--为bruce用户创建表后,登陆Bruce账户--
SQL> create table bruce.emp1 as select * from emp;Table created.SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production[oracle@ora-server ~]$ sqlplus bruce/123456SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 10 13:36:59 2022Copyright (c) 1982, 2016, Oracle.  All rights reserved.Last Successful login time: Fri Nov 18 2022 09:35:30 +01:00Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit ProductionSQL> set linesize 200--查看账户下可以操作的表--SQL> select * from tab;TNAME																 TABTYPE  CLUSTERID
-------------------------------------------------------------------------------------------------------------------------------- ------- ----------
EMP1																 TABLE

回收站必须要处于开启状态

SQL> show parameter recyclebinNAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
recyclebin			     string	 on

删除表

SQL> drop table emp1;Table dropped.SQL> select * from emp1;
select * from emp1*
ERROR at line 1:
ORA-00942: table or view does not exist

表在回收站中

SQL> show recyclebin;
ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
EMP1		 BIN$73mbqEJqC+3gU4ITqMBAuA==$0 TABLE	     2022-12-10:13:42:50

查看回收站的详细参数信息

--普通用户只能查看user开头的回收站信息--
SQL> desc user_recyclebin;Name														   Null?    Type----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------OBJECT_NAME													   NOT NULL VARCHAR2(128)ORIGINAL_NAME														    VARCHAR2(128)OPERATION														    VARCHAR2(9)TYPE															    VARCHAR2(25)TS_NAME														    VARCHAR2(30)CREATETIME														    VARCHAR2(19)DROPTIME														    VARCHAR2(19)DROPSCN														    NUMBERPARTITION_NAME 													    VARCHAR2(128)CAN_UNDROP														    VARCHAR2(3)	--能不能被恢复,只有yes才能使用闪回恢复--CAN_PURGE														    VARCHAR2(3)	--能不能回收占用的空间--RELATED													   NOT NULL NUMBERBASE_OBJECT													   NOT NULL NUMBERPURGE_OBJECT													   NOT NULL NUMBERSPACE															    NUMBERSQL> select * from user_recyclebin;OBJECT_NAME															 ORIGINAL_NAME				  OPERATION TYPE
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- --------- -------------------------
TS_NAME 		       CREATETIME	   DROPTIME		  DROPSCN PARTITION_NAME									   CAN CAN    RELATED BASE_OBJECT PURGE_OBJECT	    SPACE
------------------------------ ------------------- ------------------- ---------- -------------------------------------------------------------------------------------------------------------------------------- --- --- ---------- ----------- ------------ ----------
BIN$73mbqEJqC+3gU4ITqMBAuA==$0													 EMP1					  DROP	    TABLE
USERS			       2022-12-10:13:36:20 2022-12-10:13:42:50	  3371932											   YES YES	74810	    74810	 74810		8

确定回收站的就是我们需要的那张表

SQL> select * from "BIN$73mbqEJqC+3gU4ITqMBAuA==$0";EMPNO ENAME		JOB			        MGR HIREDATE	SAL	        COMM    DEPTNO TEL
---------- -------------------- -------------------- ---------- --------- ---------- ---------- ---------- ------------------------------7369 SMITH		CLERK			   7902 17-DEC-80   800			207499 ALLEN		SALESMAN		   7698 20-FEB-81   1600	    300 	307521 WARD 		SALESMAN		   7698 22-FEB-81	1250	    500 	307566 JONES		MANAGER 		   7839 02-MAR-81	2975			    207654 MARTIN		SALESMAN		   7698 28-SEP-81	1250	    1400 	307698 BLAKE		MANAGER 		   7839 01-MAY-81	2850			    307782 CLARK		MANAGER 		   7839 09-JUN-81	2450			    107788 SCOTT		ANALIST 		   7566 19-MAR-87	3000			    207839 KING 		PRESIDENT	            17-NOV-81	5000			    107844 TURNER		SALESMAN		   7698 08-SEP-81	1500	      0 	307876 ADAMS		CLERK			   7788 23-MAY-87	1100			    207900 JAMES		CLERK			   7698 03-DEC-81	950			        307902 FORD 		ANALYST 		   7566 03-DEC-81	3000			    207934 MILLER		CLERK			   7782 23-JAN-82	1300			    1014 rows selected.--回收站里的表是没有办法修改的--SQL> update "BIN$73mbqEJqC+3gU4ITqMBAuA==$0" set sal=0;
update "BIN$73mbqEJqC+3gU4ITqMBAuA==$0" set sal=0*
ERROR at line 1:
ORA-38301: can not perform DDL/DML over objects in Recycle Bin

使用闪回技术恢复表

SQL> flashback table emp1 to before drop;Flashback complete.SQL> select * from emp1;EMPNO ENAME		JOB			    MGR HIREDATE	 SAL	   COMM     DEPTNO TEL
---------- -------------------- -------------------- ---------- --------- ---------- ---------- ---------- ------------------------------7369 SMITH		CLERK			   7902 17-DEC-80	 800			207499 ALLEN		SALESMAN		   7698 20-FEB-81	1600	    300 	307521 WARD 		SALESMAN		   7698 22-FEB-81	1250	    500 	307566 JONES		MANAGER 		   7839 02-MAR-81	2975			207654 MARTIN		SALESMAN		   7698 28-SEP-81	1250	   1400 	307698 BLAKE		MANAGER 		   7839 01-MAY-81	2850			307782 CLARK		MANAGER 		   7839 09-JUN-81	2450			107788 SCOTT		ANALIST 		   7566 19-MAR-87	3000			207839 KING 		PRESIDENT			17-NOV-81	5000			107844 TURNER		SALESMAN		   7698 08-SEP-81	1500	      0 	307876 ADAMS		CLERK			   7788 23-MAY-87	1100			207900 JAMES		CLERK			   7698 03-DEC-81	 950			307902 FORD 		ANALYST 		   7566 03-DEC-81	3000			207934 MILLER		CLERK			   7782 23-JAN-82	1300			1014 

这篇关于Oracle 12C的闪回技术详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070381

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc