臨時表大總結
1. Oracle的臨時表就是全域性臨時表,語法中必須加上GLOBAL,否則會報錯,這點和sqlserver不一樣,sqlserver存在什麼臨時表、全域性臨時表兩種概念
2. 表的定義對所有的會話可見。資料只在產生transaction或session的當前會話中有效
3. 可以對臨時表建立索引,檢視,觸發器
4. 可以用export和import工具匯入匯出表的定義,但是不能匯出資料。
5. 建立在臨時表上的索引也是臨時的,也是隻對當前會話或者事務有效. 儘管對臨時表的DML操作速度比較快,但同樣也是要產生 Redo Log 。
LogMiner does not generate SQL redo for temporary tables. In such a case,
this column(V$LOGMNR_CONTENTS.SQL_REDO) will contain the string "/* No SQL_REDO for temporary tables */".
LogMiner does not generate SQL undo for temporary tables. In such a
case, this column(V$LOGMNR_CONTENTS.SQL_UNDO) will contain the string "/* No SQL_UNDO for temporary tables */".
6. 臨時表不存在併發,就不存在鎖,每個人看到的都是自己的東西 。臨時表的資料只在一個transaction或session中有效,沒有鎖的概念
7. 一個使用者的臨時表就放在當前使用者的臨時表空間中,建立臨時表後並不產生任何segments分配,與普通表不同,在dba_tables中看到臨時表對應的tablespace_name為空。
8. 不管是事務級還是會話級,臨時表的結構以及後設資料還儲存在使用者的資料字典中。如果臨時表完成它的使命後,最好刪除臨時表,否則資料庫會殘留很多臨時表的表結構和後設資料。
例子:
SYSTEM.TEMP_TAB1是事務級的臨時表
SYSTEM自己插入1條資料後不commit,SYSTEM自己SELECT該表,發現有1條資料,SYS使用者可以SELECT到該表但是沒有資料。
commit後,SYSTEM自己SELECT該表也沒有資料了,SYS使用者可以SELECT到該表但是沒有資料
SYSTEM.TEMP_TAB2是會話級的臨時表
SYSTEM自己插入1條資料後不commit,SYSTEM自己SELECT該表,發現有1條資料,SYS使用者可以SELECT到該表但是沒有資料。
commit後,SYSTEM自己SELECT該表,發現有1條資料,SYS使用者可以SELECT到該表但是沒有資料。使用SYSTEM使用者重新開啟一個會話SELECT該表發現沒有資料了。退出可以SELECT到資料的當前SYSTEM使用者再重新進去SELECT後發現改表沒有資料了
SYSTEM.TEMP_TAB2是會話級的臨時表
SYS使用者插入1條資料後不commit,SYSTEM自己SELECT該表,發現沒有資料,SYS使用者可以SELECT到該表有1條資料。
事務級臨時表的資料只在當前事務有效,透過語句:ON COMMIT DELETE ROWS 指定(預設方式,如下兩行結果一致)。
CREATE GLOBAL TEMPORARY TABLE TEMP_TAB1(HID NUMBER,HNAME VARCHAR2(100))
CREATE GLOBAL TEMPORARY TABLE TEMP_TAB1(HID NUMBER,HNAME VARCHAR2(100)) ON COMMIT DELETE ROWS
會話級臨時表的資料只在當前會話有效,透過語句:ON COMMIT PRESERVE ROWS指定。
CREATE GLOBAL TEMPORARY TABLE TEMP_TAB2(HID NUMBER,HNAME VARCHAR2(100)) ON COMMIT PRESERVE ROWS;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-1979083/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE臨時表總結Oracle
- 臨時表空間操作總結
- ORACLE臨時表空間總結Oracle
- oracle臨時表的用法總結Oracle
- mysql關於臨時表的總結MySql
- Oracle臨時表的用法總結FLOracle
- Sqlserver 關於臨時表和表變數的總結SQLServer變數
- Oracle中的臨時表用法彙總Oracle
- 【實驗】重建臨時表空間解決臨時表空間過大問題
- ORACLE臨時表和SQLSERVER臨時表異同OracleSQLServer
- 12C關於CDB、PDB 臨時temp表空間的總結
- MySQL臨時表MySql
- PostgreSQL:臨時表SQL
- oracle臨時表Oracle
- Oracle 臨時表Oracle
- 臨時表空間過大的解決方法
- MySQL之臨時表MySql
- mysql 建立臨時表MySql
- SQL建立臨時表SQL
- Oracle的臨時表Oracle
- 臨時表的操作
- 全域性臨時表
- oracle臨時表空間過大的原因&&處理Oracle
- 巧用臨時表將大結果集轉換為小結果集驅動查詢薦
- MySQL 5.7 新特性 共享臨時表空間及臨時表改進MySql
- 轉Oracle安裝臨時客戶端使用總結Oracle客戶端
- oracle 臨時表的使用Oracle
- MySQL 中的臨時表MySql
- SQLServer臨時表的使用SQLServer
- MYSQL SELECT INTO臨時表MySql
- Oracle全域性臨時表Oracle
- oracle 臨時表空間Oracle
- oracle臨時表空間Oracle
- 會話級臨時表會話
- oracle臨時表的用法Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- 批量處理時臨時增加回滾表空間臨時表空間檔案
- 【臨時表空間】11g中使用 SHRINK方法縮小臨時表空間和臨時檔案