当前位置: 首页 > news >正文

ORACLE 闪回技术简介

闪回技术是若干技术的集合 包含对数据库整体的闪回 对表的闪回 对事务的闪回

经典面试题面试题:简述Oracle数据库闪回技术? 
1.闪回Oracle数据库
2.闪回表
3.闪回事务


数据库闪回
要想实现数据库闪回
1.必须配置数据库的恢复区
SQL> show parameter recover

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest             string
db_recovery_file_dest_size         big integer 0
数据库的恢复区 可用用来存放多种数据 比如:控制文件的镜像 redo文件的镜像 归档 备份 闪回日志(只能存放在这里)
闪回日志
数据库能够实现时间的倒退(闪回)要依赖闪回日志的记录 

! mkdir -p /home/oracle/flash
alter system set db_recovery_file_dest_size=2G;
alter system set db_recovery_file_dest='/home/oracle/flash';

2.开启数据库的闪回功能 
(1)保证数据库已经运行在归档模式 
SQL> archive log list;
Database log mode           Archive Mode
Automatic archival           Enabled
(2)查询是否已经开启闪回 
SQL> select FLASHBACK_ON from v$database;

FLASHBACK_ON
------------------
NO
开启闪回
alter database flashback on ;
SQL> select FLASHBACK_ON from v$database;

FLASHBACK_ON
------------------
YES

验证数据库的闪回功能 
SQL> create table t1 as select * from dba_objects;

Table created.


SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1679739


SQL> create table t2 as select * from t1;

Table created.

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> truncate  table t1;

Table truncated.

SQL> shutdown immediate

SQL> startup mount 

SQL> flashback database to scn 1679739;

SQL> alter database open resetlogs;

生产上 闪回数据库这个操作 不能够用来找回误删除的数据
1.闪回需要数据库运行在mount阶段 意味着需要关闭数据库
2.闪回到过去的时间点后 在这期间数据库的所有数据全部丢失


闪回数据库技术能干什么
1.压力测试后 回退数据
2.数据库版本升级

在生产上 误删除了数据 可以用备份恢复的方式找回数据 

闪回表
1.drop表后 将表闪回
利用Oracle的回收站功能

回收站
SQL> show parameter recyc

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
recyclebin                 string     on

回收站各个用户之间独立

回收站的空间属性问题
SQL> create tablespace test datafile '/u01/app/oracle/oradata/PROD4/PROD4/test.dbf' size 10m;

Tablespace created.

SQL> create user bsr identified by oracle default tablespace test;

User created.
SQL> conn bsr/oracle
Connected.

SQL> create table TEST1 as select * from dba_objects;

Table created.

SQL> select sum(bytes)/1024/1024 from dba_segments where segment_name='TEST1';

SUM(BYTES)/1024/1024
--------------------
                   9

SQL> show recyclebin
SQL> desc dba_free_space;     
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLESPACE_NAME                                    VARCHAR2(30)
 FILE_ID                                            NUMBER
 BLOCK_ID                                           NUMBER
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER
 RELATIVE_FNO                                       NUMBER

SQL> select TABLESPACE_NAME,bytes/1024/1024 from dba_free_space where tablespace_name='TEST';
select TABLESPACE_NAME,sum(bytes)/1024/1024 from dba_free_space group by TABLESPACE_NAME; 
no rows selected

SQL> DROP TABLE TEST1;

Table dropped.

DROP表的本质 是将表进行改名 并且 将段使用的空间从永久变为临时

show recyclebin
flashback table "BIN$xxxxx" to before drop [rename to 表名]


2.delete行 将表中已删除的行找回

SQL> create table SALARY as select EMPLOYEE_ID,COMMISSION_PCT from hr.employees;查看下操作系统时间date
 
delete SALARY where employee_id in (select employee_id from hr.employees where HIRE_DATE<to_date('2002-01-01','yyyy-mm-dd'));

闪回查询 只要修改的数据在undo中存放 就可以在查询时 添加时间点 找到对应的数据 如果undo中数据被覆盖 那么会报快照过旧
Fri Apr 12 02:49:47 UTC 2019

  select * from SALARY AS OF timestamp to_date('2019-04-12 02:49:47','yyyy-mm-dd hh24:mi:ss') where employee_id in (select employee_id from hr.employees where HIRE_DATE<to_date('2002-01-01','yyyy-mm-dd'));

EMPLOYEE_ID COMMISSION_PCT
----------- --------------
    102

delete t1 where 条件 name=fuxian

update t1 set salary=salary+1000 where name=fuxian

