自动管理撤消

OBE 主页 > 10gR2 单实例 > 可管理性

自动管理撤消

目的

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

大约 15 分钟。

主题

本教程包括下列主题:

概述
前提条件

将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注意:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。您可以单击单个屏幕截图将其隐藏。

概述

为简化回滚段的管理,Oracle 数据库引入了自动撤消管理 (AUM),在 AUM 中,数据库可自动管理撤消(回滚)空间在各个活动会话之间的分配和管理。在使用自动撤消管理的数据库实例中,所有事务均共享一个撤消表空间。任何正在执行的事务都可以使用此表空间中的空闲空间。当撤消表空间中的空间不足时,系统会将撤消空间从已提交的事务动态转移给正在执行的事务。

自动撤消管理还可根据当前系统活动自动调节撤消保留时间,来帮助避免 ORA-1555 错误(“快照过于陈旧错误”)。这最大限度地提高了撤消表空间中的可用空间的使用率,并使长时间运行的查询能够成功完成,而不会遇到任何“Snapshot Too Old”(快照过于陈旧)错误,只要您的撤消表空间足够大。

在 Oracle 数据库 10g 第 1 版中,撤消保留时间调整为刚好在运行时间最长的查询之前,即使撤消表空间的大小足以提供更长的保留时间。这意味着,您不必担忧由于快照过于陈旧错误而导致查询或事务失败,但是,如果您希望使用闪回特性,则仍需通过设置 UNDO_RETENTION 参数来指定最短撤消保留时间值。在 Oracle 数据库 10g 第 2 版中,该特性得到了增强,经过调整的系统可为给定的撤消表空间提供最佳的撤消保留时间。这意味着,您现在甚至不必为闪回设置 UNDO_RETENTION 参数。唯一保留的配置要求是充分调整撤消表空间的大小。

在本教程中,您将故意切换到一个小的撤消表空间,尽管使用了自动撤消管理,您还是会遇到 ORA-1555(“快照过于陈旧”),这是因为撤消表空间太小了。然后,使用 Undo Advisor 为您的工作负载计算合适的撤消表空间大小。

开始本教程之前,您应该:

1.

完成了教程在 Windows 上安装 Oracle 数据库 10g

2.

下载 undo.zip 并将其解压缩到您的工作目录 (c:\wkdir) 中。

要在企业管理器中创建撤消表空间并用其进行撤消保留,执行以下步骤:

1.

打开浏览器,并输入以下 URL(用您自己的主机名或 IP 地址替换 <hostname>):

http://:1158/em

输入 sys 作为用户名,输入 oracle 作为口令,以 SYSDBA 的身份进行连接,然后单击 Login

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

2.

单击 Administration 选项卡。

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

3.

在 Storage 下面单击 Tablespaces

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

4.

单击 Create

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

5.

输入 UT1 作为 Name,并选择 Undo 作为 Type。单击 Add 添加一个数据文件。

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

6.

输入 UT1.DBF 作为 File Name。要指定 File Size,输入 400 并从下拉列表中选择 KB。单击 Continue

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

7.

单击 OK

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

8.

您已经成功创建了撤消表空间 UT1。

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

要查看如何处理撤消管理,您必须生成一些活动。执行以下步骤:

1.

选择开始 > 程序 > Oracle - OraDb10g_home1 > Application Development > SQL Plus。输入 /nolog 作为 User Name,并单击 OK。然后,输入以下命令,确定数据库的日期和时间:

@c:\wkdir\datetime

datetime.sql 脚本包含以下命令:

connect / as sysdba

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

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

2.

输入以下命令,以切换撤消表空间:

@c:\wkdir\setundo

setundo.sql 脚本包含以下命令:

alter system set undo_tablespace = ut1 scope=memory;

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

3.

从同一会话中,执行以下命令。如果收到错误,则等待一分钟后再次执行该脚本。

@c:\wkdir\newtable
newtable.sql 脚本包含以下命令:
drop table newtable purge:

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;
/
如果 NEWTABLE 不存在,则 DROP 语句会产生一个错误,您可以忽略该错误。

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

4.

从同一会话中,执行以下脚本:

@c:\wkdir\uscript1
uscript1.sql 脚本包含以下命令:
prompt  Proceed with the next step

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;
/

继续执行下一步。

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

5.

打开另一个 SQL*Plus 会话(如步骤 1 所述),并执行以下命令:

@c:\wkdir\uscript2

uscript2.sql 脚本包含以下命令:

connect / as sysdba

prompt  Proceed with the next step

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

继续执行下一步。

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

6.

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

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

要查看 Undo Advisor 提供的建议,执行以下步骤:

1.

切换回企业管理器,并单击 Administration

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

2.

单击 Undo Management

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

3.

可以查看潜在问题和 Undo Advisor 提供的建议。按照建议执行操作并增加撤消表空间的大小。单击 Edit Undo Tablespace
注意:建议将视数据库的活动而有所不同。

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

4.

单击 Add 添加一个数据文件。

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

5.

输入 UT2.DBF 作为别名,并按照建议指定文件大小(例如,30 MB)。单击 Continue

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

6.

单击 Apply

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

7.

单击 Database Instance:orcl 定位符链接。

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

8.

单击 Database Configuration 下的 Undo Management

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

9.

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

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

10.

返回至其中一个 SQL*Plus 会话,并执行以下脚本:

@c:\wkdir\cleanup
cleanup.sql 脚本包含以下命令:

alter system set undo_tablespace = undotbs1 scope=memory;

drop tablespace ut1 including contents and datafiles;
host del C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UT1.DBF
host del C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UT2.DBF

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

在本教程中,您学习了如何:

创建撤消表空间,并使用其进行撤消保留
查看 Undo Advisor 建议

返回主题列表

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