您可能需要将最佳计划从源数据库转移到其他目标数据库。
例如,您可能已经在测试数据库上调查了一组计划,并确认它们表现良好。然后,您可能希望将这些计划加载到生产数据库中。
临时表是一个表,在存在该表的过程中,它会存储计划,以便在您解压缩计划时这些计划不会从表中消失。使用以下DBMS_SPM.CREATE_STGTAB_BASELINE
步骤创建登台表。要打包(插入行)和从打包表中解包(从中提取行),请使用包的PACK_STGTAB_BASELINE
和UNPACK_STGTAB_BASELINE
功能DBMS_SPM
。Oracle数据泵导入和导出使您能够将登台表复制到其他数据库。
图28-3从临时表加载计划
使用软件包的PACK_STGTAB_BASELINE
功能导出计划DBMS_SPM
,然后使用导入它们UNPACK_STGTAB_BASELINE
。下表描述了一些功能参数。
表28-8 PACK_STGTAB_BASELINE和UNPACK_STGTAB_BASELINE参数
功能参数 | 描述 |
---|---|
| 指定要导入或导出的表。 |
| SQL计划基线的来源。这些过程接受所有可能的值 |
本教程假定以下内容:
- 您要创建一个
stage1
在源数据库中命名的登台表。 - 您要将用户拥有的所有计划加载
spm
到登台表中。 - 您要将转移表转移到目标数据库。
- 您想要将计划
stage1
作为固定计划加载。
要将一组SQL计划基准从一个数据库转移到另一个数据库:
- 使用适当的特权将SQL * Plus连接到源数据库,然后使用该
CREATE_STGTAB_BASELINE
过程创建临时表。以下示例创建一个名为的登台表
stage1
:BEGIN DBMS_SPM.CREATE_STGTAB_BASELINE ( table_name => 'stage1'); END; /
复制 - 在源数据库上,将要从SQL管理库导出的SQL计划基准打包到暂存表中。
以下示例将用户创建的启用的计划基准打包
spm
到登台表中stage1
。使用计划名称(plan_name
),SQL句柄(sql_handle
)或任何其他计划条件选择SQL计划基准。该table_name
参数是强制性的。DECLARE v_plan_cnt NUMBER; BEGIN v_plan_cnt := DBMS_SPM.PACK_STGTAB_BASELINE ( table_name => 'stage1' , enabled => 'yes' , creator => 'spm' ); END; /
复制 stage1
使用Oracle Data Pump Export 将登台表导出到转储文件中。- 将转储文件传输到目标数据库的主机。
- 在目标数据库上,
stage1
使用Oracle Data Pump Import实用程序从转储文件中导入登台表。 - 在目标数据库上,将SQL计划基线从登台表解压缩到SQL管理库中。
以下示例解压缩存储在登台表中的所有固定计划基准的包装
stage1
:DECLARE v_plan_cnt NUMBER; BEGIN v_plan_cnt := DBMS_SPM.UNPACK_STGTAB_BASELINE ( table_name => 'stage1' , fixed => 'yes' ); END; /
复制
也可以看看:
- 《 Oracle数据库PL / SQL软件包和类型参考》,以获取有关使用
DBMS_SPM
软件包的 更多信息 - Oracle数据库参考以了解有关
DBA_SQL_PLAN_BASELINES
视图的 更多信息 - Oracle Database Utilities有关使用Data Pump导出和导入实用程序的详细信息