暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle统计

askTom 2018-02-14
186

问题描述


我即将进行生产迁移,需要帮助。表A有几亿行。迁移应该更新表a中的列,但不是进行更新,而是创建表B (与表A一对一),然后执行cta来创建表C,然后删除表B。

迁移开发人员无需在表B上进行统计。cta具有并行连接,该连接使用广播而不是哈希。它为迁移增加了额外的12个小时。

管理层不想触摸迁移代码来添加统计信息集合,甚至不想添加SQL提示。我想告诉Oracle使用并行哈希联接 (不是广播),但是在迁移开始之前,cta的sql id不存在。在迁移开始之前,表B也不存在。

是否可以为尚不存在的查询创建sql计划基线,或者为尚不存在的表创建统计信息?我知道有一个非文档过程可以重写传入的SQL代码,这也可以是一种选择。

我知道这是解决错误的问题,但这是我需要帮助的。

专家解答

也许是SQL翻译

SQL> exec dbms_sql_translator.create_profile('CTAS');

PL/SQL procedure successfully completed.

SQL> exec dbms_sql_translator.register_sql_translation('CTAS','create table t as select * from dba_objects','create table t as select * from dba_objects where rownum <= 10');

PL/SQL procedure successfully completed.

SQL> alter session set sql_translation_profile = CTAS;

Session altered.

SQL> alter session set events = '10601 trace name context forever, level 32';

Session altered.

SQL> create table t as select * from dba_objects;

Table created.

SQL> select count(*) from t;

  COUNT(*)
----------
        10

1 row selected.
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论