Oracle修改数据之后提交事务如何回滚?

news2025/1/11 6:51:25

在 MySQL 和 Oracle 数据库中,事务提交后都无法回滚。

在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。当事务已经被提交之后,就无法再次回滚了。

在 Oracle 数据库中,当一个事务执行成功后,数据库会将事务所做的改变持久化到磁盘中,这样就保证数据的安全性和一致性。而且一旦事务提交,数据库将不再保存旧的数据。由于磁盘上的数据是不可逆的,因此一旦数据写入成功,就无法再次修改。


所以并不是回滚,但是当我在pl dev软件中执行了某些修改,删除等操作,并手动提交事务之后,现在想要恢复原本的数据怎么办呢?


Oracle提供了闪回的功能,可以查询出来数据,在你某个时间节点之前的数据。 比如这样:


SELECT * FROM IMAE_T AS OF TIMESTAMP TO_TIMESTAMP('20231008 08:00:00','YYYYMMDD HH24:MI:SS') 
WHERE IMAEENT = 88 AND IMAESITE = 'JHNL' AND IMAE001 LIKE '1004%' ORDER BY IMAE001

在这里插入图片描述
但是这个时间不能太长,否则会报错:

在这里插入图片描述
oracle数据库报错:ORA-01555: 快照过旧: 回退段号 10 (名称为 "_SYSSMU10_3550978943$") 过小

简单记录一下,可能就是因为写入的undo表空间的undo数据太大了,很有可能就是被固定周期内清除掉了这个数据。

ORA-01555 是 Oracle 数据库中的一个错误,表示在尝试读取数据库中的数据时,发现所需的回滚段已经回滚到一个不再包含所需数据版本的点。这通常发生在长时间运行的事务中,尤其是在使用读一致性的情况下。

错误消息中的一部分 “过小” 暗示了回滚段的大小问题。当 Oracle 查询引擎尝试使用回滚段的过时版本时,可能由于回滚段不足以支持所需的读一致性而导致这个错误。

一些可能导致这个错误的常见原因包括:

  1. 长时间运行的事务:如果有一个持续运行的事务,可能会导致回滚段变得很小,无法支持所需的读一致性。

  2. 回滚段配置问题:如果回滚段配置不合理,也可能导致空间不足。

  3. 大量的并发事务:如果有大量的并发事务,可能会导致回滚段被频繁使用,使其难以维护。

解决这个问题的方法可能包括:

  • 增加回滚段的大小或数量。
  • 优化事务,确保它们不会在长时间内持有锁或在数据库中运行。
  • 考虑使用更高级别的事务隔离级别,以减轻 ORA-01555 错误的发生。


当前还可以直接闪回一个表的数据到某个时间点。


-- 使用闪回将员工表恢复到1小时前的状态
FLASHBACK TABLE employees TO TIMESTAMP(sysdate-1/24); 

在上述代码中,我们使用FLASHBACK语句将名为employees的表恢复到1小时前的状态。这意味着如果在过去1小时内进行了任何更改,则这些更改将被撤消。

它可以在不进行备份的情况下将数据库回滚到过去的某个时间点。

以下是详细步骤:

  1. 启用闪回功能:首先,需要确保数据库已经启用了闪回功能。这包括启用自动撤销管理(Automatic Undo Management)和设置回滚段(Rollback Segment)的保留时间。
  2. 使用闪回查询(Flashback Query):闪回查询允许您查询过去某个时间点的数据。要使用闪回查询,请使用以下语法:
SELECT *  
FROM table_name AS OF timestamp  
TO TIMESTAMP('2016-08-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS');  

这里的 timestamp 是一个时间戳,表示要回滚到的时间点。
3. 使用闪回表(Flashback Table):闪回表允许您将当前表恢复到过去的某个状态。要启用闪回表,请使用以下语法:

ALTER TABLE table_name ENABLE ROW MOVEMENT;  
  1. 使用闪回数据库(Flashback Database):闪回数据库允许您将整个数据库回滚到过去的某个时间点。这在需要恢复整个数据库的情况下非常有用。要使用闪回数据库,请使用以下语法:
FLASHBACK DATABASE TO TIMESTAMP('2016-08-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS');  

需要注意的是,使用闪回功能可能会影响数据库的性能,因此建议谨慎使用。另外,闪回功能并不能替代备份,因此在日常维护中,还需要定期对数据库进行备份。


但是我的只是更改了几千条数据,并不是想要去动这个表的几万条数据。是有筛选条件的闪回。

所以不能使用整个表的闪回功能。

最终选择了手动去更新。

  1. 首先通过闪回筛选条件查出来变更前的数量单子
  2. 拷贝出来修改前的字段
  3. 查询sql语句 然后for update 直接进行拷贝粘贴
  4. 最后提交事务

这就是我通过闪回功能回滚数据的一次操作。

ok,我已经讲完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDE环境要注意统一编码,否则出现中文乱码找不到头绪

最近遇到在IDEA开发项目时,保存中文为乱码的现象,如图: 看了项目配置文件的编码都是UTF-8,在别的开发机上运行都正常,就是这台机器上有问题。 同事一时也找不到方法,因为没遇到同样的事情。 一直怀疑是编…

Spring源码解析——IOC之循环依赖处理

什么是循环依赖 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图所示: 注意,这里不是函数的循环调用,是对象的相…

