您的位置:首页 > 数据库 > Oracle

Oracle 收集统计信息在11g和12C下的区别

2014-10-15 20:45 459 查看
    Oracle 基于事务的临时表在11g和12C下,可以看到收集临时表的统计信息后,前者记录被清空,后者没有,这是个很重要的区别。在公司环境上用的是12C,在现场用的是11g,使用临时表会造成时快时慢,之前我有帖子http://blog.csdn.net/stevendbaguo/article/details/39964807,用了hint之后,也不是特别好,于是直接采集,结果临时表被清空。解决的方法是:建基于session的临时表,且每次用完之后要truncate,要不然,会有问题。

SQL> select * from v$version;

BANNER                                                                               CON_ID

-------------------------------------------------------------------------------- ----------

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

PL/SQL Release 12.1.0.1.0 - Production                                                    0

CORE 12.1.0.1.0Production                                                        0

TNS for Linux: Version 12.1.0.1.0 - Production                                            0

NLSRTL Version 12.1.0.1.0 - Production                                                    0

SQL> drop table test purge;
--基于事务的临时表

SQL> create global temporary table test

    (

      ID   number

    )

    on commit delete rows;

SQL> insert into test select object_id from dba_objects;

99412 rows inserted

SQL> select count(1) from test;

  COUNT(1)

----------

     99412

SQL> exec dbms_stats.gather_table_stats(user,'test');

SQL> select count(1) from test;

  COUNT(1)

----------

     99412

     

     

     

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE 11.2.0.1.0Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> drop table test purge;
--基于事务的临时表

SQL> create global temporary table test

    (

      ID   number

    )

    on commit delete rows;

SQL> insert into test select object_id from dba_objects;

70379 rows inserted

SQL> select count(1) from test;

  COUNT(1)

----------

     70379

SQL> exec dbms_stats.gather_table_stats(user,'test');

SQL> select count(1) from test;

  COUNT(1)

----------

         0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: