`
feng5hao
  • 浏览: 23083 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

ORACLE【Undo Tablespace】

阅读更多
 --查看unco tablespace使用情况的语句
SELECT B.TABLESPACE_NAME,
       B.TOTAL_MB - NVL(A.FREE_MB, 0) USED_MB,
       B.TOTAL_MB TOTAL_MB,
       ROUND((B.TOTAL_MB - NVL(A.FREE_MB, 0)) / B.TOTAL_MB * 100, 2) USED_PERCENT,
       B.TOTAL_ALLOCATE_MB + NVL(C.NONAUTO, 0) MAX_ALLOCATE_MB,
       NVL(B.TOTAL_ALLOCATE_MB, 0) AUTO_MB,
       NVL(C.NONAUTO, 0) NONAUTO_MB
  FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / 1048576) FREE_MB
          FROM DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) A,
       (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / 1048576) TOTAL_MB,
               ROUND(SUM(MAXBYTES) / 1048576) TOTAL_ALLOCATE_MB
          FROM DBA_DATA_FILES
         GROUP BY TABLESPACE_NAME) B,
       (SELECT SUM(BYTES) / 1048576 NONAUTO, TABLESPACE_NAME
          FROM DBA_DATA_FILES
         WHERE MAXBYTES = '0'
         GROUP BY TABLESPACE_NAME) C
 WHERE A.TABLESPACE_NAME(+) = B.TABLESPACE_NAME
   AND C.TABLESPACE_NAME(+) = B.TABLESPACE_NAME
   AND B.TABLESPACE_NAME LIKE 'UNDO%'
 ORDER BY USED_PERCENT DESC;

 

--看undo真实使用情况
select ((select (nvl(sum(bytes), 0))
           from dba_undo_extents
          where tablespace_name like 'UNDO%'
            and status in ('ACTIVE', 'UNEXPIRED')) * 100) /
       (select sum(bytes)
          from dba_data_files
         where tablespace_name like 'UNDO%') "PCT_INUSE"
  from dual;

 

--查看是否过期的部分
SELECT DISTINCT STATUS, SUM(BYTES) / 1024 / 1024, COUNT(*)
  FROM DBA_UNDO_EXTENTS
 GROUP BY STATUS;

 

--看自动调整成多少
SELECT TO_CHAR(BEGIN_TIME, 'MM/DD/YYYY HH24:MI:SS') BEGIN_TIME,
       TUNED_UNDORETENTION
  FROM V$UNDOSTAT;

 

每个undo extent可以有三种状态: 

active:有活动事务在此extent上 

expired:已结束的事务,undo 信息超过undo_retention时间限制 

unexpired:已经结束的事务,undo 信息未达到undo_retention时间限制 

 

过程
1.先去搜索拥有非active extent的undo segment,如果没有发现,那么会去创建新的undo segment,如果空间不够不能创建,将返回错误。

2.如果有一个undo segment被选中,但是其中free的undo block并不足以存储该事务的undo 信息,那么它将尝试创建extent,如果没有空间,那么将会进入下一步。 

3.如果创建新extent失败,它将会搜索其他undo segment中expired extent并重用。 

4.如果其他undo segment中没有expired extent可使用,那么它会继续搜索其他undo segment中unexpired extent并重用。 

5.如果经过以上尝试还没有可用空间,将会返回错误。

 

--查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)
select s.username, u.name
  from v$transaction t,
       v$rollstat    r,
       v$rollname    u,
       v$session     s
             where s.taddr = t.addr and t.xidusn = r.usn and r.usn = u.usn
 order by s.username;

 

--检查UNDO Segment状态
select usn,
       xacts,status,
       rssize / 1024 / 1024 / 1024,
       hwmsize / 1024 / 1024 / 1024,
       shrinks
  from v$rollstat
 order by rssize;

 

-- 删除原有的UNDO表空间;
drop tablespace undotbs1 including contents;

 

--查看undo数据文件是否自动扩展,undo表空间是否处于gurantee状态。 
select AUTOEXTENSIBLE, RETENTION
  from dba_tablespaces, dba_data_files
 where dba_data_files.TABLESPACE_NAME = dba_tablespaces.TABLESPACE_NAME
   and dba_data_files.TABLESPACE_NAME like 'UNDOTB%'

 

SQL> Alter tablespace undotbs1 retention guarantee;

--如果想禁止undo 表空间retention guarantee
SQL> Alter tablespace undotbs1 retention noguarantee;

 

1. 增加数据文件
ALTER TABLESPACE undotbs_01
ADD DATAFILE '/u01/oracle/rbdb1/undo0102.dbf' AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

 

2. 重命名数据文件

ALTER TABLESPACE undotbs_01 RENAME DATAFILE '/u01/oracle/rbdb1/undo0102.dbf' TO '/u01/oracle/rbdb1/undo0101.dbf';

 

3. 使数据文件online或者offline
ALTER TABLESPACE undotbs_01 online|offline;

 

4. 开始或者结束一个联机备份
ALTER TABLESPACE undotbs_01 BEGIN|END BACKUP;

 

5. 删除undo tablespace
Drop tablespace undotbs_01;

Drop undo表空间的时候必须是在未使用的情况下才能进行。如果undo表空间正在使用(例如事务失败,但是还没有恢复成功),那么drop表空间命令将失败。在drop表空间的时候可以使用including contents。


6. 切换undo tablespace
切换undo表空间有两种方式:

1. 使用命令动态修改;

2. 修改初始化参数后重新启动数据库。

 

Alter system set undo_tablespace=undotbs1;

当切换命令完成后,所有的事务就会在新的回滚表空间内进行。

 

以下几种情况会导致切换命令失败:

1.  表空间不存在;
2.. 表空间不是一个回滚段表空间;
3.  表空间已经被另一个实例使用。



注意:切换的操作不等待旧undo表空间的事务提交。如果旧undo表空间有事务未提交,那么旧的undo表空间进入pending offline状态,在这种模式下所有的事务能够继续进行,但是undo表空间不能被其他实例使用,也不能被删除,直到所有的事务提交后, undo表空间才进入offline模式。

 

7. 设置undo_retention
dba可以设置undo_retention初始化参数指定undo回滚表空间保留undo信息的时间。在设置好这个参数时,系统会保留undo信息在指定的时间断后才收回这个空间。
一般情况下,系统会保留undo信息到指定的时间后才回收空间,但是,如果系统
存在大量的事务,也会将未到期的undo空间回收,以供使用。


8. Undo 表空间大小的设计规范的计算公式
Undospace = UR * UPS *db_block_size+ 冗余量
UR: 表示在undo中保持的最长时间数(秒),由数据库参数UNDO_RETENTION值决定。
UPS:表示在undo中,每秒产生的数据库块数量。


和undo有关的动态性能视图v$undostat 包含undo的统计信息。使用这张视图可以估计系统当前所需的undo大小。
v$rollstat 是undo模式的视图。是undo表空间的undo segments的统计信息
v$transaction 包含undo segments的信息。
dba_undo_extents 包含undo表空间中每一个范围的提交时间。

 

和回滚段相关的性能视图


DBA_ROLLBACK_GEGS 描述回滚段的信息,包含回滚段的名字和表空间;
DBA_SEGMENTS 描述回滚段的附加信息;
V$ROLLNAME 列出在线回滚段的名称
V$ROLLSTAT 包含回滚段的统计信息
V$TRANSACTION 包含撤销的统计信息

 

select * from v$rollstat;
select * from dba_rollback_segs;
alter rollbck segment xxx shrink to xxM;

  

在undo tablespace中不能创建数据库对象,这是因为这个表空间是为数据库recover而准备的。

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    脚本-Oracle释放过度使用的Undo表空间

    ### 关于Oracle释放过度使用的Undo表空间的知识点 在Oracle数据库管理中,Undo表空间扮演着极其重要的角色。它主要用于存储事务处理过程中产生的Undo记录,这些记录对于事务回滚、一致性读取以及恢复操作至关重要。...

    oracle undo详解

    Oracle提供自动Undo管理,通过设置UNDO_MANAGEMENT=AUTO和UNDO_TABLESPACE=UNDOTBS1,数据库将自动处理Undo空间的管理。这样可以减少DBA的维护工作,但仍然需要根据系统负载和事务特性来合理调整Undo表空间的大小,...

    如何计算自动管理的UNDO表空间大小

    AUM(自动 undo 管理,Automatic Undo Management)几乎不需要...  从 Oracle 10g 开始,您可以选择使用 GUARANTEE 选项,以确保在定义的 undo_retention 时间之前,undo 信息不会被覆盖。  UNDO表空间大小由三部

    Oracle的Temp表空间和UNDO表空间的处理

    CREATE UNDO TABLESPACE undotbs DATAFILE '/oracle/app/oracle/oradata/ora10g/undo01.dbf' SIZE 100M; ``` ##### 步骤二:切换到新的UNDO表空间 可以通过以下方式将数据库的UNDO表空间切换到新创建的表空间: -...

    oracle 收缩undo表空间

    CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SIXF\UNDOTBS02.DBF' SIZE 200M AUTOEXTEND OFF ONLINE RETENTION NOGUARANTEE BLOCKSIZE 8K FLASHBACK ON; ``` 这段SQL语句的含义是...

    Oracle Undo

    - 可以通过`ALTER SYSTEM SET UNDO_TABLESPACE = undotbs02;`命令切换到新的Undo表空间。 - 切换后,原有的Undo表空间中的事务完成后可进行删除。 #### 六、常见问题与解决方法 **ORA-01555 错误**: - 表示在查询...

    Oracle_tablespace_(表空间)的创建、删除、修改、扩展及检查等

    Oracle 表空间(tablespace)的创建、删除、修改、扩展及检查等 Oracle 表空间是 Oracle 数据库中的一种逻辑存储结构,它决定数据库实体的空间分配、设置数据库用户的空间份额、控制数据库部分数据的可用性、分布...

    Oracle中重做undo表空间

    在Oracle数据库系统中,"重做undo表空间"是一个至关重要的概念,它是数据库事务处理的基础。Undo表空间是用来存储事务撤销操作时所需信息的地方,这些信息被称为重做日志(Redo Log)。当一个事务对数据进行修改时,...

    oracle 9i UNDO表空间数据文件丢失恢复

    - `CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/opt/oracle/oradata/undotbs02.dbf' SIZE 100M;`。这里需确保指定的路径可用,并且有足够的磁盘空间。 #### 八、设置UNDO管理模式为自动 - 将UNDO管理模式重新...

    Oracle undo_management参数不一致错误

    在Oracle数据库环境中,Undo Management参数是用来管理事务回滚(undo)数据的机制,它确保了数据库的一致性和可恢复性。当在一个RAC(Real Application Clusters)集群中,如果不同节点上的Undo Management参数设置...

    Oracle 面试宝典-undo.docx

    为了防止数据在undo_retention期间被覆盖,可以通过设置undo_tablespace的undo_retention参数来确保所需的Undo保留时间。 ORA-01555错误通常是因为Undo信息在需要时已被重用或删除,解决方法包括增加Undo表空间大小...

    DBA数据库PPT_1

    在Oracle数据库管理中,"DBA数据库PPT_1"主要涵盖了自动还原管理和创建数据库时的UNDO TABLESPACE配置。自动还原管理是Oracle数据库提供的一种关键功能,它确保了数据库的事务一致性和数据的可恢复性。 首先,我们...

    Oracle_create_tablespace语法详解.docx

    本文将对 Oracle Create Tablespace 语法进行详细的解释和分析,从 undo 表空间到表空间的创建,DATAFILE 的设置,MININUM EXTENT,BLOCKSIZE,logging clause,FORCE LOGGING,DEFAULT storage_clause 等方面。...

    Oracle 12C R2本地UNDO模式

    ### Oracle 12C R2 本地UNDO模式详解 #### 一、概述 Oracle 12C R2 引入了一种新的UNDO管理模式——本地UNDO模式(LOCAL_UNDO_ENABLED),它允许每个可插拔数据库(PDB)拥有独立的UNDO表空间。这一特性显著提升了...

    Oracle 12c Undo数据管理分析.pptx

    ALTER DATABASE SET UNDO_TABLESPACE=undotbs1; ``` 在实际操作中,如 SYS@pdb1 示例所示,更新表 test1 后,通过查询可以看到数据已被更新为 'OCM'。这展示了在启用 AUM 时,Undo 如何记录并支持对数据的修改。 ...

    oracle数据库UNDOTBS空间清理

    Oracle数据库的UNDOTBS表空间,全称是Undo Tablespace,是Oracle数据库系统用来存储撤销(Undo)信息的重要部分。当数据库中的事务进行修改操作,如UPDATE或DELETE,Oracle会将这些修改前的状态记录到UNDOTBS表空间...

    相克军 ORACLE 讲座 深度剖析UNDO段 笔记

    Oracle数据库中的UNDO段是其事务处理机制的关键组成部分,它主要负责存储事务对数据所做的更改的旧值,以便于回滚操作和维护读的一致性。在深入理解UNDO段之前,我们需要先了解一些基本概念。 1. **Undo表空间**:...

    Oracle创建新undo表空间最佳实践(包含段检查)

    在Oracle数据库管理中,Undo表空间是至关重要的组成部分,它用于存储事务的回滚信息,以便在发生错误或需要撤销操作时恢复数据。当遇到如ORA-600 [4194]这样的内部错误时,可能是因为Redo记录与Undo记录之间的不匹配...

Global site tag (gtag.js) - Google Analytics