tcpdump(三)命令行参数讲解(二)

一 tcpdump实战详解 骏马金龙tcpdump详解 强调: 注意区分选项参数和过滤条件 本文继上篇 网卡没有开启混杂模式 tcpdump默认开启混杂模式 --no-promiscuous-mode --> 可以指定在非混杂模式抓包 ① -vv 控制详细内容的输出 ② -s -s 长度: 可以只…

基于Java的社区生鲜在线电商平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【排序算法】选择排序

文章目录 一:基本介绍1.1 概念1.2 算法思想1.3 思路分析图1.4 思路分析1.5 总结1.5.1 选择排序一共有数组大小-1轮排序1.5.2 每一轮排序,又是一个循环,循环的规则如下(在代码中实现): 二:代码实…

大数据——Spark Streaming

是什么 Spark Streaming是一个可扩展、高吞吐、具有容错性的流式计算框架。 之前我们接触的spark-core和spark-sql都是离线批处理任务,每天定时处理数据,对于数据的实时性要求不高,一般都是T1的。但在企业任务中存在很多的实时性的任务需求&…

C#,数值计算——数据建模Fitexy的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Fitexy { private double a { get; set; } private double b { get; set; } private double siga { get; set; } private double sigb { get; set; } …

快速搭建Springboot项目(一)

目录 第一章、Spring Boot框架介绍1.1)Springboot是什么,有什么好处1.2)spring boot的两大策略与四大核心 第二章、快速搭建spring boot 项目2.1)idea快速创建spring boot项目2.2)pom文件内容的含义2.3)起步…

195、SpringBoot--配置RabbitMQ消息Broker的SSL 和 管理控制台的HTTPS

开启Rabbitmq的一些命令: 小黑窗输入: rabbitmq-plugins enable rabbitmq_management 启动控制台插件,就是启动登录rabbitmq控制台的页面 rabbitmq_management 代表了RabbitMQ的管理界面。 rabbitmq-server 启动rabbitMQ服务器 上面这个&…

springboot中的静态资源规则~

静态资源处理: 默认的静态资源路径为 calsspath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/如果我们将静态资源放置上述四种路径处,那么可以通过项目根路径/静态资源名称的方式访问到,否则会访问不…

Oracle-ASM实例communication error问题处理

问题背景: Oracle数据库日志出现大量的WARNING: ASM communication error: op 0 state 0x0 (15055)错误 问题分析: 首先检查ASM实例的状态,尝试通过sqlplus / as sysasm连接asm实例,出现Connected to an idle instance连接asm实例失败 检查ASM实例的后台…

mysql面试题27:数据库中间件了解过吗?什么是sharding jdbc、mycat,并且讲讲怎么使用?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:数据库中间件了解过吗,比如sharding jdbc、mycat? 我知道的数据库中间件有以下这些: MySQL Proxy:MySQL Proxy是一个开源的数据库中间件,它位…

SSM170基于SSM的疫情物质管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

怎么禁止windows server2003系统中的用户进行本地登陆

随着科技的发展,电脑已经成为人们日常生活中必不可少的工具,电脑系统也在逐步更新,这就导致了许多人对于陌生的系统都不知道应该怎么办?当我们在使用windows server2003时,如何设置用户禁止本地登陆呢?接下…

【Linux初阶】多线程1 | 页表的索引作用 线程基础

本文要点 再次理解页表,了解页表是如何利用虚拟地址进行索引,实现数据读取和传输的了解线程概念,线程的优缺点,线程异常的后果了解线程和进程的差异了解线程库及其基本调用接口(进程创建、终止、等待、控制&#xff0…

SQL sever中的视图

目录 一、视图概述: 二、视图好处 三、创建视图 法一: 法二: 四、查看视图信息 五、视图插入数据 六、视图修改数据 七、视图删除数据 八、删除视图 法一: 法二: 一、视图概述: 视图是一种常用…

如何使用 Datree 避免 Kubernetes 错误配置

Kubernetes 是一个复杂的系统,具有许多移动部件。正确的配置规则对于您的服务可靠运行至关重要。当您在没有经过全面审查过程的情况下手动编写 Kubernetes 清单时,可能会出现错误。 Datree是一个基于规则的工具,可以自动查找清单中的问题。您可以使用它来发现策略违规行为,…

常见算法-洗扑克牌(乱数排列)

常见算法-洗扑克牌(乱数排列) 1、说明 洗扑克牌的原理其实与乱数排列是相同的,都是将一组数字(例如1∼N)打乱重新排列,只不过洗扑克牌多了一个花色判断的动作而已。 初学者通常会直接想到,随…

基于 ACK Fluid 的混合云优化数据访问(一):场景与架构

作者:车漾(必嘫) 本系列文章将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景。 概述 在 AI 和大数据时代,算力即正义,强大的算力推动了源源不断的创新。然而,企业自建的算力集群存在资源容量和…

继续改进 换一种 使用 result 想直接用CourseExtend

改 c.cid cid, 表示 c.cid 在 from timetable tt inner join teacher t on tt.tidt.tid inner join course c on tt.cidc.cid where tt.cid#{cid} 查出来了 任何赋值给 后面那个cid t.tname "teacher.tname", 表示查出来 赋值给下图那个teacher类的对应属性…