oracle臨時表實際應用
(這段是後面新增的:臨時表,在實際應用中,其實和nologging的固定表,是差不多的,都是中間表,所以這裡為什麼新增這段話,是讓自己記得,如果不建立臨時表,而是使用固定表,來作為中間表的話,要記得將這個表改為nologging,否則會產生很多日誌出來,沒有必要,將固定表改為nologging,很簡單:alter table xxx nologging就可以了,這個我已經用dba_tables查過了,確實起作用)。
oracle的臨時表,global temporary table。
注意的是:這個臨時表,不儲存資料,其資料變化也不記入日誌。
所以一般是在程式中,臨時儲存資料用的,也就是儲存在操作過程中臨時用到的資料,包括一些統計中間資料,或者臨時生成的字典等等。
由於其資料變化不計入日誌,所以在統計程式或者臨時的字典的使用,可以很好的避免產生不必要的日誌。
比fixed table好很多,因為固定表要產生日誌,帶來很多不必要的儲存負載。
推薦程式中用到的臨時資料,儘量儲存到臨時表中,因為1、臨時表隔離度更高,只有使用者自己可見;2、使用者用過,oracle系統會自動刪除資料,不需要增加額外的程式碼。
經過實際操作發現,臨時表和固定表的操作方式,是一樣的,許可權方面也是差不多的,只不過一個是臨時用的,用過就沒有資料了,而且不產生日誌,固定表是永久儲存資料,產生日誌,也可以建立索引、觸發器等,也可以建立同義詞。也就是說相差不遠。
臨時表,分為兩種,一種是基於會話的,一種是基於事務,兩者之間有區別,會話指的程式尚在登入期間,程式和資料庫之間的會話存在,基於事務的,指的是事務期間。
基於會話的臨時表,在建立的時候,指定on commit preserve rows,就是基於會話的臨時表,這裡面的資料,在程式和資料庫之間的會話存在期間,資料一直儲存,不刪除,從這方面考慮,可以認定這個方式可以用於生成程式使用的臨時字典之類的。
基於事務的臨時表,在建立的時候,指定on commit delete rows,就是基於事務的臨時表,這種表,要對事務有所瞭解才能使用,事務指的是產生的一個insert、update、delete之類的動作,不是select,事務的完成和關閉,以當前使用者的commit動作為結束,當使用者程式發出commit命令,oracle就會刪除臨時表中的資料。這個特性,非常適合用於查詢程式過程中,產生的統計中間資料,當統計程式過於複雜,程式無法一次性完成統計動作,或者為了減輕資料庫和程式之間的資料來往負擔,可以將統計出來的資料臨時存放在臨時表中,然後將結果查詢到程式介面,在完成將結果抓取到程式介面上後,再發出commit命令,就可以清空臨時表。
在我實際編寫的統計程式中,因為臨時表選擇的問題,統計結果翻倍,所以我認為,查詢統計程式,最好使用基於事務的臨時表,在將統計結果抓取到程式介面上後,發出commit命令,就可以完成當前事務,從而刪除臨時表中的資料。這也就是為了避免一個操作上的失誤,導致的統計錯誤,就是多點幾下按鈕,在基於會話的臨時表,或者在程式中沒有發出commit命令結束事務,多點幾下按鈕,會導致臨時表中的資料,多次插入,那樣當然統計結果也就錯了。
最後記錄下,後臺操作語句:
create global temporary table xxxx(xxx varchar2(10),xxxxx varchar2(20));
grant all on xxxx to role_xxx;
至於選擇表的問題,可以建立同義詞,也就是使用system.xxxx ,這兩種方式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9606200/viewspace-1435675/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 定時任務job實際應用Oracle
- ORACLE臨時表總結Oracle
- oracle 臨時表的使用Oracle
- Oracle 臨時表 OracleDataAdapter 批次更新OracleAPT
- Oracle臨時表使用注意事項Oracle
- oracle臨時表空間相關Oracle
- Oracle臨時表的用法總結FLOracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- Oracle 12C RMAN備份佔用大量臨時表空間Oracle
- oracle 臨時表空間的增刪改查Oracle
- Oracle分析函式之LEAD和LAG實際應用Oracle函式
- oracle 9i臨時表產生過多redoOracle
- MySQL臨時表MySql
- PostgreSQL:臨時表SQL
- Oracle 查詢佔用臨時表空間大的歷史會話和SQLOracle會話SQL
- 檢視oracle臨時表空間佔用率的檢視Oracle
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- MySQL之臨時表MySql
- mysql 建立臨時表MySql
- oracle11g 查詢臨時表空間的使用率和正在使用臨時表空間的使用者Oracle
- MYSQL造資料佔用臨時表空間MySql
- mysql複製中臨時表的運用技巧MySql
- MySQL 5.7 新特性 共享臨時表空間及臨時表改進MySql
- 棧的實際應用
- redis實際應用-限流Redis
- mysql臨時表,臨時表空間,ibtmp1表空間暴增原因初探MySql
- SQLServer臨時表的使用SQLServer
- MySQL 中的臨時表MySql
- Oracle日常問題-臨時表過多導致exp速度慢Oracle
- Oracle 12CR2查詢轉換之cursor-duration臨時表Oracle
- nodejs實際應用場景NodeJS
- 反向代理的實際應用
- eda實驗(臨時)
- oracle建立使用者,表空間,臨時表空間,分配許可權步驟詳解Oracle
- 閉包實際場景應用
- Linux在實際中的應用Linux
- 動態代理的實際應用
- Nginx Rewrite實際應用配置解析Nginx
- sklearn中的pipeline實際應用