自动管理撤消

目的

本模块介绍了 Oracle 数据库 10g 如何自动管理撤消。

主题

本模块讨论如下主题:

概述
前提条件
创建一个撤消表空间
将表空间用于撤消保留
生成一些活动
查看 Undo Advisor 建议

将光标置于该图标上将显示所有屏幕截图。您也可以将光标置于每个图标上,只查看与之关联的屏幕截图。

概述

为简化回滚段的管理,Oracle9i 数据库引入了自动撤消管理 (AUM),在 AUM 中,数据库自动管理撤消(回滚)空间在各个活动会话之间的分配和管理。在使用 AUM 的数据库中,所有事务均共享一个撤消表空间。任何正在执行的事务都可以使用此表空间中的空闲空间。当撤消表空间中的空间不足时,将撤消空间从已提交的事务动态转移给正在执行的事务。通过 AUM 特性,管理员还可以对撤消保留进行控制。可以时钟时间(秒数)为单位指定要保留的撤消数量。使用保留控制,可以对系统进行配置,以使长时间运行的查询成功执行而不会遇到 ORA-1555(快照太旧)错误。可以使用一个新的可持续初始化参数 UNDO_RETENTION 指定撤消保留。此参数是动态的,因此可以在数据库操作期间使用 ALTER SYSTEM 命令随时更改它。

由于提供了自动撤消保留调整功能,AUM 特性在 Oracle 数据库 10g 中得到了进一步的增强。此特性在缺省情况下使用,它根据撤消表空间的大小自动确定最佳的撤消保留。在您不进行干预的情况下,Oracle 数据库 10g 根据系统活动适应撤消要求中的更改。这最大限度地提高了撤消表空间中的可用空间的使用率,并使长时间运行的查询可以成功完成,而不会遇到任何“Snapshot Too Old”(快照太旧)错误,只要您的撤消表空间足够大。

在本课程中,您将故意切换到一个小的撤消 tbs,尽管您使用自动撤消保留调整,但由于此撤消 tbs 太小,因此您将遇到 1555 错误。这种情况下,您需要撤消顾问程序来计算正确的大小(取决于负载)。

在开始本模块的学习之前,您应该已经:

1.

完成了为安装 Oracle 数据库 10g 配置 Linux 课程

2.

完成了在 Linux 上安装 Oracle 数据库 10g 课程

3.

下载 undoadv.zip 并将其解压缩到工作目录(例如,/home/oracle/wkdir)

要在企业管理器中创建撤消表空间,请执行以下操作:

1.

打开浏览器,输入以下 URL:

http://localhost:5500/em

输入 sys/ 并指定 SYSDBA,然后单击 Login

将鼠标移到该图标上可以查看该图像

 

2.

单击 Administration 选项卡。

将鼠标移到该图标上可以查看该图像

 

3.

单击 Tablespaces 链接。

将鼠标移到该图标上可以查看该图像

 

4.

单击 Create

将鼠标移到该图标上可以查看该图像

 

5.

对于名称输入 UT1,单击类型 Undo,然后单击 Add 添加一个数据文件。

将鼠标移到该图标上可以查看该图像

 

6.

对于文件名输入 ut1.dbf ,对文件大小输入 400KB,然后单击 Continue。

将鼠标移到该图标上可以查看该图像

 

7.

单击 OK

将鼠标移到该图标上可以查看该图像

 

8.

撤消表空间已创建完毕。现在,您可以启用撤消保留调整。单击 Database 路径式导航栏。

将鼠标移到该图标上可以查看该图像

 

现在,您可以使用刚刚创建的表空间。执行以下操作:

1.

单击 Undo Management

将鼠标移到该图标上可以查看该图像

 

4.

单击 Change Tablespace

将鼠标移到该图标上可以查看该图像

 

5.

选择 UT1 旁边的单选按钮并单击 OK

将鼠标移到该图标上可以查看该图像

 

6.

撤消表空间已经更改为您刚刚创建的撤消表空间。现在,您可以查看它的工作情况。

将鼠标移到该图标上可以查看该图像

 

要查看如何处理撤消管理,您需要生成一些活动。执行以下操作:

1.

首先需要确定数据库的日期和时间。打开一个终端窗口,然后输入以下命令:

cd wkdir
sqlplus /nolog
connect / as sysdba;
@datetime

datetime.sql 脚本如下所示:

select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') 
from dual;

将鼠标移到该图标上可以查看该图像

 

2.

从同一会话中,执行以下命令:

@newtable

newtable.sql 脚本如下所示:

create table newtable(b int, s varchar2(100));
begin
for i in 1..100 loop
insert into newtable values(i, rpad('s', 100));
end loop;
commit;
end;
/

将鼠标移到该图标上可以查看该图像

 

3.

从第一个会话中,执行以下命令:

@uscript1

uscript1.sql 脚本如下所示:

declare
b number;
cursor c1 is select b from newtable;
begin
open c1;
loop
fetch c1 into b;
dbms_lock.sleep(6);
exit when c1%notfound;
end loop;
close c1;
commit;
end;
/

将鼠标移到该图标上可以查看该图像

 

4.

打开其他终端窗口,并执行以下命令:

cd wkdir
sqlplus /nolog
connect / as sysdba
@uscript2

uscript2.sql 脚本如下所示:

begin
for i in 1..1000 loop
update newtable set b=b+1, s=rpad('t', 100);
commit;
end loop;
end;
/

将鼠标移到该图标上可以查看该图像

 

5.

切换回第一个 SQL*Plus 会话。很快,您将收到“Snapshot too old”错误。尽管您正在使用自动撤消保留调整,但您的撤消表空间太小,无法容纳更新脚本。

将鼠标移到该图标上可以查看该图像

 

要查看撤消顾问程序提供的建议,请执行以下操作:

1. 切换回企业管理器,并查看撤消管理页面。注意,由于缺省分析针对过去的七天,因此当前的建议大小为 61MB。由于您需要分析特殊负载,因此无论以前发生了什么情况,您都需要定制时间段。对 Analysis Time Period 选择 Customized Time Period,然后单击 Update Analysis

将鼠标移到该图标上可以查看该图像

 

2.

对 Period Starts 域使用前面确定的日期和时间。对于 Period Ends 域,请使用同一值加上两个小时。完成后,按 OK 按钮。

将鼠标移到该图标上可以查看该图像

 

3.

您需要执行建议并增加撤消表空间的大小。单击 Edit Undo Tablespace

将鼠标移到该图标上可以查看该图像

 

4.

单击 Add 添加一个元文件。

将鼠标移到该图标上可以查看该图像

 

5.

输入 ut2.dbf 作为文件名,并指定相应的任何建议。然后单击 OK

将鼠标移到该图标上可以查看该图像

 

6.

单击 Apply

将鼠标移到该图标上可以查看该图像

 

7.

选择 Database 路径式导航栏。

将鼠标移到该图标上可以查看该图像

 

8.

选择 Undo Management

将鼠标移到该图标上可以查看该图像

 

9.

您需要再次更改时间段。Analysis Time Period 选择 Customized Time Period 并单击 Update Analysis

将鼠标移到该图标上可以查看该图像

 

10.

将日期和时间更改为您在步骤 2 中创建的同一日期和时间。然后,单击 OK

将鼠标移到该图标上可以查看该图像

 

11.

注意,问题或建议已不再存在。您可以尝试再次运行 uscript1 和 uscript2,以确保表空间的大小正确。

将鼠标移到该图标上可以查看该图像

将光标置于该图标上可以隐藏所有屏幕截图。