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

Oracle表空间管理(二)

  1. List item
    本篇咱们深入讨论下undo相关管理。

Undo数据具体指的是什么?

1. UNDO数据是:

原始的、修改之前的数据副本;
-针对更改数据的每个事务处理而捕获;
-至少保留到事务处理结束;保留的还原数据量及其保留时间取决于数据库活动量以及数据库配置;
-用于支持:
-回退操作;
–读取一致性查询;
–Oracle闪回查询、Oracle闪回事务处理和Oracle闪回表;
–从失败的事务处理中进行恢复;

2. UNDO的作用是什么?

-读取一致性查询:提供与查询开始时的数据一致的结果。如果要成功完成读取一致性查询,原始信息必须仍作为还原信息存在。如果原始数据不再可用,则会收到“snapshottooold”错误(ORA-01555)。只要保留了还原信息,OracleDB就能通过重建数据来满足读取一致性查询的要求。
-闪回查询:查找在过去某个时间点存在的某个版本的数据。只要在过去那个时间的还原信息仍存在,闪回查询就能成功完成。
-闪回事务处理:使用还原功能来创建补偿事务处理,以便回退事务处理及其相关事务处理。
-闪回表功能:可将表恢复到特定的时间点。
-事务处理失败恢复:如果在用户提交或回退事务之前,用户会话异常结束(如:网络错误或客户机故障),就会导致事务处理失败。当实例崩溃或发出SHUTDOWN ABORT命令时,事务处理也可能会失败。事务处理失败后,最安全处理就是撤销用户做出的所有更改,还原失败处理前的原始数据。

3. 事务处理过程

在这里插入图片描述
-每个事务处理仅分配一个还原段;
-一个还原段可以同时服务多个事务处理;
-还原段可根据需要自动增长和收缩,是一个循环存储缓冲区;
-查看V$TRANSACTION动态性能视图,可以了解哪些事务处理分配到哪些还原段;

4. UNDO数据的存储

Undo存储在UNDO表空间(undotablespace)的还原段(undosegment)中,即UNDO表空间:
-仅限用于还原段,无法创建其它段类型(如:表、索引等);
-只能与单个实例相关联;
-数据库可以设置多个UNDO表空间,但是对于数据库中的任一实例,当前只能使用一个UNDO表空间;
-还原表空间出错后,只能在实例处于MOUNT状态时才可恢复;

5. UNDO与REDO的区别

在这里插入图片描述
在这里插入图片描述

如何管理UNDO

1. 自动还原管理(AUM-Auto Undo Management):

-在UNDO表空间中对UNDO数据和空间进行完全自动的管理;
-用于所有会话;
-在AUTO EXTEND的UNDO表空间中,将还原保留期优化为略长于运行时间最长的活动查询,以满足长时间运行的查询的需求;
-在固定大小的UNDO表空间中,采用动态优化,以获得最佳的保留时间。支持闪回操作时,需要重点关注以下几点:
–配置还原保留期(undoretention);
–调整UNDO表空间的大小;
–避免出现空间或“snapshottooold(快照太旧)”的错误;

2.配置还原保留时间(UNDO_RETENTION)

UNDO_RETENTION参数指定了已提交的UNDO信息要保留多长时间(秒)。在以下情况,必须设置此参数:
-UNDO表空间启用了AUTOEXTEND设置
-需要设置LOB的还原保留时间
-需要保证保留时间(guarantee retention)
-对于固定大小的UNDO表空间,除非启用了保留时间保证,否则系统会忽略UNDO_RETENTION

3.UNDO数据的分类

-(Active)未提交的还原信息:用来支持当前运行的事务处理;如果用户要回退事务处理或事务处理失败时,需要用到这类信息。绝对不会覆盖未提交的还原信息。
-(Unexpired)已提交的未过期还原信息:不再需要用来支持当前运行的事务处理,但是为了符合还原保留间隔,仍然要用到这类信息。这也称为“未过期”还原信息。当有足够的空间不会导致活动事务处理失败时,就会保留已提交的还原信息。
-(Expired)过期的还原信息:此类数据不再需要用来支持运行的事务处理。当活动事务处理需要更多空间时,将会覆盖过期的还原信息。

4. 确保还原保留时间(UNDO RETENTION GUARANTEE)

