Viktorov Asked:2020-07-16 19:17:50 +0000 UTC2020-07-16 19:17:50 +0000 UTC 2020-07-16 19:17:50 +0000 UTC 如何将 Oracle 查询执行计划导出到其他数据库? 772 有一个查询在一个数据库上运行很快,而在第二个数据库上运行速度非常慢。分析后发现该请求已离开计划。无法配置提示查询计划。 如何将一个好的查询计划从一个数据库转移到另一个数据库? sql 1 个回答 Voted Best Answer Viktorov 2020-07-17T21:44:30Z2020-07-17T21:44:30Z sql计划基线技术用于修复查询计划。转移分几个步骤进行。 来源: 1) 获得您想要的要求sql_id和plan_hash_value具体计划。 2) 在数据库上修复此计划以供请求。 declare l_result number; begin l_result:= dbms_spm.load_plans_from_cursor_cache( sql_id => 'g1gad19d2baa0', plan_hash_value =>2051789865); end;` 3)创建表导出计划 begin dbms_spm.create_stgtab_baseline(table_name => 'table_name'); end; 4) 出口包装计划 declare l_result number; begin l_result := dbms_spm.pack_stgtab_baseline( table_name => 'table_name', enabled =>'yes', creator => 'VIKTOROV_AA'); end; 5)从请求中分离计划(如有必要) declare l_result number; begin l_result:= dbms_spm.drop_sql_plan_baseline(sql_handle => 'SQL_dc1fb582419833d4'); end; sql_handle可以在表中找到dba_sql_plan_baselines 在接收器上: 6) 从源中拖动带有计划的表。例如,通过DB_LINK. create table table_name as select * from table_name@db_link 7)解压复制的计划并附加到请求中 declare l_result number; begin l_result := dbms_spm.unpack_stgtab_baseline(table_name => 'table_name'); end;
sql计划基线技术用于修复查询计划。转移分几个步骤进行。
来源:
1) 获得您想要的要求
sql_id和plan_hash_value具体计划。2) 在数据库上修复此计划以供请求。
3)创建表导出计划
4) 出口包装计划
5)从请求中分离计划(如有必要)
sql_handle可以在表中找到dba_sql_plan_baselines在接收器上:
6) 从源中拖动带有计划的表。例如,通过
DB_LINK.7)解压复制的计划并附加到请求中