ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

管理undo

2021-06-07 11:01:23  阅读:319  来源: 互联网

标签:name 管理 临时 Undo tablespace undo retention


管理undo

1 undo作用

 

 

undo数据是:

  • 原始的、修改之前的数据副本
  • 是针对更改数据的每个事务处理所捕获的·至少保留到事务处理结束
  • 用于支持:
    •   回退操作
    •   读取一致性查询
    •   闪回查询、闪回事务处理和闪回表一从失败的事务处理中进行恢复

 

UNDO提供以下四种情况所需要的信息

  • 回滚事务:rollback
  • 读一致性:正在做DML操作的数据块,事务结束前,其他用户读undo里面的数据前镜像
  • 实例的恢复:instance recover(undo -->rollback)
  • 闪回技术:flashback query、flashback table等

1.1 事务的属性

 

ACID

原子性:一个事务的所有部分必须都完成, 或者都不完成

一致性:查询的结果必须与数据库在查询开始时的状态一致

隔离性:除了作出变更的会话,其他会话都无法看到未提交的数据

持久性:事务一旦完成,不可丢失

 

 

 

2 Undo和Redo对比

 

 

2.1 update语句执行逻辑流程redo undo信息

 

 

 

3 Undo的参数

3.1 三个基本参数

show parameter undo

 

 

  • undo_management
    •   manaual     仅在维护时使用
    •   auto            使用undo tablespace管理undo
  • undo_retention             指定保留期单位秒,希望在这个期间commit的undo数据不要覆盖
  • undo_tablespace          当前使用的Undo表空间

3.2 建立一个undo表空间

可以建立多个undo表空间,但只有一个是使用中的undo

使用中的undo tablespace不能offline和drop

查看当前undo表空间

show parameter undo_tablespace

 

 

查看表空间对应数据文件

col file_name for a60
select tablespace_name,file_name from dba_data_files;

 

 

select tablespace_name,contents from dba_tablespaces;

 

 

建立一个新的undo表空间

create undo tablespace UNDOTBS2 datafile '/u01/app/oracle/oradata/ORCL/undotbs02.dbf' size 50M autoextend on;

 

 

查看当前正在使用的undo段(回滚段)

select * from v$rollname;

 

 

3.3 切换undo

und 表空间很难缩小,但是可以替换

alter system set undo_tablespace=undotbs2;        --动态参数,修改立即生效

 

 

show parameter undo_tablespace;
select * from v$rollname;

 

 

查看undo段中区的状态:select segment_name,tablespace_name,status from dba_undo_extents order by status;

彻底删除undotbs1表空间

drop tablespace undotbs1 including contents and datafiles;

 

 

删除未激活undo时要慎重操作,之前的undotbs1可能仍然在使用

即使没有事务用之前的undotbs1,可能有查询语句用到unexpired状态的undo数据

 

4 Undo空间重用机制3种状态

 

 

 

 

 

 

undo段中区的状态:

① active:表示 transaction(事务) 还没有 commit,不可覆盖

② unexpired:由已经commit数据转换而来的状态,在保留期内,尽量不覆盖(非强制)

③ expired:由unexpired转换而来,其中的数据是超过undo保留期的,随时可以再分配(覆盖)

undo的状态转换体现了undo空间的循环使用
  分配---》 冻结--->回收---》 再分配

 

5 关于AUM(Auto Undo Management)

5.1 Auto Undo Management

Oracle10gR2以后引入了一个新的自动调整undo retention的特性,目的是尽量避免两个Undo错误:

  • ora-30036 错误---空间不足
  • ora-01555 错误---快照太旧

11g缺省设置为AUM(Auto Undo Management)

AUM下current undo retention是自动调整的

select begin_time,tuned_undoretention from v$undostat;

 

 

5.2 AUM的两种工作方式

① autoextend off下,忽略undo_retention 参数,TUNED_UNDORETENTION参照undo表空间大小和undo统计信息

