天天看点

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

Oracle UNDO表空间的管理

UNDO表空间的管理是Oracle DBA最重要的日常工作之一,UNDO表空间用来暂时存储DML操作的数据,其主要作用有:

1、事务回滚

2、实例恢复

3、读一致性

4、闪回

下面是对UNDO表空间的一些操作

1、查看某个实例都有哪些表空间:select tablespace_name, contents from dba_tablespaces where contents = 'UNDO';

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

我们也可以用show parameter undo_tablespace名称查看,此命令只能查看当前默认UNDO表空间:

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

当然,我们也可以查看表空间及其对应的数据文件:select substr(file_name,1,60) UNDO_FILES from dba_data_files where tablespace_name = 'UNDOTBS1' order by 1;

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

查看UNDO表空间的大小、可用空间:

select * from (select

     a.tablespace_name,

     sum(a.bytes)/(1024*1024) total_space_MB,

     round(b.free,2) Free_space_MB,

     round(b.free/(sum(a.bytes)/(1024*1024))* 100,2) percent_free

    from dba_data_files a,

     (select tablespace_name,sum(bytes)/(1024*1024) free  from dba_free_space

     group by tablespace_name) b

   where a.tablespace_name = b.tablespace_name(+)

     group by a.tablespace_name,b.free)

 where tablespace_name = 'UNDOTBS1';

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

2、创建UNDO表空间:

create undo tablespace undotbs3 datafile '/data1/oradata/undotbs03_1.dbf' size 100M autoextend on next 20M maxsize 500M;

上面命令中,指定UNDO表空间名称、对应数据文件、初始大小、自动扩展、每次扩展大小、最大扩展到多大

给UNDO表空间增加数据文件:

ALTER TABLESPACE UNDOTBS3 ADD DATAFILE ''/data1/oradata/undotbs03_2.dbf' SIZE 1024M AUTOEXTEND ON NEXT 100M MAXSIZE 2048M;

3、切换默认UNDO表空间:

alter system set undo_tablespace = UNDOTBS3;

4、删除不用的UNDO表空间:

首先查找都有哪些UNDO表空间及其名字;

然后查找默认UNDO表空间;

之后查找要删除的UNDO表空间的数据文件;

删除不用的UNDO表空间:drop tablespace UNDOTBS2;

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

这还不算完,在数据库中删除表空间后,其数据文件还在物理磁盘上存在,需要删除:

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

5、我们可以通过dba_undo_extents查看UNDO表空间的状态:

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

其中STATUS的状态有三个:UNEXPIRED、EXPIRED、ACTIVE

ACTIVE说明此时有大量的DML操作在写UNDO,UNEXPIRED状态是由ACTIVE状态的数据转换过来的,至于UNEXPIRED状态何时转换成EXPIRED,这个由当前系统的undo retention决定。

我们也可以通过v$UNDOSTAT来查看详细的UNDO信息:

SELECT TO_CHAR(BEGIN_TIME, 'MM/DD/YYYY HH24:MI:SS') BEGIN_TIME,TO_CHAR(END_TIME, 'MM/DD/YYYY HH24:MI:SS') ND_TIME,

UNDOTSN, UNDOBLKS, TXNCOUNT, MAXCONCURRENCY AS "MAXCON" FROM v$UNDOSTAT WHERE rownum <= 100;

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理

上面各列中:

BEGIN_TIME表示每条记录UNDO事务开始的时间

END_TIMEE表示每条记录UNDO事务结束的时间

上面每条记录的间隔是10分钟

UNDOTSN 在这段时间undo事务的数量

UNDOBLKS在这段时间占用的undo块的数量

TXNCOUNT事务的总数量

MAXCON这些UNDO事务过程中的最大数据库连接数

6、更改UNDO RETENTION

alter system set UNDO_RETENTION = 1800;

7、涉及到UNDO表空间的系统表:

    V$UNDOSTAT

    V$ROLLSTAT

    V$TRANSACTION

    DBA_UNDO_EXTENTS

    WRH$_UNDOSTAT

    WRH$_ROLLSTAT

Oracle UNDO表空间的管理 Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 Oracle UNDO表空间的管理