使用 Segment Advisor 主动管理空间

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

使用 Segment Advisor 主动管理空间

目的

本教程将向您介绍如何使用 Segment Advisor 主动地管理数据库中的空间。

大约 20 分钟

主题

本教程包括下列主题:

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

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

概述

如果对象以稳定状态使用的空间小于分配给它的空间,则有必要回收未使用的空间。对于以前版本的 Oracle 服务器,只能通过移动或重新定义段才能释放所分配的低于段的最高使用标记 (HWM) 的空间。在 Oracle 数据库 10g 中,您可以重新组织和收缩段。收缩段后,其数据将受到压缩,其 HWM 将被降低,且未使用的空间将再次释放到包含该段的表空间。收缩操作是一个联机就地操作,并且不使用额外的数据库空间便可以执行。就地意味着缩小操作不创建单独的对象,而是对同一对象执行缩小。

Oracle 数据库 10g 第 1 版提供了 Segment Advisor,用于识别适合根据其可用空间大小进行收缩的段。Oracle 10g 第 2 版引入的 Automatic Segment Advisor 增强了此功能,它对那些有可能需要根据系统活动以及段所在表空间的空间压力进行空间监视的段主动运行 Segment Advisor。该特性最大限度地降低了手动运行 Segment Advisor 的需要。如果要收缩的段尚未由 Automatic Segment Advisor 分析,则可以对这些段手动运行 Segment Advisor。

在本教程中,您将创建一个表,生成活动,然后使用 Segment Advisor 确定是否可以回收空间。

返回主题列表

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

1.

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

2.

space.zip 下载到工作目录 (c:\wkdir) 中,然后对其进行解压缩

返回主题列表

要演示 Segment Advisor,需在表中创建并生成数据活动。将该表的 Enable Row Movement 选项设置为 Yes。选择该选项使您可以对该表进行空间回收。执行以下步骤:

1.

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

http://:1158/em

输入 sys 作为 User Name,输入 oracle 作为 Password,在 Connect AS 域中输入 SYSDBA,然后单击 Login

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

2.

单击 Administration 选项卡。

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

3.

单击 Schema 部分中的 Tables

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

4.

单击 Create

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

5.

选择 Standard, Heap Organized 并单击 Continue

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

6.

在 Name 域中输入 EMPLOYEES1。将 SYSTEM 指定为模式,并将 EXAMPLE 指定为表空间。单击 Define Using 下拉列表,并选择 SQL。在 CREATE TABLE AS 域中输入 select * from hr.employees,然后单击 Options 选项卡。

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

7.

为 Enable Row Movement 选择 Yes,然后单击 OK,完成表的创建。

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

8.

表已创建完成。单击 Database Instance 定位器链接。

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

9.

要启动 SQL*Plus 会话,请选择 Start > Programs > Oracle - OraDb10g_home1 > Application Development > SQL Plus。输入 system 作为 User Name,输入 oracle 作为 Password,然后单击 OK

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

10.

执行以下命令在 EMPLOYEES1 表上模拟用户活动。

@c:\wkdir\genactivity01

genactivity01.sql 文件包含以下内容:

begin
  for i in 1..1000 loop
    insert into system.employees1
    select * from hr.employees;
commit;
end loop;
end;
/
          

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

11.

要在 EMPLOYEES1 表上模拟更多用户活动,在 SQL*Plus 会话中执行以下 SQL 脚本:

@c:\wkdir\genactivity02

genactivity02.sql 文件包括以下命令:

delete system.employees1 where department_id = 50;
begin
  for i in 1..500 loop
    insert into system.employees1
    select * from hr.employees;
commit;
end loop;
end;
/
           

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

12.

要在 EMPLOYEES1 表上模拟更多用户活动,在 SQL*Plus 会话中执行以下 SQL 脚本:

@c:\wkdir\genactivity03

The genactivity03 file includes the following commands:

begin
  for i in 1..500 loop
     insert into system.employees1
     select * from hr.employees;
commit;
end loop;
end;
/

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

13.

要在 EMPLOYEES1 表上模拟更多用户活动,在 SQL*Plus 会话中执行以下 SQL 脚本:

@c:\wkdir\genactivity04

genactivity04.sql 文件包括以下命令:

delete system.employees1 where department_id = 30;
commit;
delete system.employees1 where department_id = 100;
commit;
delete system.employees1 where department_id = 50;
commit;
delete system.employees1 where department_id = 80;
commit;

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

14.

切换回企业管理器。现在,您可以查看表段统计信息。在 Administration 选项卡中,单击 Tables 链接。

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

15.

要找到 SYSTEM.EMPLOYEES1 表,在 Schema 域中输入 SYSTEM 并在 Object Name 域中输入 emp,然后单击 Go

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

16.

单击 Edit

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

17.

单击 Segments 选项卡。

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

18.

注意 EMPLOYEES1 表中浪费空间的百分率。(您的实际值可能与该屏幕截图中的值不同。)可以使用 Segment Advisor 回收该表中未使用的空间。单击 Database Instance 定位器链接。

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

返回主题列表

使用 Segment Advisor 回收空间

执行以下步骤:

1.

向下滚动至页面底部。单击 Related Links 部分中的 Advisor Central 链接。

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

注意:在 Oracle 数据库 10g 第 2 版中,Segment Advisor 自动按各个时间间隔运行。因此,在某段时间过后,您将看到主页上显示的 Segement Advisor 建议数。

2.

单击 Segment Advisor

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

3.

选择 Schema Objects,然后单击 Next

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

4.

单击 Add

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

5.

为 Type 选择 Table,输入 system 作为 Schema,输入 employees1 作为 Object,然后单击 Search

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

6.

在 Results 部分中,选择 SYSTEM.EMPLOYEES1 表,然后单击 OK

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

7.

单击 Next

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

8.

在 Schedule 窗口中,确保 Schedule Type 为 Standard,Start 为 Immediately。单击 Next

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

9.

单击 Submit

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

10.

单击 Refresh

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

11.

选择 SEGMENTADV_(刚刚提交的请求结果),然后单击 View Result

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

12.

单击 Recommendation Details

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

13.

选择 EMPLOYEES1 段,然后单击 Recommendation 列中的 Shrink。(您的值可能与该屏幕截图中的值略有不同。)

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

14.

单击 Implement

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

15.

单击 Submit

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

16.

现在,可以检查从表中实际释放的空间大小。单击 Database Instance 定位器链接。

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

17.

单击 Administration 页面上的 Tables

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

18.

输入 SYSTEM 作为 Schema,输入 EMP 作为 Object Name,然后单击 Go

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

19.

选择 EMPLOYEES1,然后单击 Edit

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

20.

单击 Segments 选项卡。

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

21.

所浪费的空间已显著减少。(您的实际值可能与该屏幕截图中的值不同。)

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

22.

返回到您的 SQL*Plus 会话,执行以下 SQL 脚本:

@c:\wkdir\cleanup

cleanup.sql 文件包括以下命令:

drop table system.employees1 purge;

exit

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

返回主题列表

在本教程中,您学习了如何使用 Segment Advisor 回收表中的空间。

返回主题列表

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