前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【赵渝强老师】Oracle的还原数据

【赵渝强老师】Oracle的还原数据

原创
作者头像
赵渝强老师
发布2024-08-12 15:27:19
1000
发布2024-08-12 15:27:19
举报
文章被收录于专栏:关系型数据库

  Oracle数据库的还原数据都是存储在还原表空间中,其作用主要体现在以下3个方面:

  • 首先,还原数据用于支持查询的一致性读取。为了保证在同一个事务中前后读取数据的一致性,原始信息必须作为还原数据存在。只要保留的还原数据,Oracle数据库就能通过重建数据来满足读取一致性查询的要求。
  • 其次,闪回技术也是基于还原数据的。例如,闪回查询可以查找过去某个时间存在的某个版本的数据。只要在还原数据中过去那个时间的还原信息仍存在,闪回查询就能成功完成。
  • 最后,还原数据也可用于从失败的事务处理中进行恢复。

简单来说还原数据就是历史数据,也叫做undo数据。在有些文档中也叫做撤销数据。

  视频讲解如下:

视频内容

  下图解释了还原数据的工作原理。从图中可以看出当会话2读取表中数据的时候,发现数据已经被更改,但对于的事务还未提交。这时候服务器进程就不会将表中新的数据返回给会话2,而从还原表空间中读取旧值,并将其返回给会话2。

  在Oracle数据库中,还原数据分为以下三种不同的类型。如下表所示。

  下面通过一个简单的例子来说明什么是Oracle数据库的还原数据。

(1)使用scott用户登录数据库。

代码语言:sql
复制
sqlplus scott/tiger

(2)查询员工号为7839的薪水。

代码语言:sql
复制
SQL> select sal from emp where empno=7839;
# 输出的信息如下:
       SAL
----------
      5000

(3)更新员工号为7839的薪水为6000元。

代码语言:sql
复制
SQL> update emp set sal=6000 where empno=7839; 

由于Oracle数据库默认情况下是自动开启事务的。因此,这里执行的update语句将会自动开启一个事务。

(4)重新查询员工号为7839的薪水。

代码语言:sql
复制
SQL> select sal from emp where empno=7839;

# 输出的信息如下:
       SAL
----------
      6000

(5)执行事务的回滚操作。

代码语言:sql
复制
SQL> rollback;

(6)重新查询员工号为7839的薪水。

代码语言:sql
复制
SQL> select sal from emp where empno=7839;
# 输出的信息如下:
       SAL
----------
      5000

当这里的第(5)步执行完成后,员工的薪水又恢复回了5000块钱。因此,作为历史数据的5000元钱在第(3)步的update语句之后,而在第(5)步的rollback语句之前就是保存在了还原表空间的数据文件中。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档