程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle 基於事務的臨時表在11g和12C下的區別

Oracle 基於事務的臨時表在11g和12C下的區別

編輯:Oracle教程

Oracle 基於事務的臨時表在11g和12C下的區別


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.0 Production                                                        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.0 Production
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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved