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/