insert into table xxx values( );
02:15:40 UTC 2016
--delete 整个表后可以使用flashback table 找回

SQL> alter table test enable row movement;--先打开行移动的功能

flashback  table  SALARY  to timestamp to_date('2019-04-12 02:49:49','yyyy-mm-dd hh24:mi:ss'); 

————————————————————————————————————
两种方式 生产上 尽量用第一种方式 插入的方式

因为数据的还原值都在undo里记录 我们可以利用undo对数据进行闪回版本查询

flash version query
flashback version query提供了一个审计行改变的功能,它能找到所有已经提交了的行的记录,比如说,时间1,我插入一条记录,时间2我删除了这条记录,对于时间3,当然查询不到这条记录,但是flashback version query能够把时间1、时间2的操作给记录下来,并详细的查询出来。
flashback version query一样依赖于AUM(自动undo管理),所以,这里就不再多说AUM的配置。flashback version query采用VERSIONS BETWEEN语句来进行查询
,常用的有:
·VERSIONS_SCN – 系统改变号
·VERSIONS_TIMESTAMP – 时间


下面将展示这个 flashback version query

SQL> connect test/test
Connected.
SQL> create table t1(ID int,NAME varchar2(10));
Table created.
我们执行一系列如下的操作:
   insert into T1 values(1,'A');
 
   commit;
 
  update T1 set ID=2;
 
  commit;
 
 update T1 set ID=3;
 
 commit;
 
update T1 set ID=4;
 
 
 
现在,我们看到该表最后的记录是
16:34:49 SQL> select * from T1;
     A      B
---------- ----------
      5 16:34:34
这个时候,如果我们利用flash table或者是flash query,我们也只能是看到过去的莫一个快照而已,利用flashback version query,我们将找到其中的任何变化,如
SQL>select versions_starttime, versions_endtime, versions_xid,
      versions_operation,ID,NAME
      from t1 versions between timestamp minvalue and maxvalue
      order by VERSIONS_STARTTIME;


SELECT * FROM (select versions_starttime, versions_endtime, versions_xid,
      versions_operation,ID,NAME
      from t1  versions between timestamp minvalue and maxvalue
      order by VERSIONS_STARTTIME) WHERE NAME='B' ;

VERSIONS_STARTTIME        VERSIONS_ENDTIME               VERSIONS_XID     V         ID NAME
------------------------- ------------------------------ ---------------- - ---------- ----
12-OCT-15 02.01.30 PM                                    01000D00C3010000 U          5 D
12-OCT-15 02.01.30 PM     12-OCT-15 02.01.30 PM          0600110096020000 I          4 C
12-OCT-15 02.01.30 PM     12-OCT-15 02.01.30 PM          0A001F00FB010000 I          1 A
12-OCT-15 02.01.30 PM     12-OCT-15 02.01.30 PM          04001C002B020000 U          3 B
12-OCT-15 02.01.30 PM     12-OCT-15 02.01.30 PM          080009006D030000 U          2 B
12-OCT-15 02.01.30 PM                                    090002008E020000 D          3 B


select versions_starttime, versions_endtime, versions_xid,
      versions_operation,salary
      from employees versions between timestamp minvalue and maxvalue where employee_id=107
      order by VERSIONS_STARTTIME;
注意:
此处显示了对该表所作的所有更改,甚至包括该行被删除和重新插入的情况。VERSION_OPERATION 列显示对该行执行了什么操作 (Insert/Update/Delete)。
所做的这些工作不需要历史表或额外的列。
flashback version query记载的是行的改变,如果一个操作有多行的改变,如delete from tablename,那么,在flashback version query对应的也是多行。
 
在上述查询中,列 versions_starttime、versions_endtime、versions_xid、versions_operation 是伪列,与 ROWNUM、LEVEL 等其他熟悉的伪列相类似。其他伪列 — 如 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN — 显示了该时刻的系统更改号。列 versions_xid 显示了更改该行的事务标识符。有关该事务的更多详细信息可在视图 FLASHBACK_TRANSACTION_QUERY 中找到(这个将在flashback transaction query中描述)。
 
当然,除了分析以上所有的变更之外,我们可以指定时间段,如
select ID,NAME
from test versions between timestamp
to_date('2004-04-07 04:34:04','yyyy-mm-dd hh24:mi:ss')
and to_date('2004-04-07 04:34:50','yyyy-mm-dd hh24:mi:ss');

还可以使用 SCN 来找出过去的版本值。可以从伪列 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN 中获得 SCN 号。以下是一个示例:
select versions_starttime, versions_endtime
from test versions
between scn 1000 and 1001


