传输 AWR 数据
假设您要尝试解决生产数据库中的某些性能问题。本文有一部分已经说明了 AWR 数据对于分析是很重要的。但在正常的生产期间分析 AWR 数据可能并不合适,甚至是不可行的。相反,您可能希望将数据加载到某个中心位置以进行比较分析。如何完成该任务呢?
Oracle 数据库 10g 第 2 版中提供了一个用于此目的的新程序包 DBMS_SWRF_INTERNAL。要将它下载到 Data Pump 转储文件,您将使用过程 AWR_EXTRACT:
1 begin 2 DBMS_SWRF_INTERNAL.AWR_EXTRACT ( 3 dmpfile => 'awr_data.dmp', 4 dmpdir => 'TMP_DIR', 5 bid => 302, 6 eid => 305 7 ); 8* end;我们来更详细地介绍一下以上各行。
行 | 说明 |
3 | 此处介绍了数据的目标文件名。这是一个 Data Pump 导出文件。如果未提供文件名,则使用默认值 awrdat.dmp。 |
4 | 写入转储文件的目录对象。在本示例中,您可能已将目录 TMP_DIR 定义为 /tmp。 |
5 | 该时段起始快照的 ID。 |
6 | 结束快照 ID。您在此处导出位于 302 和 305 之间的快照。 |
现在,您可以将转储文件 awr_data.dmp 置于一个新位置,并使用同一程序包中的另一个过程 AWR_LOAD 加载它:
1 begin 2 DBMS_SWRF_INTERNAL.AWR_LOAD ( 3 SCHNAME => 'ARUP', 4 dmpfile => 'awr_data', 5 dmpdir => 'TMP_DIR' 6 ); 7* end;在此代码中,您将转储文件 awr_data.dmp 的内容加载到由目录对象 TMP_DIR 指定的目录中。加载 AWR 数据时,它并不直接加载到 SYS 模式中,而是先进入另一个模式中。参数 SCHNAME 中提供了模式名(如第 3 行中所示)。导入后,该数据移动到 SYS 模式中:
1 begin 2 DBMS_SWRF_INTERNAL.MOVE_TO_AWR ( 3 SCHNAME => 'ARUP' 4 ); 5* end;此处,您将模式 ARUP 中的 AWR 数据移动到 SYS。
正如我在上面指出的,将 AWR 移动到其他数据库具有很多优点和用途。可以在不同的数据库中分析数据而不会对生产造成太大的影响。此外,可以构建一个由从多个数据库中收集的 AWR 数据组成的中心数据库。
所有这些加载步骤都已经放置到一个名为 awrload.sql 的文件(位于 $ORACLE_HOME/rdbms/bin 目录中)中。同样,脚本 awrextr.sql 包含提取过程的所有步骤。
尽管这个将生产 AWR 数据卸载到备用数据库的机制已被外部化,但它在 Oracle 数据库 10g 第 2 版中的主要用途是帮助解决客户报告的任何问题。使用此方法,客户可以发送 AWR 转储文件格式的原始数据,支持人员随后可以将这些数据导入到他们的模式中以帮助重现和诊断问题。
比较时段报表
假设出现这样一种情况:您刚刚通知业务和应用程序小组召开一个紧急会议。原因很明显:数据库很慢。(是否有任何其他原因?)开发技术主管指出了会议的要点:于昨天凌晨 1 点至凌晨 3 点之间运行的批处理程序非常慢。该程序在该时间通常运行大约 30 分钟,而昨天凌晨却运行了两个小时。业务小组主管果断声明:“公司经历了潜在的收入损失。”
“最近是否进行过更改”,您问到。“没有,一切都未更改”,开发技术主管非常肯定地回答到。(“是的,没错”,您心里是这样认为的。)
听起来熟悉吗?如果您从事生产支持这个苦差事的时间甚至是我的十倍,您便会立即同意。您会怎么做?
幸运地是,您拥有 Oracle 数据库 10g 第 2 版,并在 Oracle 企业数据库中启动了 Snapshot 或 Time Periods 比较。使用此特性,您可以看到两个时间间隔(而不仅仅是两个时间点)之间的量度更改。例如,在本示例中,您可能请求查看昨天凌晨 1 点至凌晨 3 点之间的快照更改,并查看前天同一时段之间的快照更改。如果批处理过程在前天运行良好,而在昨天凌晨出现异常,那么快照更改将给您提供一个重要线索。
以下是它的工作方式:启动 Oracle 企业管理器并转到 Performance 选项卡。在该页面底部,您将看到“Additional Monitoring Links”部分。在该链接组中,搜索“Snapshots”。单击该链接将显示一个类似如下所示的屏幕。