注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

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

2013-07-23 11:49:42|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

后来跟朋友聊天时,大家觉得undo表空间的扩展、收缩跟普通的用户表空间(如users)是一样的,所以普通表空间的收缩方式同样适用于undo表空间。

 

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

  评论这张
 
阅读(3798)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018