flashback transaction query闪回事务:
Oracle 11g的闪回事务查询就是对过去某段时间内所完成的事务的查询和撤销。10g数据来源于undo,11g来自undo/redo/archivelog,在考试中我们使用em来操作,举例如下:
 a、打开数据库补充日志:
sql>alter database add supplemental log data;
b、打开主键补充日志:
sql>alter database add supplemental log data (primary key) columns;
然后用em查询,和查询闪回版本差不多:打开em----Availability----->Perform Recovery----如下选择

/*== transaction 1 ==*/

INSERT INTO hr.departments VALUES (280,'ERP', NULL, 1700)
/
INSERT INTO hr.departments VALUES (290,'Support Operations', NULL, 1700)
/
INSERT INTO hr.departments VALUES (300,'HR Training', NULL, 1700)
/
commit
/

/*== transaction 2 ==*/

update hr.departments set department_id=310 where department_id=280
/
commit
/

/*== transaction 3 ==*/


update hr.departments set department_name='ABC'   where department_id=310
/
commit

alter system switch logfile; 切三遍以上
然后用em查询,和查询闪回版本差不多:打开em----Availability----->Perform Recovery----如下选择:将上面的事务操作闪回到第一次update之前。

相关文章:

ORACLE 闪回技术简介

闪回技术是若干技术的集合 包含对数据库整体的闪回 对表的闪回 对事务的闪回 经典面试题面试题&#xff1a;简述Oracle数据库闪回技术&#xff1f; 1.闪回Oracle数据库 2.闪回表 3.闪回事务 数据库闪回 要想实现数据库闪回 1.必须配置数据库的恢复区 SQL> show parameter …...

【笔记】LLC电路工作频点选择 2-2 开关管与滤波压力

LLC谐振变换器稳态工作波形分析 - 知乎&#xff0c;上面这篇文的结论相较MPS那篇文章的结论更严格。我们分析一下它的频点选择为什么会更窄&#xff1a; 1. LLC电路模型 电流滞后的特性就是电路呈感性注意这里也是开关管ZVS开通。 2.工作循环的波形 iLm的波形&#xff0c;最终…...

【CUDA】认识CUDA

目录 一、CUDA编程 二、第一个CUDA程序 三、CUDA关键字 四、device管理 4.1 初始化 4.2 Runtime API查询GPU信息 4.3 决定最佳GPU CUDA C 编程指南CUDA C在线文档&#xff1a;CUDA C 编程指南 CUDA是并行计算的平台和类C编程模型&#xff0c;能很容易的实现并行算法。只…...

Linux(CentOS)yum update -y 事故

CentOS版本&#xff1a;CentOS 7 事情经过&#xff1a; 1、安装好CentOS 7&#xff0c;系统自带JDK8&#xff0c;版本为&#xff1a;1.8.0_181 2、安装好JDK17&#xff0c;版本为&#xff1a;17.0.13 3、为了安装MySQL执行了 yum update -y&#xff08;这个时候不知道该命令的…...

AI绘画赚钱秘籍!掌握ai绘画赚钱技巧,开启副业新篇章,ai绘画赚钱实战指南!

AI绘画赚钱&#xff1a;方法与策略 一、引言 ​ 随着人工智能技术的日益发展&#xff0c;AI绘画作为新兴领域&#xff0c;正逐渐成为赚钱的新途径。本文将从多个角度探讨AI绘画赚钱的完整策略&#xff0c;帮助读者深入了解并把握这一领域的商机。 二、AI绘画赚钱的主要方式…...

HCIP-HarmonyOS Application Developer V1.0 笔记(四)

平板/折叠屏设计 自适应动态布局&#xff1a;相对拉伸、相对缩放、延伸布局 响应式动态布局&#xff1a;挪移布局、重复布局、瀑布布局 Sketch 插件 设计系统&#xff1a;提供了 HarmonyOS 设计语言中定义的视觉参数和设计资源文件。 控件库&#xff1a;按类别组织控件&…...

【前端】Svelte:组件封装与使用

在 Svelte 中&#xff0c;组件化是开发的核心理念。将页面的不同部分封装成独立组件&#xff0c;不仅可以提升代码的复用性&#xff0c;还能让项目的结构更加清晰。在本文中&#xff0c;我们将介绍如何创建、封装、引入和使用 Svelte 组件&#xff0c;帮助你快速上手 Svelte 的…...

STM32标准库-待机模式

1.1 STM32待机模式简介 STM32单片机具有低功耗模式&#xff0c;包括睡眠、停止和待机三种。 运行状态下&#xff0c;HCLK为CPU提供时钟。HCLK由AHB预分频器分频后直接输出得到。 低功耗模式选择需考虑电源消耗、启动时间和唤醒源。 睡眠模式停CPU不停外设时钟&#xff1b; 停止…...

