• UNDO 表空间


    Undo数据的作用:

    1.       回退事务

    通过rollback语句可以取消事务变化

    2.       读一致性

    Commit提交后。。

    3.       事务恢复

    例程恢复的一部分。

    4.       倒叙查询

    从过去的某个时间点查询。

     

    配置undo表空间

    n       undo_management automanual

    n       undo_tablespace

    可以创建多个undo talbespace,但同一时刻只有一个有效(active

    Undo_management = auto;

    Undo_tablespace = undotbs;

     

    Ø         建立undo表空间

           系统会自动创建。

    Create undo tablespace undo1

           Datafile ‘path\undo1db01.dbf’ size 100M;

    Ø         修改undo表空间

    Alter tablespace undotbs

           Add datafile ‘path\undotbs2.dbf’

           Size 300M

          Autoextend on;  // 添加undo表空间,还没有active

    Ø         切换undo表空间

    Alter system set undo_tablespace = undotbs2;

    Ø         删除undo表空间

    Drop tablespace undotbs2; // 不是active时,才可以删。

     

    注:

    无需多个undo tablespace ,只需创建一个足够大的。

           切换undo tablespace 时候,必须保证老的undo tablespace 里面的数据没用了,才可切换,否则不能切换。最好在没有人用得时候,切换。

           在用户修改数据表中的数据后,而没有commit:此时,undo表空间和redo中,都有记录,而此时切换undo表空间后,数据提交,数据并没有丢失,而是正常;如果切换表空间后,删除该表空间,则报错,不能删除该表空间。

           对数据修改,产生Undo信息,同时undo也会产生redo信息。

    是不是不能回滚了??

     

    Show parameter undo; // 查看默认的undo表空间指向哪个(undotbs1)。

    Select tablespace_name,contents,status from dba_tablespaces;

     

    Other parameters

    undo_management

    指定undo数据的管理方式

     

    Undo_retention参数:单位是秒,规定undo表空间最大保存数据的时间。

           循环使用。

    Alter system set undo_retention = 9000; // 修改参数

    Show parameter undo;显示参数如下:

    Undo_management  // auto mode

    Undo_retention    // undo表空间保存数据的时间

    Undo_tablespace // 指定默认的undo表空间。

    Undo quota参数:给用户分配空间最高限额。

     超出限额就会报错

     Undo_pool包,设定参数

    undo_tablespace

    指定例程所要使用的undo表空间

     

    Undo表空间大小问题

    Select addr, used_ublk from v$transaction;

     // 查询占用undo表空间的数据块。

    // 当用户修改数据库记录,如果commit,则数据块释放()。

     // 如果没有commit,回滚,就是用undo中的数据块信息将修改的数据覆盖。

     

    Undo表空间多大,就得需要估计:

    1.       考虑transaction大小,影响的数据多少。如:插入多少条数据等

    2.       undo_retention , 时间越长,需要的空间越大。

    3.       V$undostat 记录undo表空间的历史信息。

    如果undo表空间,不够用,则会报错(报错后,就回滚了)。

     

    决定undo表空间大小的因素:

    1)        Undo_retention  // 默认900

    2)        每秒钟产生undo数据块的个数

    方法1:最大值 【该方法好】

    Select max ( undoblks / ( ( end_time-begin_time ) * 24 * 3600) ) from v$undostat;

         方法2:平均值

    select sum(undoblks) / sum( ( end_time-begin_time ) * 24 * 3600) from v$undostat;

    3)        Db_block_size

    Show parameter block;  //显示块的大小,8K

    因此:undo空间大小 = 900 * 8K * 2产生的值);

     

     

    监视undo表空间信息

    在自动undo管理模式下,

    1.       确定当前例程正在使用的undo表空间

    使用自动undo管理模式时,oracle会使undo表空间存放undo数据。

    Show parameter undo_tablespace;

     

    2.       显示数据库的所有undo表空间

    使用自动undo管理模式时,必须建立undo表空间

     Select tablespace_name

    from dba_tablespaces

     Where contents=’UNDO’   //显示当前数据库包含的所有UNDO表空间

     

    3.       显示undo表空间统计信息

    为合理规划undo表空间的尺寸,应在数据库运行的高峰阶段搜集undo表空间的统计信息,最终根据统计信息确定undo表空间的尺寸。

     Select to_char(begin_time, ‘HH24:MI:SS’) begin_time,

              To_char(end_tiem , ‘HH24: MI:SS’) end_time,

                  Undoblks

     From V$undostat;

    // begin_time 起始统计时间

    // end_time  结束统计时间

    // Undoblks  undo数据所占用的数据块个数

    // oracle 每个10分钟生成一行统计信息

     

    Select usn , status from v$rollstat; //

    Select * from v$rollname; //

     

    4.       显示undo段统计信息

    使用自动undo管理模式时,oracle会在undo表空间上自动建立10undo段,

    通过查询动态性能视图V$ROLLNAME,可以显示所有联机undo段的名称

    通过查询动态性能视图V$ROLLSTAT,可以显示undo段的统计信息

           Col name format a10

    Select a.name, b.xacts, b.writes, b.extents

           From v$rollname a, V$rollstat b

           Where a.usn=b.usn;

    // name : undo 段的名称

    // writes :在undo段上所写入的字节数

    // xacts undo段所包含的活动事务个数

    // extents undo段的区个数

     

    5.       显示活动事务信息

    动态性能视图v$session用于显示会话的详细信息

    动态性能视图v$transaction用于显示事务的详细信息

    动态性能视图v$rollname 用于显示联机undo段的名称

           Col username format a10

           Col name format a10

           Select a.username, b.name, c.used_ublk

           From v$session a, v$transaction c, v$rollname b

           Where a.saddr=c.ses_addr and b.usn=c.xidusn and a.username=’system’;

     

    6.       显示undo区信息

    数据字典视图dba_undo_extents 用于显示undo表空间所有区的详细信息。

    以下显示undo_SYSSMU5$的所有区为例

    Select extent_id, bytes, status

    From dba_undo_extents

    Where segment_name=’_SYSSMU5$’

    // extent_id 区编号

    // bytes 区尺寸

    // status 区状态(active 该区处于活动状态, expired 该区未用)

     

     

    7. Dba_rollback_segs视图//

     Select segment_name, tablespace_name from dba_rollback_segs;

    // 所有的sgements 信息 activeundo表空间,非active undo表空间

    // 每个segment可以被多个transaction共享

    // system : 用来修改数据字典所用的segment等,是由oracle修改的。

     

    8         V$transaction 视图

    //某个transation占用undo数据块的信息

    select addr, used_ublk from v$transation;

     

    9         v$session视图

    //用户登陆的信息

     

    10     v$rollname 视图

    // 所有在线的undo segments activeundo表空间,只有一个undo表空间是active

    select * from v$rollname;

  • 相关阅读:
    jquery $.post specification
    鸟语2010.5.5
    不使用ubuntu代理
    how to check network's stablity?
    python float decimal issue
    how to check network's stablity?
    session的作用是什么?
    bottle json issure
    我强烈建议,不要想念komdo的ctrl+r
    how to count files in directory
  • 原文地址:https://www.cnblogs.com/SharkXu/p/Oracle_Undo.html
Copyright © 2020-2023  润新知