如何评估当前数据库undo空间是否足够?

达梦数据库UNDO_RETENTION参数详解:如何避免闪回查询失效的坑 本文深入解析达梦数据库UNDO_RETENTION参数的核心原理与调优策略。该参数是保障闪回查询功能正常工作的关键,决定了回滚段中历史数据的保留时间。文章从参数本质、业务场景评估、UNDO表空间计算、参数配置到高级监控预警,提供了一套完整的实战方案,帮助DBA避免因UNDO空间不足或配置不当导致的闪回查询失效问题,确保数据快速恢复能力。 阅读详情

希望所有数据库的闪回时间可以保证24小时,也就是说对数据库的任何操作:delete ,update,insert 都可以使用闪回查询,找到最近24内的任何时间段的一致性数据。仔细想想这个需求是绝对无法完全保证的,除非我们的undo表空间非常大,至少要和数据库一样大,这样才能保证,在极端情况下(对数据库所有表delete or update 一次),并且此后不在有任何操作,如果中途还有额外几次操作,就会导致undo 数据被覆盖,flashback table 失败。当然在一般正常业务情况还是可以实现的。


设置步骤:

-----设置undo保留时间为24小时:24*3600=86400 秒

alter system set undo_retention=86400;

----使用 undo advice 来评估需要的undo 空间大小:()

select dbms_undo_adv.required_undo_size(86400) from dual;


tips:

- Version 1: subprogram is based on historicalinformation in memory or in AWR from start time to end time.
example : select dbms_undo_adv.required_undo_size(retention , start time , endtime ) from dual;

- Version 2: subprogram is based on historical information in memory or in AWRfrom sysdate -7 to sysdate.---- 建议使用这个version,分析结果更正确
example : select dbms_undo_adv.required_undo_size(retention ) from dual;

- Version 3:
 subprogram is based on historical information in AWR fromBegin/End snapshot id.
example : select dbms_undo_adv.required_undo_size(retention , snap_shot1 ,snap_shot2 ) from dual;



当然有时候我们也需要评估我们系统的健康状态,尽可能避免一些常规问题 如 ora-01555  快照太旧。问题的原因无非就是undo 不够大,无法构建一致性数据。

MOS 提供了一个分析脚本,但是核心还是基于dbms_undo_adv 这个包


报告的分析的结果是根据最近7天的信息来分析

######################

#Oracle 官方提供的一个undo 配置监测脚本

for  >=10g

#####################


SET SERVEROUTPUT ON
SET LINES 600
ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS';
 
DECLARE
    v_analyse_start_time    DATE := SYSDATE - 7;
    v_analyse_end_time      DATE := SYSDATE;
    v_cur_dt                DATE;
    v_undo_info_ret         BOOLEAN;
    v_cur_undo_mb           NUMBER;
    v_undo_tbs_name         VARCHAR2(100);
    v_undo_tbs_size         NUMBER;
    v_undo_autoext          BOOLEAN;
    v_undo_retention        NUMBER(5);
    v_undo_guarantee        BOOLEAN;
    v_instance_number       NUMBER;
    v_undo_advisor_advice   VARCHAR2(100);
    v_undo_health_ret       NUMBER;
    v_problem               VARCHAR2(1000);
    v_recommendation        VARCHAR2(1000);
    v_rationale             VARCHAR2(1000);
    v_retention             NUMBER;
    v_utbsize               NUMBER;
    v_best_retention        NUMBER;
    v_longest_query         NUMBER;
    v_required_retention    NUMBER;
