CLEAN ROLLBACK SEGMENT¶
说明¶
手动删除超大的过期回滚段或者重用次数超过限制的过期回滚段。
语法¶
注解
在参数 ENABLE_MANUAL_UNDO 值为 TRUE 时才能删除过期的回滚段
神通内部自动删除超大的回滚段以及使用次数达上限的回滚段,都需要在 online 回滚段不足时才有可能触发。而此命令是支持手动删除这些回滚段:
1.超大回滚段。超大是指回滚段的大小超过 UNDO_SEGMENT_AUTO_DROPPED_SIZE 。
注解
其中,UNDO_SEGMENT_AUTO_DROPPED_SIZE 的范围为0~2147483647,默认值为100,单位为 MB
2.重用次数超过限制的回滚段。是指回滚段所有事务slot的重用次数超过65535的限制。当 ENABLE_UNDO_SEGMENT_CAN_NOT_ONLINE_REUSE 值为true时,表示可以被手动删除。
上述的两种回滚段需要在过期后才能被真正删除。过期是指回滚段的事务的最大提交时间超过 UNDO_RETENTION。
注解
其中 UNDO_RETENTION 的范围为 0~2147483647,默认值为100,单位为s
示例¶
示例1:清除回滚段
-- 启库前修改配置参数
ENABLE_MANUAL_UNDO=true
-- 开启一个会话
-- 修改配置参数
set UNDO_SEGMENT_AUTO_DROPPED_SIZE = 3; -- 设置回滚段自动删除大小为3M
set UNDO_RETENTION = 10; -- 设置回滚段过期时间为10s
-- 清理环境
drop table t1 cascade;
drop procedure p1 cascade;
create table t1(a int, b text);
create or replace procedure p1()
as
var text;
num float8;
i int;
begin
var = 'a';
for i in 1 .. 450 loop
num = rand();
var = var || num;
insert into t1 values(1,var);
end loop;
end;
/
exec p1;
exec p1;
exec p1;
delete from t1;
-- 退出当前会话(清除回滚段引用计数,使回滚段进入空闲状态)
-- 开启新会话
clean rollback segment;