使用 Segment Advisor 主动地管理空间
使用 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 确定是否可以回收空间。
返回主题列表
要演示 Segment Advisor,在表中创建并生成数据活动。将该表的 Enable Row Movement 选项设置为 Yes。选择该选项使您可以对该表进行空间回收。执行以下步骤:
| 1. |
打开浏览器,输入以下 URL:
http://raclinux1.us.oracle.com:1158/em
以 SYSDBA 的身份输入 sys/oracle,然后单击 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. |
表已创建完成。单击 Cluster Database 路径式导航栏。

|
| 9. |
打开一个终端窗口并执行以下命令,在 EMPLOYEES1 表上模拟用户活动。
cd /home/oracle/wkdir
sqlplus system/oracle
@genactivity01
genactivity01.sql 文件包含以下代码:
begin
for i in 1..1000 loop
insert into system.employees1
select * from hr.employees;
commit;
end loop;
end;
/

|
| 10. |
要在 EMPLOYEES1 表上模拟更多用户活动,在 SQL*Plus 会话中执行以下 SQL 脚本:
@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;
/

|
| 11. |
要在 EMPLOYEES1 表上模拟更多用户活动,在 SQL*Plus 会话中执行以下 SQL 脚本:
@genactivity03
genactivity03 文件包含以下代码:
begin
for i in 1..500 loop
insert into system.employees1
select * from hr.employees;
commit;
end loop;
end;
/

|
| 12. |
要在 EMPLOYEES1 表上模拟更多用户活动,在 SQL*Plus 会话中执行以下 SQL 脚本:
@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;
exit

|
| 13. |
切换回 Enterprise Manager。现在,您可以查看表段统计信息。从 Administration 选项卡中,单击 Tables 链接。

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

|
| 15. |
单击 Edit。

|
| 16. |
单击 Segments 选项卡。

|
| 17. |
注意 EMPLOYEES1 表中的已浪费空间百分比。可以使用 Segment Advisor 回收该表中未使用的空间。单击 Cluster Database 路径式导航栏。

|
返回主题列表
执行以下步骤:
| 1. |
向下滚动至页面底部。单击 Related Links 部分中的 Advisor Central 链接。

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

|
| 3. |
选择 Schema Objects,然后单击 Next。

|
| 4. |
单击 Add。

|
| 5. |
为 type 选择 Table,为 Schema 输入 system 并为 object name 输入 employees1,然后单击 Search。

|
| 6. |
选择 Select 列中的复选框 以选中 Results 部分中的 SYSTEM.EMPLOYEES1,然后单击 OK。

|
| 7. |
单击 Next。

|
| 8. |
在 Schedule 窗口中,选择计划类型 Standard 并确保在 Start 部分中选择 Immediately。单击 Next。

|
| 9. |
单击 Submit。

|
| 10. |
单击 Refresh。

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

|
| 12. |
单击 Recommendation Details。

|
| 13. |
选择 EMPLOYEES1 段,然后单击 Shrink。

|
| 14. |
单击 Implement。

|
| 15. |
单击 Submit。

|
| 16. |
现在,可以检查从表中实际释放的空间大小。单击 Cluster Database 路径式导航栏。

|
| 17. |
单击 Tables。

|
| 18. |
为 Schema 输入 system,为 Object Name 输入 emp,然后单击 Go。

|
| 19. |
选择 EMPLOYEES1,然后单击 Edit。

|
| 20. |
单击 Segments 选项卡。

|
| 21. |
所浪费的空间已显著减少。

|
返回主题列表
在本教程中,您学习了如何执行下列任务:
 |
使用 Segment Advisor 回收表中的空间 |
返回主题列表
将光标置于该图标上可以隐藏所有屏幕截图。
|