BEGIN
    select sysdate into v_cur_dt from dual;
    DBMS_OUTPUT.PUT_LINE(CHR(9));
    DBMS_OUTPUT.PUT_LINE('- Undo Analysis started at : ' || v_cur_dt || ' -');
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------------');
 
    v_undo_info_ret := DBMS_UNDO_ADV.UNDO_INFO(v_undo_tbs_name, v_undo_tbs_size, v_undo_autoext, v_undo_retention, v_undo_guarantee);
    select sum(bytes)/1024/1024 into v_cur_undo_mb from dba_data_files where tablespace_name = v_undo_tbs_name;
 
    DBMS_OUTPUT.PUT_LINE('NOTE:The following analysis is based upon the database workload during the period -');
    DBMS_OUTPUT.PUT_LINE('Begin Time : ' || v_analyse_start_time);
    DBMS_OUTPUT.PUT_LINE('End Time   : ' || v_analyse_end_time);
    
    DBMS_OUTPUT.PUT_LINE(CHR(9));
    DBMS_OUTPUT.PUT_LINE('Current Undo Configuration');
    DBMS_OUTPUT.PUT_LINE('--------------------------');
    DBMS_OUTPUT.PUT_LINE(RPAD('Current undo tablespace',55) || ' : ' || v_undo_tbs_name);
    DBMS_OUTPUT.PUT_LINE(RPAD('Current undo tablespace size (datafile size now) ',55) || ' : ' || v_cur_undo_mb || 'M');
    DBMS_OUTPUT.PUT_LINE(RPAD('Current undo tablespace size (consider autoextend) ',55) || ' : ' || v_undo_tbs_size || 'M');
    IF V_UNDO_AUTOEXT THEN
        DBMS_OUTPUT.PUT_LINE(RPAD('AUTOEXTEND for undo tablespace is',55) || ' : ON');  
    ELSE
        DBMS_OUTPUT.PUT_LINE(RPAD('AUTOEXTEND for undo tablespace is',55) || ' : OFF');  
    END IF;
    DBMS_OUTPUT.PUT_LINE(RPAD('Current undo retention',55) || ' : ' || v_undo_retention);
 
    IF v_undo_guarantee THEN
        DBMS_OUTPUT.PUT_LINE(RPAD('UNDO GUARANTEE is set to',55) || ' : TRUE');
    ELSE
        dbms_output.put_line(RPAD('UNDO GUARANTEE is set to',55) || ' : FALSE');
    END IF;
    DBMS_OUTPUT.PUT_LINE(CHR(9));
 
    SELECT instance_number INTO v_instance_number FROM V$INSTANCE;
 
    DBMS_OUTPUT.PUT_LINE('Undo Advisor Summary');
    DBMS_OUTPUT.PUT_LINE('---------------------------');
 
    v_undo_advisor_advice := dbms_undo_adv.undo_advisor(v_analyse_start_time, v_analyse_end_time, v_instance_number);
    DBMS_OUTPUT.PUT_LINE(v_undo_advisor_advice);
 
    DBMS_OUTPUT.PUT_LINE(CHR(9));
    DBMS_OUTPUT.PUT_LINE('Undo Space Recommendation');
    DBMS_OUTPUT.PUT_LINE('-------------------------');
 
    v_undo_health_ret := dbms_undo_adv.undo_health(v_analyse_start_time, v_analyse_end_time, v_problem, v_recommendation, v_rationale, v_retention, v_utbsize);
    IF v_undo_health_ret > 0 THEN
        DBMS_OUTPUT.PUT_LINE('Minimum Recommendation           : ' || v_recommendation);
        DBMS_OUTPUT.PUT_LINE('Rationale                        : ' || v_rationale);
        DBMS_OUTPUT.PUT_LINE('Recommended Undo Tablespace Size : ' || v_utbsize || 'M');
    ELSE
        DBMS_OUTPUT.PUT_LINE('Allocated undo space is sufficient for the current workload.');
    END IF;
    
    SELECT dbms_undo_adv.best_possible_retention(v_analyse_start_time, v_analyse_end_time) into v_best_retention FROM dual;
    SELECT dbms_undo_adv.longest_query(v_analyse_start_time, v_analyse_end_time) into v_longest_query FROM dual;
    SELECT dbms_undo_adv.required_retention(v_analyse_start_time, v_analyse_end_time) into v_required_retention FROM dual;
 
    DBMS_OUTPUT.PUT_LINE(CHR(9));
    DBMS_OUTPUT.PUT_LINE('Retention Recommendation');
    DBMS_OUTPUT.PUT_LINE('------------------------');
    DBMS_OUTPUT.PUT_LINE(RPAD('The best possible retention with current configuration is ',60) || ' : ' || v_best_retention || ' Seconds');
    DBMS_OUTPUT.PUT_LINE(RPAD('The longest running query ran for ',60) || ' : ' || v_longest_query || ' Seconds');
    DBMS_OUTPUT.PUT_LINE(RPAD('The undo retention required to avoid errors is ',60) || ' : ' || v_required_retention || ' Seconds');
 
