您的位置:首页 > 数据库 > Oracle

undo表空间的作用、收缩及切换

2014-12-10 14:57 267 查看

undo表空间的作用、收缩及切换

一、undo表空间作用

    1.交易的回退:没有提交的交易可以rollback

    2.交易的恢复:数据库崩溃时,将磁盘的不正确数据恢复到交易前

    3.读一致性:被查询的记录有事务占用,转向回滚段找改前镜像

    4.闪回数据:从回滚段中构造历史数据

SQL> show parameter undo

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS2

undo_management=AUTO 表示undo表空间段的段管理模式是自动管理模式。

在自动管理模式下,管理员只需要备足够的表空间容量,oracle会自动管理扩展回滚段的数量。

undo_retention=900s 表示提交之后旧的镜像保持在回滚段中的时间。这是非强制的回退保持时间,回滚空间不足时,老的镜像就会被冲掉,但事实是我遇到了:

ORA-30036: 无法按 8 扩展段 (在还原表空间 'UNDOTBS2' 中)

最后通过增加undo表空间的数据文件解决了。

从10g开始,可以强制保证保持时间,如下:但是可能会导致空间扩展过大,要慎用。

alter tablespace undotabs1 retention guarantee;

select tablespace_name,retention from dba_tablespaces;

 

二、undo表空间的收缩

如下UNDOTBS2表空间由于大量长时间的DML操作,导致所占空间已经很大,而且涨大后不会自行收缩。

SQL> select file_name,file_id,tablespace_name,bytes/1024/1024/1024 G from dba_data_files where tablespace_name like 'UNDOTBS%';

FILE_NAME                                              FILE_ID    TABLESPACE_NAME                 G

----------------------------------------------------- ---------- ------------------------------ ----------

+DATA/orcl/datafile/undotbs1.286.817556219               3        UNDOTBS1                       0.16601562

+DATA/orcl/datafile/undotbs2.285.817556219               5        UNDOTBS2                       29

+DATA/orcl/datafile/undotbs2.341.821024757               17       UNDOTBS2                       8

尝试收缩一下:

SQL> alter database datafile 5 resize 24g;

Database altered.

不能再缩小了:

SQL> alter database datafile 5 resize 23g;

alter database datafile 5 resize 23g

*

ERROR at line 1:

ORA-03297: file contains used data beyond requested RESIZE value

 

三、undo表空间的切换

undo表空间不会自动收缩,目前很占空间,用切换undo表空间的方式腾出空间来。

建立一个新的undo表空间:

SQL> create undo tablespace undotbs3 datafile size 1g autoextend on next 50m maxsize unlimited;

Tablespace created

切换undo表空间:

SQL> alter system set undo_tablespace=undotbs3 sid=orcl2;

System altered

切换回滚表空间的时候不会影响回滚段数据,虽然如此,但还是建议在业务空闲时做。

显示unbo表空间已经切换:

SQL> show parameter undo

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS3

删除原来的undo表空间:

SQL> drop tablespace undotbs2 including contents and datafiles;

Tablespace dropped

通过再次检查,可以看到原来的undo表空间及undo数据文件真的没有了。

SQL> select file_name,file_id,tablespace_name,bytes/1024/1024/1024 G from dba_data_files where tablespace_name like 'UNDOTBS%';

FILE_NAME                                            FILE_ID     TABLESPACE_NAME                  G

--------------------------------------------------- ---------- ------------------------------ ----------

+DATA/orcl/datafile/undotbs1.286.817556219            3          UNDOTBS1                     0.16601562

+DATA/orcl/datafile/undotbs3.347.821527847            23         UNDOTBS3                     1

次文章转自:http://pandarabbit.blog.163.com/blog/static/2092841442013623114942540/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  undo 事务 oracle