您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

管理UNDO(五)--UNDO表空间满了的处理方法

 

1、先模拟UNDO 表空间满的情况

SQL>  alter system set undo_retention=10800; -- 3个小时

系统已更改。

SQL> create undo tablespace undo datafile 'F:\backup\undo.dbf' size 1m ;

表空间已创建。

SQL> alter tablespace undo retention guarantee;

表空间已更改。

SQL> alter system set undo_tablespace=undo;

系统已更改。

SQL> create table DBA(id number);

表已创建。

SQL> begin

2  for i in 1 .. 100000 loop

3  insert into dba values(i);

4  commit;

5  end loop;

6  end;

7  /

begin

*

第 1 行出现错误:

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

ORA-06512: 在 line 3

2、处理方法

处理方法有两种,一是添加undo 表空间的数据文件,二是切换UNDO tablespace. 这种情况下多用在undo 表空间已经非常大的情况。

(1)增加数据文件

SQL> ALTER TABLESPACE undo ADD DATAFILE 'F:\backup\undo02.dbf' size 100M reuse;

表空间已更改。

SQL> begin

2  for i in 1..100000 loop

3  insert into dba values(1);

4  commit;

5  end loop;

6  end;

7  /

PL/SQL 过程已成功完成。

(2)切换UNDO 表空间

1、建立新的表空间UNDOTBS2

SQL> CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'F:\backup\undo03.dbf' size 100M reuse;

表空间已创建。

2、切换到新建的UNOD表空间上来,操作如下

SQL> alter system set undo_tablespace=UNDOTBS2 scope=both;

系统已更改。

3、将原来的UNDO表空间,置为脱机:

SQL> alter tablespace UNDO offline;

表空间已更改。

4、删除原来的UNDO表空间:

SQL> drop tablespace UNDO including contents AND DATAFILES CASCADE CONSTRAINTS ;

表空间已删除。

如果只是drop tablespace UNDO ,则只会在删除控制文件里的记录,并不会物理删除文件。

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

相关文章 [上一篇] 管理UNDO(四)--前滚和回滚
010-56426307(59426319)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-56426307,59426319 QQ讨论群:243729577 182441349 邮箱:yuezt@cuug.com
通信地址:北京市海淀区紫竹院路88号紫竹花园D座703(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号