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 闪回技术简介
闪回技术是若干技术的集合 包含对数据库整体的闪回 对表的闪回 对事务的闪回 经典面试题面试题:简述Oracle数据库闪回技术? 1.闪回Oracle数据库 2.闪回表 3.闪回事务 数据库闪回 要想实现数据库闪回 1.必须配置数据库的恢复区 SQL> show parameter …...
【笔记】LLC电路工作频点选择 2-2 开关管与滤波压力
LLC谐振变换器稳态工作波形分析 - 知乎,上面这篇文的结论相较MPS那篇文章的结论更严格。我们分析一下它的频点选择为什么会更窄: 1. LLC电路模型 电流滞后的特性就是电路呈感性注意这里也是开关管ZVS开通。 2.工作循环的波形 iLm的波形,最终…...
【CUDA】认识CUDA
目录 一、CUDA编程 二、第一个CUDA程序 三、CUDA关键字 四、device管理 4.1 初始化 4.2 Runtime API查询GPU信息 4.3 决定最佳GPU CUDA C 编程指南CUDA C在线文档:CUDA C 编程指南 CUDA是并行计算的平台和类C编程模型,能很容易的实现并行算法。只…...
Linux(CentOS)yum update -y 事故
CentOS版本:CentOS 7 事情经过: 1、安装好CentOS 7,系统自带JDK8,版本为:1.8.0_181 2、安装好JDK17,版本为:17.0.13 3、为了安装MySQL执行了 yum update -y(这个时候不知道该命令的…...
AI绘画赚钱秘籍!掌握ai绘画赚钱技巧,开启副业新篇章,ai绘画赚钱实战指南!
AI绘画赚钱:方法与策略 一、引言 随着人工智能技术的日益发展,AI绘画作为新兴领域,正逐渐成为赚钱的新途径。本文将从多个角度探讨AI绘画赚钱的完整策略,帮助读者深入了解并把握这一领域的商机。 二、AI绘画赚钱的主要方式…...
HCIP-HarmonyOS Application Developer V1.0 笔记(四)
平板/折叠屏设计 自适应动态布局:相对拉伸、相对缩放、延伸布局 响应式动态布局:挪移布局、重复布局、瀑布布局 Sketch 插件 设计系统:提供了 HarmonyOS 设计语言中定义的视觉参数和设计资源文件。 控件库:按类别组织控件&…...
【前端】Svelte:组件封装与使用
在 Svelte 中,组件化是开发的核心理念。将页面的不同部分封装成独立组件,不仅可以提升代码的复用性,还能让项目的结构更加清晰。在本文中,我们将介绍如何创建、封装、引入和使用 Svelte 组件,帮助你快速上手 Svelte 的…...
STM32标准库-待机模式
1.1 STM32待机模式简介 STM32单片机具有低功耗模式,包括睡眠、停止和待机三种。 运行状态下,HCLK为CPU提供时钟。HCLK由AHB预分频器分频后直接输出得到。 低功耗模式选择需考虑电源消耗、启动时间和唤醒源。 睡眠模式停CPU不停外设时钟; 停止…...
【论文笔记】The Power of Scale for Parameter-Efficient Prompt Tuning
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: The Power of Scale for P…...
几个docker可用的镜像源
几个docker可用的镜像源 💐The Begin💐点点关注,收藏不迷路💐 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框架中,EnableLoadTimeWeaving 是一个注解,它用于启用加载时织入(Load-Time Weaving, LTW) LWT[Spring学习笔记_26——LWT-CSDN博客] 2. 场景 AOP:在Spring框架中…...
【数据分析】如何构建指标体系?
有哪些指标体系搭建模型?五个步骤教你从0开始搭建指标体系 一、企业指标体系搭建存在什么问题 许多企业在搭建数据指标体系时遇到了诸多难题,如问题定位不准确、数据采集不完整、目标不一致、报表无序、指标覆盖不全面以及报表价值未充分利用等。 1、…...
大数据程序猿不可不看的资料大全
随着大数据技术的发展,大数据程序猿在数据采集、处理、分析、存储等方面的技能需求不断增加。要在这个领域保持竞争力,系统性地学习和掌握大数据工具、技术架构和行业趋势是非常重要的。以下为您提供一份围绕大数据程序猿不可不看的资料大全…...
【架构设计常见技术】
EJB EJB是服务器端的组件模型,使开发者能够构建可扩展、分布式的业务逻辑组件。这些组件运行在EJB容器中,EJB将各功能模块封装成独立的组件,能够被不同的客户端应用程序调用,简化开发过程,支持分布式应用开发。 IOC …...
LLMs之MemFree:MemFree的简介、安装和使用方法、案例应用之详细攻略
LLMs之MemFree:MemFree的简介、安装和使用方法、案例应用之详细攻略 目录 MemFree的简介 1、MemFree的价值 2、MemFree 配备了强大的功能,可满足各种搜索和生产力需求 3、MemFree AI UI生成器功能 MemFree 安装和使用方法 1. 前端安装 2. 向量服务…...
Hive简介 | 体系结构
Hive简介 Hive 是一个框架,可以通过编写sql的方式,自动的编译为MR任务的一个工具。 在这个世界上,会写SQL的人远远大于会写java代码的人,所以假如可以将MR通过sql实现,这个将是一个巨大的市场,FaceBook就这…...
[C++] GDB的调试和自动化检测
文章目录 GDB基本使用1. bazel的debug过程2. line-tables-only的使用 Reference GDB基本使用 参考文档: https://zhuanlan.zhihu.com/p/655719314 1. bazel的debug过程 需要带--copt-g --copt-ggdb选项进行编译 // bazel build --stripnever --copt-g --copt-ggd…...
车机版 Android Audio 框架笔记
车机版Android Audio 框架涉及的知识点很多,在工作中涉及的功能板块也及其繁杂,后面我会根据工作中的一些实际遇到的实例,逐步拆解 Android Audio的知识点,这里从网上整理了一些思维导图,可以做为未来的一个研究方向&a…...
【NLP自然语言处理】深入解析Encoder与Decoder模块:结构、作用与深度学习应用
目录 🍔 Encoder模块 1.1 Encoder模块的结构和作用 1.2 关于Encoder Block 1.3 多头自注意力层(self-attention) 🍔 Decoder模块及Add & Norm模块 3.1 Decoder模块介绍 3.2 Add & Norm模块 3.3 位置编码器Positional Encoding 3.4 Decod…...
【JAVA EE】多线程、锁、线程池的使用
目录 创建线程 方法一:继承Thread类来创建一个线程类 方法二:实现Runnable,重写run 线程等待 获取当前线程引用 休眠当前线程 线程的状态 synchronized synchronized的特性 1、互斥 2、刷新内存 死锁 死锁的四个必要条件 避免死…...
云计算:定义、类型及对企业的影响
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企…...
大数据面试题--kafka夺命连环问
1、kafka消息发送的流程? 在消息发送过程中涉及到两个线程:一个是 main 线程和一个 sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给双端队列,sender 线程不断从双端队列 RecordAccumulator 中拉取…...
【大模型】Spring AI Alibaba 对接百炼平台大模型使用详解
目录 一、前言 二、Spring AI概述 2.1 spring ai是什么 2.2 Spring AI 核心能力 2.3 Spring AI 应用场景 三、Spring AI Alibaba 介绍 3.1 Spring AI Alibaba 是什么 3.2 Spring AI Alibaba 核心特点 3.3 Spring AI Alibaba 应用场景 四、SpringBoot 对接Spring AI Al…...
Zabbix如何配置将信息发送到邮件
申请邮箱,下面以QQ邮箱为例 1.1登录邮箱后,点击设置->账号 1.2开启服务 1.3点击生成授权码(这里生成的授权码记得保存,后面要用到) 创建报警媒介类型 2.1点击管理/媒介/Email 2.2编辑 Email,这里配置的…...
jmeter常用配置元件介绍总结之前置处理器、测试片段
系列文章目录 安装jmeter jmeter常用配置元件介绍总结之前置处理器、测试片段 6.前置处理器6.1用户参数6.2取样器超时6.3.测试片段6.4JSR223 PreProcessor6.5.JDBC PreProcessor 6.前置处理器 在取样器请求之前执行的操作,优先级比取样器高,用来处理一些…...
Redis2:Redis数据结构介绍、通用命令、String类型、Key的层级格式
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
jenkins流水线pipeline
创建项目 1. 新建item 并选择pipeline 1.1 和普通项目配置的区别 普通项目配置目录: pipeline项目目录: pipeline的两种语法 声明式语法 2. 配置 2.1 流水线配置 2.2 选择声明式 声明式需要添加一个名为Jenkinsfile的文件实现流水线 Jenkinsfile的…...
【计网】基于TCP协议的Echo Server程序实现与多版本测试
目录 前言: 1、InitServer类的实现 1.1. 创建流式套接字 1.2. bind 绑定一个固定的网络地址和端口号 1.3.listen监听机制 1.4.完整代码 2. 循环接收接口与服务接口 2.1.accept函数讲解 讲个商场拉客的故事方便我们理解: 2.2.服务接口实现 3.服…...
「QT」几何数据类 之 QVector2D 二维向量类
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
文章目录 🌺深度学习面试八股汇总🌺权重初始化零初始化 (Zero Initialization)随机初始化 (Random Initialization)Xavier 初始化(Glorot 初始化)He 初始化正交初始化(Orthogonal Initialization)预训练模型…...
网站建设公司如何盈利/抖音权重查询
关于Junit的介绍: 官方介绍: JUnit 5是下一代的JUnit。其目标是为JVM上的开发端测试创建一个最新的基础。这包括关注Java 8和以上,以及支持多种不同的测试风格。 JUnit 5是JUnit Lambda及其在Indiegogo上众筹活动的结果。 引用度娘的介绍…...
北京网站建设手机app电子商务/一级消防工程师考试
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复231或者20161031可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 。 我这里有个简单的需求,就是选…...
廊坊网站开发公司/桂林最新消息今天
[CSP2021]廊桥分配(airport) P7913 [CSP-S 2021] 廊桥分配 通过题意我们可以知道,预处理对于每个国内和国外机场来说,分配给1-m个廊桥进行停放。 设f[i]:国内有i个廊桥能承载的飞机数量设f[i]: 国内有 i 个廊桥能承载的飞机数量…...
wordpress怎么做积分/市场营销培训
如果你曾用过 Go 中的 goroutines,你也许会遇到几个并发原语,如 sync.Mutex, sync.WaitGroup 或是 sync.Map,但是你听说过 sync.Once 么?也许你听说过,那 go 文档是怎么描述它的呢?Once 是只执行一个操作的…...
做接口的网站/网络推广是以企业产品或服务
原文地址为: 老调重弹:车牌识别最近一年来忙于研发任务,不得不放下Silverlight 3D的学习。研发中要求逐步解决车牌图像识别、重车桥数(主要用于进行超载检测)图像识别和部分矿种的图像识别。本次将介绍车牌的图像识别。…...