分类: Oracle
2008-04-22 19:45:45
◆首先,我将使用存储过程DBMS_SPM.CREATE_STGTAB_BASELINE创建一个SQL计划管理临时表
◆然后我会使用函数DBMS_SPM.PACK_STGTAB_BASELINE用SYS用户创建的SQL语句填充那个临时表
◆最后,我将调用数据泵导出工具导出临时表的元数据和内容
导入SQL计划基线到一个生产环境
为了结束这个情景,我将模拟部署SQL计划基线到一个生产环境(查看列表2.8):
◆首先,我将导入SQL计划基线临时表到我的目标生产环境
◆因为我正使用相同的Oracle 11g数据库模拟测试和生产环境,我将再次使用存储过程DBMS_SPM.DROP_SQL_PLAN_BASELINE清除所有具有SPM_2_2注释信息的SQL计划基线
◆然后,我将在我的生产数据库中通过函数DBMS_SPM.UNPACK_STGTAB_BASELINE直接重新构建那些基线
概念证明
我已经通过查询数据字典视图DBA_SQL_PLAN_BASELINES校验了成功的“unpacking”。(在本系列前面的文章中我使用过相同的查询,请参考列表1.3)。这六个目标查询的SQL计划基线显示的输出结果在列表2.9中,将MANUAL_LOAD值标记为ORIGIN以指示来源于DBA的干预而不是自动SQL计划基线捕获方式。
下一步
我已经讲述了在数据库升级过程中SQL计划基线如何有效地限制(如果不能消除)SQL语句性能突然倒退,以及在部署一个崭新的应用程序之前如何捕获SQL计划基线以限制计划性能降低,在本系列下一篇也是最后一篇中,我将讲述另外一个SQL计划管理情景,在Oracle 10g和11g数据库之间不用导出SQL计划基线进行数据库升级,我还将讨论如何:
◆控制自动演变SQL计划基线
◆使用手工方法撤销计划演变
◆管理和监视自动清除过时的SQL计划基线