• 管理UNDO


    UNDO是什么?

    Oracle数据库创建并管理被用来回滚、撤销,和对数据库更改的信息,这些信息主要由被提交前的事务行为记录组成,这些记录统称为UNDO。

    UNDO有什么作用?

    当ROLLBACK语句执行时进行回滚事务;
    恢复数据库;
    提供读一致性;
    使用闪回查询分析更早时间点的数据;
    使用闪回特性恢复逻辑故障。

    当ROLLBACK语句执行时,通过未提交的事务,UNDO记录被用来撤销对数据库所做的更改;当数据库恢复时,利用UNDO记录撤销任何未提交的更改,并将重做日志应用到数据文件,从而实现事务的恢复;UNDO记录通过维护数据的前映像来提供读一致性。

    ORA-01555 快照过旧:由于事务提交而导致回滚段被覆盖,从而引起快照过旧的问题,可以通过undo_retention参数来解决。该参数是一个时间值,默认是900秒,说明当还原段中的数据在事务提交后继续保留的时间。

    UNDO块状态

    Active:表示正在使用该数据块的事务还没有提交或者回滚;
    Inactive:该数据块上没有活动的事务,该状态的UNDO可以被其他事务覆盖;
    Expired:该数据块持续Inactive的时间超过undo_retention所指定的时间;
    Freed:该数据块是空的,从来没有被使用过。

    自动UNDO管理

    从11g开始,Oracle数据库的还原段的管理是自动维护的,即自动UNDO管理。在Oracle 11g中,需要设置两个参数来实现UNDO的自动管理,这两个参数分别是undo_management 和undo_tablespace,undo_management说明UNDO的管理方式,它是一个静态参数,需要重启数据库方可生效;undo_tablespace说明还原表空间的名字,是一个动态参数,可才数据库运行期间动态修改。

    查看UNDO信息

    SQL> show parameter undo
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    undo_management                      string      AUTO
    undo_retention                       integer     900
    undo_tablespace                      string      UNDOTBS1
    SQL>

    管理UNDO

    1、创建还原表空间
    SQL> create undo tablespace my_undo_tbs
      2  datafile '/u01/app/oracle/oradata/orcl/myundotbs01'
      3  size 100m
      4  autoextend on; 
    
    Tablespace created.
    
    
    SQL> select tablespace_name,status,logging,extent_management
      2  from dba_tablespaces
      3  where contents='UNDO';
    
    TABLESPACE_NAME 	       STATUS	 LOGGING   EXTENT_MAN
    ------------------------------ --------- --------- ----------
    UNDOTBS1		       ONLINE	 LOGGING   LOCAL
    MY_UNDO_TBS		       ONLINE	 LOGGING   LOCAL
    
    SQL> select file_name,file_id,tablespace_name,online_status
      2    from dba_data_files     
      3    where tablespace_name='MY_UNDO_TBS';
    FILE_NAME					      FILE_ID TABLESPACE_NAME		     ONLINE_
    -------------------------------------------------- ---------- ------------------------------ -------
    /u01/app/oracle/oradata/orcl/myundotbs01		    6 MY_UNDO_TBS		     ONLINE
    2、增加数据文件
    SQL> alter tablespace my_undo_tbs
      2  add datafile '/u01/app/oracle/oradata/orcl/myundotbs02.dbf'
      3  size 100m;
    
    Tablespace altered.
    SQL> select file_name, file_id,autoextensible,online_status
      2  from dba_data_files
      3  where tablespace_name='MY_UNDO_TBS';
    
    FILE_NAME					      FILE_ID AUT ONLINE_
    -------------------------------------------------- ---------- --- -------
    /u01/app/oracle/oradata/orcl/myundotbs01		    6 YES ONLINE
    /u01/app/oracle/oradata/orcl/myundotbs02.dbf		    7 NO  ONLINE
    3、修改数据文件为自动扩展
    SQL> alter database
      2  datafile '/u01/app/oracle/oradata/orcl/myundotbs02.dbf'
      3  autoextend on 
      4  maxsize unlimited;
    
    Database altered.
    SQL> select file_name, file_id,autoextensible,online_status
      2   from dba_data_files
      3  where tablespace_name='MY_UNDO_TBS';
    
    FILE_NAME					      FILE_ID AUT ONLINE_
    -------------------------------------------------- ---------- --- -------
    /u01/app/oracle/oradata/orcl/myundotbs01		    6 YES ONLINE
    /u01/app/oracle/oradata/orcl/myundotbs02.dbf		    7 YES ONLINE
    4、删除还原表空间
    SQL> drop tablespace my_undo_tbs;
    
    Tablespace dropped.
    5、重命名还原表空间
    SQL> alter tablespace my_undo_tbs
      2  rename to orcl_undo_tbs;
    
    Tablespace altered.
    6、切换还原表空间
    切换前:
    SQL> show parameter undo
    
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    undo_management 		     string	 AUTO
    undo_retention			     integer	 900
    undo_tablespace 		     string	 UNDOTBS1
    切换:
    SQL> alter system set undo_tablespace='ORCL_UNDO_TBS';
    
    System altered.
    切换后:
    SQL> show parameter undo
    
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    undo_management 		     string	 AUTO
    undo_retention			     integer	 900
    undo_tablespace 		     string	 ORCL_UNDO_TBS

    UNDO数据字典视图

    1、查询回滚段的名字
    SQL> SELECT t1.username,t1.osuser,t2.used_ublk,t3.name FROM v$session t1
    join v$transaction t2
    on t1.saddr=t2.ses_addr
    join v$rollname t3
    on t3.usn=t2.xidusn; 
    
    USERNAME		       OSUSER			       USED_UBLK NAME
    ------------------------------ ------------------------------ ---------- ------------------------------
    SYS			       oracle				       1 _SYSSMU17_4127386468$
    
    SQL> 
    SQL> SELECT owner, segment_name, tablespace_name, extent_id, file_id, status
      FROM dba_undo_extents
     where segment_name = '_SYSSMU17_4127386468$'; 
    
    OWN SEGMENT_NAME		   TABLESPACE_NAME		   EXTENT_ID	FILE_ID STATUS
    --- ------------------------------ ------------------------------ ---------- ---------- ---------
    SYS _SYSSMU17_4127386468$	   ORCL_UNDO_TBS			   0	      6 ACTIVE
    SYS _SYSSMU17_4127386468$	   ORCL_UNDO_TBS			   1	      6 EXPIRED
    2、其他数据字典视图
    SELECT * FROM V$UNDOSTAT;
    SELECT * FROM V$ROLLSTAT;
    SELECT * FROM DBA_HIST_UNDOSTAT;


  • 相关阅读:
    P1128 [HNOI2001]求正整数
    zabbix-server端监控MySQL服务
    对服务器磁盘、CPU、内存使用状态,设置163邮件告警
    JDK8 的FullGC 之 metaspace
    JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
    JVM的方法区和永久带是什么关系?
    如何使用start with connect by prior递归用法
    JVM原理讲解和调优
    jvm 性能调优工具之 jstat
    记一次HBase内存泄漏导致RegionServer挂掉问题
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975725.html
Copyright © 2020-2023  润新知