-设置了保留时间保证时,即使令事务处理失败,也会强制保证UNDO的保留时间;
-RETENTION GUARANTEE是UNDO表空间的属性设置,且仅适用于UNDO表空间;

SQL>ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
SQL>ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;

在这里插入图片描述
注:UNDO_RETENTION设置为900s。

5. 建议将UNDO表空间设置为固定大小

设置固定大小的理由/原因:
-支持闪回操作
-限制表空间增长
调整undo的步骤:
1.运行正常的满负荷工作量;
2.使UNDO表空间自动调整增长到所需的最小大小;
3.可以使用还原指导(Undo Advisor),辅助计算为了满足未来增长(包括闪回数据保留时间)而需要的UNDO表空间大小;
4.将UNDO表空间改为所需的固定大小。

ALTER DATABASE DATAFILE '/oracle/dbs/undotbs.dbf' RESIZE1000M;
ALTER DATABASE DATAFILE '/oracle/dbs/undotbs.dbf' AUTOEXTEND OFF;

6. undo日常巡检及相关操作:

设置undo 保留时间:

ALTER SYSTEM SET UNDO_RETENTION=<new_retention_time>

创建UNDO表空间:

CREATE UNDO TABLESPACE undotbs02 DATAFILE '/u01/oradata/undotbs02.dbf' SIZE 100M AUTOEXTEND ON;

切换当前UNDO表空间:

ALTER SYSTEM SET undo_tablespace = 'UNDOTBS02';

监控UNDO表空间的使用情况:

SELECT usn, status, rssize/1024/1024 AS "RSSIZE(MB)", hwmsize/1024/1024 AS "HWMSIZE(MB)", shrinks AS "SHRINKS" FROM v$rollstat;

扩展UNDO表空间:

ALTER DATABASE DATAFILE '/u01/oradata/undotbs01.dbf' RESIZE 200M;

自动扩展UNDO表空间:

ALTER DATABASE DATAFILE '/u01/oradata/undotbs01.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

收缩UNDO表空间:

ALTER ROLLBACK SEGMENT rollback_segment_name SHRINK SPACE;

删除UNDO表空间:

DROP TABLESPACE undotbs01 INCLUDING CONTENTS AND DATAFILES;

关于undo的管理就介绍到这了。

码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB核心知识和排障案例及经验、性能调优等。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Servlet入门:服务端小程序的初试(自己学习整理的资料)
  • Spring Boot实战:使用策略模式优化商品推荐系统
  • Linux的基础知识
  • Python | Leetcode Python题解之第433题最小基因变化
  • nlohmann json:读写json文件
  • seL4 Threads(四)
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 10 推送实况窗消息
  • esp32 wifi 联网后,用http 发送hello 用pc 浏览器查看网页
  • 微软宣布弃用WSUS,企业用户尽早准备替换方案
  • 内网基础知识
  • 【Python报错已解决】AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘
  • 如何使用Apache Kafka处理实时数据
  • 【React】(推荐项目)一个用 React 构建的 CRUD 应用程序
  • el-form动态标题和输入值,并且最后一个输入框不校验
  • 【888题竞赛篇】第十二题,2024ICPC网络赛第二场-游戏(Game)
  • [译]CSS 居中(Center)方法大合集
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【css3】浏览器内核及其兼容性
  • axios 和 cookie 的那些事
  • ComponentOne 2017 V2版本正式发布
  • CSS 提示工具(Tooltip)
  • express + mock 让前后台并行开发
  • FastReport在线报表设计器工作原理
  • gops —— Go 程序诊断分析工具
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Redis中的lru算法实现
  • Twitter赢在开放,三年创造奇迹
  • 搭建gitbook 和 访问权限认证
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 什么是Javascript函数节流?
  • 学习笔记TF060:图像语音结合,看图说话
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #QT项目实战(天气预报)
  • (1)(1.13) SiK无线电高级配置(五)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (回溯) LeetCode 77. 组合
  • (三) diretfbrc详解
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)C#调用WebService 基础
  • (总结)(2)编译ORB_SLAM2遇到的错误
  • .gitattributes 文件
  • .gitignore
  • .libPaths()设置包加载目录
  • .NET 5种线程安全集合
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net Redis的秒杀Dome和异步执行
  • .net 按比例显示图片的缩略图
  • @EnableConfigurationProperties注解使用
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20180129]bash显示path环境变量.txt
  • [AIGC] HashMap的扩容与缩容:动态调整容量以提高性能