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