END;
/
##############################################################################################
 

运行结果样例1:
- Undo Analysis started at : 12/10/2015 10:49:10 -
--------------------------------------------------
NOTE:The following analysis is based upon the database workload during the period -
Begin Time : 05/10/2015 10:49:10
End Time   : 12/10/2015 10:49:10
        
Current Undo Configuration
--------------------------
Current undo tablespace                                : UNDOTBS1
Current undo tablespace size (datafile size now)        : 26000M
Current undo tablespace size (consider autoextend)      : 32768M
AUTOEXTEND for undo tablespace is                      : ON
Current undo retention                                  : 86400
UNDO GUARANTEE is set to                                : FALSE
        
Undo Advisor Summary
---------------------------
Finding 1:The undo tablespace is OK.   --------检测结果正常
        
Undo Space Recommendation
-------------------------
Allocated undo space is sufficient for the current workload.  --------检测结果正常,当前undo 空间满足于当前负载。
        
Retention Recommendation
------------------------
The best possible retention with current configuration is    : 35552306 Seconds
The longest running query ran for                            : 147 Seconds
The undo retention required to avoid errors is               : 147 Seconds
 
PL/SQL procedure successfully completed.
 



undo配置 不符合 oracle 官方建议的样例结果2:

- Undo Analysis started at : 12/10/2015 14:55:46 -
--------------------------------------------------
NOTE:The following analysis is based upon the database workload during the period -
Begin Time : 05/10/2015 14:55:45
End Time   : 12/10/2015 14:55:45


Current Undo Configuration
--------------------------
Current undo tablespace                               : UNDOTBS2
Current undo tablespace size (datafile size now)        : 100M
Current undo tablespace size (consider autoextend)      : 100M
AUTOEXTEND for undo tablespace is                      : OFF
Current undo retention                                   : 0
UNDO GUARANTEE is set to                               : FALSE


Undo Advisor Summary
---------------------------
Finding 1:Undo Tablespace is under pressure. Recommendation 1:Size undo tablespace to 137 MB  -----检测发现undo 空间不足,建议设置137M


Undo Space Recommendation
-------------------------
Minimum Recommendation           : Size undo tablespace to 137 MB
Rationale                                          : Increase undo tablespace size so that long running queries will not fail
Recommended Undo Tablespace Size : 137M


Retention Recommendation
------------------------
The best possible retention with current configuration is    : 448 Seconds
The longest running query ran for                            : 910 Seconds
The undo retention required to avoid errors is               : 910 Seconds


PL/SQL procedure successfully completed.

达梦数据库UNDO_RETENTION参数详解:如何避免闪回查询失败? 本文深入解析达梦数据库UNDO_RETENTION参数的核心原理与调优策略。该参数决定了闪回查询可回溯的时间窗口,但并非绝对时间保证,其有效性受UNDO表空间大小和事务负载制约。文章提供了基于业务需求与UNDO生成速率的科学计算方法、不同场景的配置建议,并详细介绍了通过v$undostat等视图进行监控预警,以构建主动防御体系,从而有效避免闪回查询失败。 阅读详情

