zoukankan      html  css  js  c++  java
  • 相克军_Oracle体系_随堂笔记012-undo

    undo表空间中undo段是自动生成的,oracle自动使用undo表空间的undo段。
    作为高级DBA,需要了解Oracle是如何使用undo段的。这样出了性能问题才能够解决。
     
    1.Undo表空间及管理方式
    show parameter undo_tablespace
    show parameter undo
    
    Undo段
    select * from v$rollname;
    
    select SEGMENT_NAME,BLOCKS,EXTENTS from dba_segments where SEGMENT_NAME='_SYSSMU1$';
    
    select SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME='_SYSSMU1$';
    
    select owner, segment_name, tablespace_name from dba_rollback_segs;
    
    select name from v$parameter where name like '%undo%';
    
    UNDO表空间占用空间情况以及数据文件存放位置
    select file_name,bytes/1024/1024 from dba_data_files
    where tablespace_name like '%UNDOTBS%';
    
    undo的三个作用
        ①事物回滚(rollback)
        ②读一致性,构造CR块
        ③实例恢复,回滚未提交事物
    Undo段中区的四种状态
        free
        expired
        inactive
        active
    显示UNDO区信息
    SELECT extent_id, bytes, status FROM dba_undo_extents
    WHERE segment_name='_SYSSMU1$';
    
    undo_retention (undo段中区状态为inactive状态的保留时间)
    下面参数作用主要是对于undo段中区的状态为inactive状态的覆盖处理方式:guarantee为强制保留undo_retention时长的inactive状态的区
    alter tablespace undotbs1 retention guarantee;
    
    alter tablespace undotbs1 retention noguarantee;
    
    2.图解一个事物的操作流程:
    select xid, xidusn, xidslot, xidsqn, ubablk, ubafil 
    from v$transaction;
    
     
    ----
    小结:
    ITL中UBA指向data block的最后一个undo block地址,undo block之间指向,都是为了回滚操作;
    Data block header 与Undo block的直接指向,为了构造cr块更快速;
    ITL中XID指向undo segment header是为了多种提交方式。
     
    一个事物开始之后,至少要在两个位置写入事物信息:
    1.回滚段的段头块的事物表
    2.要修改的数据块的头部事物槽的位置,找一个事物槽,将事物信息写上。
     
    3.IMU机制
    传统的undo,oracle将undo表空间和普通表空间同等对待。
    而现在,有了IMU技术,事物开始以后,需要回滚块的时候不再需要从磁盘调取,直接在shared pool中IMU buffer中读取。
    IMU大幅提高了构造cr块的速度,从而也提高了cr读的速度。
    RAC和Stream环境中,IMU是被禁止掉的。
    而且,IMU技术目前没有被Oracle大肆宣扬。
    select * from v$sysstat where name like '%IMU%';
    
    --上面sql查询的结果可以判断IMU是否开启,关注查询结果中IMU commits和IMU Flushes 的value,如果一直在增加,说明数据库开启了IMU技术。
     
    4.读一致性
    举个例子:
    9:00开始查询一个1w条返回记录的表。
    9:01其他用户删除了第1w条记录,并提交。
    9:02查询结束,返回结果应该是1w条还是9999条?
     
    按照之前所学的知识,可能就是9999条了,但是实际上oracle返回的是1w条记录,这也是根据业务实际要求的。
    引入新的知识点:查询的时候会先对当前状态进行快照,记录一个当前scn,就是说之后查询过程中如果发现有块的scn号大于当前scn,就说明这个块在查询过程中被修改了。
     
    ORA-01555
    1.sql 执行的时间太长;
    2.undo 表空间的压力太大;
    3.undo 表空间大小的设定,取决于最长执行sql的时间,以及需要闪回的时段。然后根据这些具体的需求在em中undo表空间的建议图中根据时间找到对应的undo表空间应该设置为多大的参考值。
  • 相关阅读:
    Gitlab + Gitlab runner + Window powershell
    python 连接SAP 代码
    【翻译】 For OData For C# play on RESTier
    SAP -熟练使用T-Code SHD0
    SAP MM- BAPI_PO_CHANGE 更新PO version 信息(version management)
    SAP PP- OPK8生产订单打印 配置Smart form.
    SAP Smart Form 无法通过程序自定义默认打印机问题解决
    SAP APO-主数据设置
    SAP APO-PP / DS
    SAP APO-供需匹配
  • 原文地址:https://www.cnblogs.com/jyzhao/p/3819378.html
Copyright © 2011-2022 走看看