缺点:空间给定不合理时,产生UNDO告警,不能完全避免ora-30036,ora-01555,若UNDO增加尺寸,又可能造成TUNED_UNDORETENTION增加

② autoextend on下,参考undo_retention作为下限值,TUNED_UNDORETENTION期内,以扩展空间代替覆盖unexpired,基本避免了ora-30036,ora-01555

select file_name,tablespace_name,AUTOEXTENSIBLE from dba_data_files;

 

 

5.3 Undo表空间的retention guarantee属性

 

 

通常情况下,unexpired数据并不绝对保证在retention期内不会覆盖,必要时可考虑设置在保留期强制不覆盖的guarantee属性,同时应该使undo autoextend on

select tablespace_name,status,contents,retention from dba_tablespaces;

 

 

缺省配置下undo retention是noguarantee   (guarantee属性慎重使用)

guarantee属性可以修改

alter tablespace undotbs2 retention guarantee;

 

保证unexpired状态undo数据在retention期间不被覆盖

select tablespace_name,status,contents,retention from dba_tablespaces;

 

取消undo表空间guarantee属性

alter tablespace undotbs2 retention noguarantee;

 

 

6 undo信息的查询

dba_undo_extents    查看undo段中不同状态区的空间占用

 

 

7 12C Temporary Undo

 

  临时表被广泛的用于存放中间结果。因为写这些表要快,没有redo。然而临时表中的操作对应的UNDO还是要记录redo的,在临时表对象的生命周期内,对读一致性和事务回滚都是有用的。对于实例来说,事务恢复会丢弃临时对象的undo。从12C开始,可以将临时表的事务生成的Undo信息直接存放在临时表空间独立存在,避免将undo存放到redo。这个模式称为临时Undo。

注:临时Undo段是会话私有的,它存放会话对应的临时表生成的Undo信息

 

使用临时undo提供了如下功能:

  临时Undo减少了Undo表空间的数据,更少的Undo记录可以更好的满足保留时长要求。性能也被改善,因为更少的数据被写入到redo log,例如日志挖掘对更少的redo数据解析。在ADG的物理备库对临时表的DML操作使用临时undo,然而DDL操作必须在主库中创建临时表。

 

  可以在会话级别启用临时undo,也可以在整个数据库级别启用。当通过ALTER SESSION命令启用会话级别时,会话创建临时undo不会影响到其它会话。当通过ALTER SYSTEM命令启用数据库级别时,所有已存在的会话和新会话也会创建临时undo。

  如果对会话开启了临时undo之后,会话正在使用临时对象,当前会话是不能禁用临时undo的。同样,如果临时undo在会话中禁用并且会话使用临时对象,当前会话不能启用临时Undo。注:临时undo特性在数据库中的兼容性至少为12.1.0.0时生效。在ADG的物理备库中临时undo默认是开启的。因为这个特性TEMP_UNDO_ENABLED参数不会影响ADG中的物理备库。

 

VSTEMPUNDOSTAT展示了数据库实例中和临时undo日志相关的多种统计信息。显示了和系统如何工作运行的柱状图统计信息。每隔10分钟视图会收集统计信息。BEGIN_TIME列的值是按照降序显示的,这个视图包含总共576行,跨越4天记录。这个视图和vSUNDOSTAT视图相似。

VSTEMPUNDOSTAT视图重要列的信息:

BEGIN_TIME:Identifies the beginning of the time intervalTXNCOUNT:对应时间内和临时undo 段相关的总共的事务数

MAXCONCURRENCY:在对应时间内,临时对象相关执行并发最多的事务数UNDOBLKCNT:对应时间内,临时undo块的总数

UsCOUNT:对应时间内,临时undo段的个数

NOSPACEERRCNT:对应时间内,临时undo空间不足错误次数

标签:name,管理,临时,Undo,tablespace,undo,retention
来源: https://www.cnblogs.com/jsxxd/p/14856028.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有