本主题说明如何使用PL / SQL从AWR加载计划。
使用软件包的LOAD_PLANS_FROM_AWR功能加载计划DBMS_SPM。下表描述了一些功能参数。
表28-5 LOAD_PLANS_FROM_AWR参数
| 功能参数 | 描述 |
|---|---|
| 范围内开始快照的数量。需要。 |
| 范围内结束快照的数量。需要。 |
| 应用于AWR的过滤器,仅选择要加载的合格计划。默认为null表示已选择AWR中的所有计划。过滤器可以采用 |
| 默认 |
本节说明如何使用命令行加载计划。在Cloud Control中,转到SQL Plan Baseline子页面(如图28-1所示),然后单击Load从AWR加载计划基线。
本教程假定以下内容:
- 您要将以下查询的计划加载到SMB中:
SELECT /*LOAD_AWR*/ * FROM sh.sales WHERE quantity_sold > 40 ORDER BY prod_id; - 您希望加载的计划是不固定的。
- 用户
sh有权限查询DBA_HIST_SNAPSHOT和DBA_SQL_PLAN_BASELINES,执行DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT和执行DBMS_SPM.LOAD_PLANS_FROM_AWR。
要从共享SQL区域加载计划:
- 使用适当的权限登录数据库,然后查询最新的3个AWR快照。
例如,查询
DBA_HIST_SNAPSHOT如下:SELECT * FROM (SELECT SNAP_ID, SNAP_LEVEL, TO_CHAR(BEGIN_INTERVAL_TIME, 'DD/MM/YY HH24:MI:SS') BEGIN FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID DESC) WHERE ROWNUM <= 3; SNAP_ID SNAP_LEVEL BEGIN ---------- ---------- ----------------- 212 1 10/12/15 06:00:02 211 1 10/12/15 05:00:11 210 1 10/12/15 04:00:59 - Query
sh.sales,使用LOAD_AWR标记识别SQL语句。例如,使用以下查询:
SELECT /*LOAD_AWR*/ * FROM sh.sales WHERE quantity_sold > 40 ORDER BY prod_id; - 拍摄一个新的AWR快照。
例如,使用以下程序:
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT; - 查询最近的3个AWR快照,以确认已拍摄新快照。
例如,查询
DBA_HIST_SNAPSHOT如下:SELECT * FROM (SELECT SNAP_ID, SNAP_LEVEL, TO_CHAR(BEGIN_INTERVAL_TIME, 'DD/MM/YY HH24:MI:SS') BEGIN FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID DESC) WHERE ROWNUM <= 3; SNAP_ID SNAP_LEVEL BEGIN ---------- ---------- ----------------- 213 1 10/12/15 06:24:53 212 1 10/12/15 06:00:02 211 1 10/12/15 05:00:11 - 从AWR加载最近2个快照的计划。
例如,执行
LOAD_PLANS_FROM_AWRSQL * Plus中的函数以将计划从快照加载212到213:VARIABLE v_plan_cnt NUMBER EXEC :v_plan_cnt := DBMS_SPM.LOAD_PLANS_FROM_AWR(begin_snap => 212, end_snap => 213);在前面的示例中,变量
v_plan_cnt包含已加载计划的数量。 - 查询数据字典以确保将计划加载到
LOAD_AWR语句的基线中。以下语句查询
DBA_SQL_PLAN_BASELINES(包括示例输出):COL SQL_HANDLE FORMAT a20 COL SQL_TEXT FORMAT a20 COL PLAN_NAME FORMAT a30 COL ORIGIN FORMAT a20 SELECT SQL_HANDLE, SQL_TEXT, PLAN_NAME, ORIGIN, ENABLED, ACCEPTED FROM DBA_SQL_PLAN_BASELINES WHERE SQL_TEXT LIKE '%LOAD_AWR%'; SQL_HANDLE SQL_TEXT PLAN_NAME ORIGIN ENA ACC -------------------- ----------------- ------------------------------ -------------------- --- --- SQL_495d29c5f4612cda SELECT /*LOAD_AWR SQL_PLAN_4kr99sru62b6u54bc8843 MANUAL-LOAD-FROM-AWR YES YES */ * FROM sh.sales WHERE quantity_sold > 40 ORDER BY prod_id输出显示该计划已被接受,这意味着该报表处于该报表的计划基线中。同样,原点是
MANUAL-LOAD-FROM-AWR,这意味着该语句是从AWR手动加载的,而不是自动捕获的。
也可以看看:
- “ 固定计划 ”
- Oracle Database PL / SQL软件包和类型参考,以学习如何使用该
DBMS_SPM.LOAD_PLANS_FROM_AWR功能 - Oracle数据库参考以了解有关
DBA_SQL_PLAN_BASELINES视图的 更多信息