相关推荐

oracle增加undo时间

1、查询当前的undo时间 show parameter undo_retention; 2、修改undo时间 ALTER SYSTEM SET undo_retention=86400 SCOPE=BOTH;

Auspicious航的博客 1125

oracle undo redo的理解

一、oracle delete分批删除大量数据 1、delete 操作会产生redo log、undo log,这样是为了保证数据安全性,利于rollback。为防止undo表空间被撑爆,可以采用分批提交,代码如下: declare    v_cnt number :=0; begin   loop    delete from scoot.emp  where id>100   

xiongch_xionger的博客 921

Zynq7000双核裸机开发实战:如何安全实现共享内存与乒乓RAM设计

本文深入探讨了Zynq7000双核裸机开发中的共享内存与乒乓RAM设计,重点解析了核间通信的Cache一致性处理机制和硬件级实现方案。通过实战代码示例和性能优化技巧,帮助开发者解决双核运行中的访问冲突问题,提升嵌入式系统开发效率。

weixin_29191669的博客 375

oracle 表空间详解以及配置操作

oracle 表空间详解以及配置

it知识分享 free for nothing.. 3986

【AIGC】人工智能训练师(高级)考试题库-橙点同学

例如,在嘈杂的环境中进行声音转文字,即使是优秀的模型也可能会出现一些错误,但这并不意味着该模型本身质量差,在其他较为理想的环境下,它可能会有很好的表现。例如,在一些语音应用和系统中,会使用SSML来实现对语音合成的精细控制,如调整语速、语调、音量等,而这些应用和系统的开发往往会遵循W3C的相关标准和框架,其中就包括SSML这一语音合成标记语言。例如,在语音识别等场景中,像“去火车站怎么走”这样的语音指令,没有其他嘈杂的背景声音或模糊不清的表述,就属于无噪音的数据,有利于系统准确地进行处理和分析。

RisunJan的博客 9920

数据资产可视化分析:PowerBI在大数据管理中的实战

目的:帮你搞懂“为什么数据资产需要可视化?”“PowerBI能帮企业解决什么问题?”,并掌握用PowerBI做大数据可视化的实战技巧。范围:覆盖数据资产定义、可视化分析原理、PowerBI核心功能(数据连接、建模、可视化)、零售企业实战案例,以及未来趋势与挑战。背景:为什么企业的数据像乱堆的玩具?核心概念:数据资产、可视化分析、PowerBI分别是什么?它们怎么配合?实战步骤:用PowerBI帮零售企业整理“销售玩具箱”,做出能指导决策的仪表盘;应用场景:不同部门怎么用这个“整理好的玩具箱”?

2501_92132293的博客 906

数据库时间小技巧 - 取数据库中时间格式是12小时制的时间,如何显示成24小时制...

数据库时间小技巧 - 取数据库中时间格式是12小时制的时间,如何显示成24小时制 DateTime.ToString()或SimpleDateFormat(“”)的时候可以设置格式~hh是12小时制~HH是24小时制。 在java里面可以进行如下转换设置: SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:...

weixin_34104341的博客 2099

DeerFlow 系列教程 第三篇 | 核心技术深度剖析:Skills、Memory 与 Context Engineering

摘要化是 Context Engineering 中最关键的组件——它直接决定了长对话的可用性。Skills 技能系统通过渐进式加载的三层模型,在保持系统提示词轻量的同时,支持无限数量的技能扩展。从发现到执行的 10 个生命周期阶段,配合 AI 驱动的安全扫描和多层缓存,构成了一个生产级的技能管理框架。Memory 长期记忆系统通过文件系统持久化、LLM 驱动的信息提取和防抖动异步更新,实现了跨会话的认知持久化。六类事实分类体系和修正信号检测机制,让 Agent 能够从交互中持续学习和改进。