【论文笔记】The Power of Scale for Parameter-Efficient Prompt Tuning

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: The Power of Scale for P…...

几个docker可用的镜像源

几个docker可用的镜像源 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; sudo rm -rf /etc/docker/daemon.json sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://d…...

Spring学习笔记_27——@EnableLoadTimeWeaving

EnableLoadTimeWeaving 1. 介绍 在Spring框架中&#xff0c;EnableLoadTimeWeaving 是一个注解&#xff0c;它用于启用加载时织入&#xff08;Load-Time Weaving, LTW&#xff09; LWT[Spring学习笔记_26——LWT-CSDN博客] 2. 场景 AOP&#xff1a;在Spring框架中&#xf…...

【数据分析】如何构建指标体系?

有哪些指标体系搭建模型&#xff1f;五个步骤教你从0开始搭建指标体系 一、企业指标体系搭建存在什么问题 许多企业在搭建数据指标体系时遇到了诸多难题&#xff0c;如问题定位不准确、数据采集不完整、目标不一致、报表无序、指标覆盖不全面以及报表价值未充分利用等。 1、…...

大数据程序猿不可不看的资料大全

​ 随着大数据技术的发展&#xff0c;大数据程序猿在数据采集、处理、分析、存储等方面的技能需求不断增加。要在这个领域保持竞争力&#xff0c;系统性地学习和掌握大数据工具、技术架构和行业趋势是非常重要的。以下为您提供一份围绕大数据程序猿不可不看的资料大全&#xf…...

【架构设计常见技术】

EJB EJB是服务器端的组件模型&#xff0c;使开发者能够构建可扩展、分布式的业务逻辑组件。这些组件运行在EJB容器中&#xff0c;EJB将各功能模块封装成独立的组件&#xff0c;能够被不同的客户端应用程序调用&#xff0c;简化开发过程&#xff0c;支持分布式应用开发。 IOC …...

LLMs之MemFree:MemFree的简介、安装和使用方法、案例应用之详细攻略

LLMs之MemFree&#xff1a;MemFree的简介、安装和使用方法、案例应用之详细攻略 目录 MemFree的简介 1、MemFree的价值 2、MemFree 配备了强大的功能&#xff0c;可满足各种搜索和生产力需求 3、MemFree AI UI生成器功能 MemFree 安装和使用方法 1. 前端安装 2. 向量服务…...

Hive简介 | 体系结构

Hive简介 Hive 是一个框架&#xff0c;可以通过编写sql的方式&#xff0c;自动的编译为MR任务的一个工具。 在这个世界上&#xff0c;会写SQL的人远远大于会写java代码的人&#xff0c;所以假如可以将MR通过sql实现&#xff0c;这个将是一个巨大的市场&#xff0c;FaceBook就这…...

[C++] GDB的调试和自动化检测

文章目录 GDB基本使用1. bazel的debug过程2. line-tables-only的使用 Reference GDB基本使用 参考文档&#xff1a; https://zhuanlan.zhihu.com/p/655719314 1. bazel的debug过程 需要带--copt-g --copt-ggdb选项进行编译 // bazel build --stripnever --copt-g --copt-ggd…...

车机版 Android Audio 框架笔记

车机版Android Audio 框架涉及的知识点很多&#xff0c;在工作中涉及的功能板块也及其繁杂&#xff0c;后面我会根据工作中的一些实际遇到的实例&#xff0c;逐步拆解 Android Audio的知识点&#xff0c;这里从网上整理了一些思维导图&#xff0c;可以做为未来的一个研究方向&a…...

【NLP自然语言处理】深入解析Encoder与Decoder模块:结构、作用与深度学习应用

目录 &#x1f354; Encoder模块 1.1 Encoder模块的结构和作用 1.2 关于Encoder Block 1.3 多头自注意力层(self-attention) &#x1f354; Decoder模块及Add & Norm模块 3.1 Decoder模块介绍 3.2 Add & Norm模块 3.3 位置编码器Positional Encoding 3.4 Decod…...

【JAVA EE】多线程、锁、线程池的使用

目录 创建线程 方法一&#xff1a;继承Thread类来创建一个线程类 方法二&#xff1a;实现Runnable&#xff0c;重写run 线程等待 获取当前线程引用 休眠当前线程 线程的状态 synchronized synchronized的特性 1、互斥 2、刷新内存 死锁 死锁的四个必要条件 避免死…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...