weixin_43674738的博客 280

UNDO表空间大小评估

UNDO表空间大小评估参考:要确定Oracle需要的UNDO 表空间的大小,需要以下三条信息: A、UR :以秒为单位的UNDO_RETENTIONSQL> show parameter undo_retention;B、UPS:计算业务高峰期每秒产生undo数据块的个数SQL> select max(undoblks / ((end_time - begin_time)*24

junmail的专栏 1667

元宇宙通证- 九、IT/ICT发展史全景长图

九、IT/ICT发展史全景长图 (一)综述 IT是Information Technology的缩写,意为”信息技术“,包含现代计算机、网络、通信等信息领域技术。自1844年人类历史上发出来第一份电报,实现了信息的长图传输,信息技术发展的历史大幕随之拉开。信息技术的普遍应用,是进入信息社会的标志。 IT技术最早发源于半导体,然后发展处计算机、通信网和互联网,进而演进到现在的AI、XR、计算机、大数据、物联网、工业互联网、区块链、量子计算等。 有人说元宇宙是下一代互联网,有人说元宇宙是互联网的终极形态。 我们

沧海之巅的专栏 1万+

LeetCode 面试经典 150 题回顾

最经典 150 题,掌握面试所有知识点 面试经典 150 题 : 题目分析、解题思路、复杂度分析、代码展示

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 8万+

达梦数据库UNDO表空间爆满?手把手教你用UNDO_SPACE参数精准控制空间回收

本文针对达梦数据库UNDO表空间爆满的运维难题,深入解析了UNDO_SPACE参数的核心作用与配置方法。通过对比UNDO_RETENTION(时间阈值)与UNDO_SPACE(空间阈值),文章提供了从监控评估、参数计算到紧急处置的完整实战指南,帮助DBA构建精准的空间回收策略,有效预防磁盘告警与业务中断。

nut55的博客 662

利用SIMULINK搭建一个16QAM调制解调收发系统

1发送模块设计 根据前面介绍的理论知识,我们可以知道16QAM的基本结构,首先我来设计QAM发送段的SIMULINK仿真模块。 图1 16QAM的发送端模块 他的基本工作流程为:将信号通过两路升余弦滤波器,得到滤波以后的信号,滤波器的作用就是为了防止码间干扰。然后将滤波以后的信号和SIN,COS相乘得到调制信号,将调制 下面一一介绍每个模块的具体参数设置以及各个部分信号的波形图。 图2 产生随机数据的信号源 第一部分信号是产生一组随机的数字,作为信源,第二个模块将信号...

FPGA/MATLAB学习教程/源码/项目合作开发 4776

判断undo空间是否足够

Posted byjacky 自从Oracle提供了undo自动管理的功能后,管理undo就变成了一个简单的工作,只需要设置一个足够大的undo表空间和undo_retention参数。但是我们如何衡量und...

cuanzhanyun3524的博客 176

VN1640 CH5 I/O通道终极指南:【从硬件原理—>工程实战—>自动化测试实战】

摘要:本文详细解析Vector VN1640 CH5 I/O通道的硬件原理与工程应用,涵盖模拟输入(AIN)、数字输入(DIN)和数字输出(DOUT)三大功能模块的配置指南。通过硬件隔离设计实现高精度信号采集与驱动控制,重点分析开漏输出特性及保护机制。提供PWM控制、ECU上电时序测试、传感器闭环控制等实战案例的CAPL脚本代码,并强调多设备同步采集的精准性(时间偏差<1µs)。适用于汽车电子HIL测试、ECU信号监测等场景,所有方案均通过实际项目验证。

汽车控制器系统开发、VIL测试、HIL测试、MIL测试、EMS电喷系统标定与开发、热管理系统标定 759

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Oracle UNDO表空间管理维护总结

Oracle UNDO表空间管理维护总结

oradh的专栏 220

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

oracle查看undo使用量,Oracle undo表空间使用量为100%

在Toad中发现undo表空间undotbs1使用量已经达到100%,但是奇怪的是数据库并没有hang住,依然可以正常运转通过Oracle提供的EM查看undotbs1表空间的使用,也达到了78.8在上一篇文章中,我们介绍了undo表空间中区的3种状态:ACTIVE、EXPIRED、UNEXPIRED。在对其概念理解后,个人认为在未设置undo表空间retention guarantee的情况下,...

weixin_30667487的博客 2455

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

评估undo 表空间大小

如何估算Oracle数据库所需的UNDO表空间的大小: How To Size UNDO Tablespace For Automatic Undo Management (文档 ID 262066.1) 要确定...

congjiu2607的博客 175

如何 重建undo表空间

如果一个undo表空间已经扩展到一定大小,并且硬盘空间吃紧,可以优先考虑将undo表空间重建,再观察和评估后续的方案。同时如何杜绝以后undo表空间过大的问题,原理可处理方式可以参考这篇文章。oracle undo表空间过大 查看当前使用的undo表空间 show parameter undo; select * from v$parameter ; 重建undo表空间 create undo tablespace undotbs2 datafile 'D:\ORADB\ORADATA\OR.

topz_share的博客 2038

估算Undo表空间大小

UNDO表空间大小评估参考: 要确定Oracle需要的UNDO 表空间的大小,需要以下三条信息:  A、UR :以秒为单位的UNDO_RETENTION SQL> show parameter undo_retention; B、UPS:计算业务高峰期每秒产生undo数据块的个数 SQL> select max(undoblks / ((end_time - begin_time)*24*360

芒果先生Mango的专栏 590

如何估算Oracle数据库所需的UNDO表空间的大小

要确定Oracle需要的UNDO 表空间的大小,需要以下三条信息:  UR      以秒为单位的UNDO_RETENTION UPS    每秒生成的还原数据块的数量 DBS     db_block_size UndoSpace = [UR * (UPS * DBS)] + (DBS * 24) UNDO_RETENTION是一个参数,此参数控制为提供读一致性而保留的还原

欧辰的专栏 2069

undo表空间的利用率达到100%分析

undo变空间的作用: a.当使用ROLLBACK语句时回滚事务,撤销DML操作改变的数据 b.恢复数据库 c.提供读取的一致性 d.使用Oracle Flashback Query分析基于先前时间点的数据 e.使用Oracle Flashback特性从逻辑故障中恢复数据库 1.查看undo表空间参数设置 SQL> show parameter undo NAME

weiwang的专栏 2420

增删改undo生成量??index是否写undo?Oracle DML语句(insert,update,delete) ‘回滚开销估算‘

假设表有2个索引,新增1000条记录,每个数据块大约可保存600条记录,新增第一个数据块保存了600条记录,同时变更了第1个索引30个索引块,第2个索引40个数据块,新增第2个数据块保存了400条记录,同时变更了第1个索引20个索引块,第2个索引60个数据块。2.从估算公式可以看出,索引对dml操作的影响非常大,当一个表有索引比没索引时做dml操作花费的undo开销非常具大,因为数据库要保证事务回滚的可行性,需要对索引做许多额外的事情,更新索引字段及批量insert操作尤其明显.

一个只求实际的程序猿 925

Oracle undo表空间爆满的处理方法

解决步骤: 1. 启动SQLPLUS,并用sys登陆到数据库。 #su-oracle $>sqlplus/assysdba 2. 查找数据库的UNDO表空间名,确定当前例程正在使用的UNDO表空间: ...

congyu7216的专栏 304
上一篇: 使用RMAN恢复Oracle 10g RAC库至异机
下一篇: 搞了一天,为了一个防火墙的没有禁止成功!!!redhat 7 & Oracle Linux 7 & Centos 7注意!!
柳暗发明君
博客等级 码龄18年 63粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值