Oracle19c中的全局臨時表

應用程序通常使用某種形式的臨時數據存儲來處理過于復雜而無法一次性完成的流程。通常,這些臨時存儲被定義為數據庫表或 PL/SQL 表。從 Oracle 8i 開始,可以使用全局臨時表將臨時表的維護和管理委托給服務器。

一、臨時表分類

Oracle 支持兩種類型的臨時表。

  • 全局臨時表:從 Oracle 8i 開始可用,也是本文的主題。
  • 私有臨時表:自 Oracle 18c 起可用。

二、創建全局臨時表

全局臨時表中的數據是私有的,因此會話插入的數據只能由該會話訪問。全局臨時表中特定于會話的行可以為整個會話保留,也可以僅為當前事務保留。

ON COMMIT DELETE ROWS 子句指示應在事務結束或會話結束時刪除數據。

CREATE GLOBAL TEMPORARY TABLE my_temp_table (id           NUMBER,description  VARCHAR2(20)
)
ON COMMIT DELETE ROWS;-- Insert, but don't commit, then check contents of GTT.
INSERT INTO my_temp_table VALUES (1, 'ONE');SELECT COUNT(*) FROM my_temp_table;COUNT(*)
----------1SQL>-- Commit and check contents.
COMMIT;SELECT COUNT(*) FROM my_temp_table;COUNT(*)
----------0

相反,ON COMMIT PRESERVE ROWS 子句指示行應在事務結束后繼續保留。它們只會在會話結束時被刪除。

CREATE GLOBAL TEMPORARY TABLE my_temp_table (id           NUMBER,description  VARCHAR2(20)
)
ON COMMIT PRESERVE ROWS;-- Insert and commit, then check contents of GTT.
INSERT INTO my_temp_table VALUES (1, 'ONE');
COMMIT;SELECT COUNT(*) FROM my_temp_table;COUNT(*)
----------1SQL>-- Reconnect and check contents of GTT.
CONN test/testSELECT COUNT(*) FROM my_temp_table;COUNT(*)
----------0SQL>

三、全局臨時表和UNDO

雖然 GTT 中的數據被寫入臨時表空間,但關聯的 undo 仍然寫入普通 undo 表空間,普通 undo 表空間本身受重做保護,因此使用 GTT 并不會減少 undo 以及與保護 undo 表空間相關的重做。

以下代碼創建一個常規表,填充它并檢查事務使用的撤消量。

DROP TABLE my_temp_table PURGE;-- Create conventional table.
CREATE TABLE my_temp_table (id           NUMBER,description  VARCHAR2(20)
);-- Populate table.
INSERT INTO my_temp_table
WITH data AS (SELECT 1 AS idFROM   dualCONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM   data a, data b
WHERE  rownum <= 1000000;-- Check undo used by transaction.
SELECT t.used_ublk,t.used_urec
FROM   v$transaction t,v$session s
WHERE  s.saddr = t.ses_addr
AND    s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');USED_UBLK  USED_UREC
---------- ----------302       6237

現在我們重復前面的測試,但這次使用GTT。

DROP TABLE my_temp_table PURGE;-- Create GTT.
CREATE GLOBAL TEMPORARY TABLE my_temp_table (id           NUMBER,description  VARCHAR2(20)
)
ON COMMIT PRESERVE ROWS;-- Populate GTT.
INSERT INTO my_temp_table
WITH data AS (SELECT 1 AS idFROM   dualCONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM   data a, data b
WHERE  rownum <= 1000000;-- Check undo used by transaction.
SELECT t.used_ublk,t.used_urec
FROM   v$transaction t,v$session s
WHERE  s.saddr = t.ses_addr
AND    s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');USED_UBLK  USED_UREC
---------- ----------303       6238SQL>

對比undo塊

我們可以看到,所使用的undo沒有顯著差異。

Oracle 12c引入了臨時撤銷的概念,允許將GTT的撤銷寫入臨時表空間,從而減少了撤銷和重做。

四、全局臨時表和REDO

?GTT中的數據寫入了臨時表空間,該表空間不受重做的直接保護,因此使用GTT通過減少重做生成來改善性能。不幸的是,在Oracle 12c之前,所有與DML相關的dml與GTT相關聯的撤消均寫入正常的撤消表空間,該表本身受重做的保護。結果,使用GTT減少了重做生成的數量,但不會消除它。描述這一點的另一個原因是,使用GTT消除了直接的重做生成,而不是通過撤消的間接重做生成。

以下代碼創建一個常規表,填充它并檢查事務生成的重做量。

DROP TABLE my_temp_table PURGE;-- Create conventional table.
CREATE TABLE my_temp_table (id           NUMBER,description  VARCHAR2(20)
);SET AUTOTRACE ON STATISTICS;-- Populate table.
INSERT INTO my_temp_table
WITH data AS (SELECT 1 AS idFROM   dualCONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM   data a, data b
WHERE  rownum <= 1000000;1000000 rows created.Statistics
----------------------------------------------------------158  recursive calls15350  db block gets2453  consistent gets0  physical reads23239100  redo size195  bytes sent via SQL*Net to client529  bytes received via SQL*Net from client1  SQL*Net roundtrips to/from client14  sorts (memory)0  sorts (disk)1000000  rows processedSQL>

我們現在重復之前的測試,但這次使用 GTT。

DROP TABLE my_temp_table PURGE;-- Create GTT.
CREATE GLOBAL TEMPORARY TABLE my_temp_table (id           NUMBER,description  VARCHAR2(20)
)
ON COMMIT PRESERVE ROWS;SET AUTOTRACE ON STATISTICS;-- Populate GTT.
INSERT INTO my_temp_table
WITH data AS (SELECT 1 AS idFROM   dualCONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM   data a, data b
WHERE  rownum <= 1000000;1000000 rows created.Statistics
----------------------------------------------------------127  recursive calls15340  db block gets2439  consistent gets0  physical reads2943512  redo size195  bytes sent via SQL*Net to client529  bytes received via SQL*Net from client1  SQL*Net roundtrips to/from client13  sorts (memory)0  sorts (disk)1000000  rows processed

對比日志量

我們可以看到,在使用 GTT 時,我們創建了一個數量級較少的重做,但我們并沒有消除它。

五、其它功能

  • 如果對臨時表發出 TRUNCATE 語句,則僅截斷特定于會話的數據。對其他會話的數據沒有影響。
  • 臨時表中的數據存儲在臨時表空間的臨時段中。
  • 即使數據庫會話異常結束,臨時表中的數據也會在數據庫會話結束時自動刪除。
  • 可以在臨時表上創建索引。索引的內容和索引的范圍與數據庫會話相同。
  • 可以針對臨時表以及臨時表和永久表的組合創建視圖。
  • 臨時表可以有與其關聯的觸發器。
  • 導出和導入實用程序可用于傳輸表定義,但不會處理任何數據行。
  • 臨時表的統計信息對于所有會話都是通用的。 Oracle 12c 允許會話特定的統計信息。
  • 有許多與臨時表相關的限制,但這些限制是特定于版本的。

六、Private Temporary Tables (18c+)

Oracle 18c 中引入了臨時表的新變體。私有臨時表是基于內存的臨時表,根據設置在會話或事務結束時刪除。

#數據庫 #oracle #大頁


🚀 更多數據庫干貨,歡迎關注【安呀智數據坊】

如果你覺得這篇文章對你有幫助,歡迎點贊 👍、收藏 ? 和留言 💬 交流,讓我知道你還想了解哪些數據庫知識!

📬 想系統學習更多數據庫實戰案例與技術指南?

  • 📊 實戰項目分享

  • 📚 技術原理講解

  • 🧠 數據庫架構思維

  • 🛠 工具推薦與實用技巧

立即關注,持續更新中 👇

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80484.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80484.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80484.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 安裝 Milvus

說明 操作系統&#xff1a;Window 中間件&#xff1a;docker desktop Milvus&#xff1a;Milvus Standalone&#xff08;單機版&#xff09; 安裝 docker desktop 參考&#xff1a;Window、CentOs、Ubuntu 安裝 docker-CSDN博客 安裝 Milvus 參考鏈接&#xff1a;Run Mil…

24、DeepSeek-V3論文筆記

DeepSeek-V3論文筆記 **一、概述****二、核心架構與創新技術**0.匯總&#xff1a;1. **基礎架構**2. **創新策略** 1.DeepSeekMoE無輔助損失負載均衡DeepSeekMoE基礎架構無輔助損失負載均衡互補序列級輔助損失 2.多令牌預測&#xff08;MTP&#xff09;1.概念2、原理2.1BPD2.2M…

1.8 梯度

&#xff08;知識體系演進邏輯樹&#xff09; 一元導數&#xff08;1.5&#xff09; │ ├─→ 多元偏導數&#xff08;1.6核心突破&#xff09; │ │ │ └─解決&#xff1a;多變量耦合時的單變量影響分析 │ │ │ ├─幾何&#xff1a;坐標軸切片切線斜率…

274、H指數

題目 給你一個整數數組 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇論文被引用的次數。計算并返回該研究者的 h 指數。 根據維基百科上 h 指數的定義&#xff1a;h 代表“高引用次數” &#xff0c;一名科研人員的 h 指數 是指他&#xff08;她&#xff09…

【C++11】異常

前言 上文我們學習到了C11中類的新功能【C11】類的新功能-CSDN博客 本文我們來學習C下一個新語法&#xff1a;異常 1.異常的概念 異常的處理機制允許程序在運行時就出現的問題進行相應的處理。異常可以使得我們將問題的發現和問題的解決分開&#xff0c;程序的一部分負…

Linux基礎命令之目錄管理——了解各種操作文件目錄的命令,萬字教學,超詳細!!!(1)

文章目錄 前言1、Linux文件系統1.1 核心特點1.2 重要目錄結構1.3 文件類型1.4 文件和目錄的命名規則1.5 文件與目錄的定位方式 2、查看目錄或文件的詳細信息&#xff08;ls&#xff09;2.1 基本語法2.2 常用操作2.3 高級用法 3、切換目錄&#xff08;cd&#xff09;3.1 常用操作…

在線caj轉換word

CAJ格式是中國知網特有的一種文獻格式&#xff0c;在學術研究等領域廣泛使用&#xff0c;但有時我們需要將其轉換為Word格式&#xff0c;方便編輯、引用文獻。本文分享如何輕松將CAJ轉換為word的轉換工具&#xff0c;提高閱讀和辦公效率。 如何將CAJ轉換WORD? 1、使用CAJ轉換…

【現代深度學習技術】注意力機制05:多頭注意力

【作者主頁】Francek Chen 【專欄介紹】 ? ? ?PyTorch深度學習 ? ? ? 深度學習 (DL, Deep Learning) 特指基于深層神經網絡模型和方法的機器學習。它是在統計機器學習、人工神經網絡等算法模型基礎上&#xff0c;結合當代大數據和大算力的發展而發展出來的。深度學習最重…

SpringBoot 集成滑塊驗證碼AJ-Captcha行為驗證碼 Redis分布式 接口限流 防爬蟲

介紹 滑塊驗證碼比傳統的字符驗證碼更加直觀和用戶友好&#xff0c;能夠很好防止爬蟲獲取數據。 AJ-Captcha行為驗證碼&#xff0c;包含滑動拼圖、文字點選兩種方式&#xff0c;UI支持彈出和嵌入兩種方式。后端提供Java實現&#xff0c;前端提供了php、angular、html、vue、u…

邊緣網關(邊緣計算)

邊緣網關是邊緣計算架構中的關鍵組件&#xff0c;充當連接終端設備&#xff08;如傳感器、IoT設備&#xff09;與云端或核心網絡的橋梁。它在數據源頭附近進行實時處理、分析和過濾&#xff0c;顯著提升效率并降低延遲。 核心功能 協議轉換 ○ 支持多種通信協議&#xff08;如…

OpenCV定位地板上的書

任務目標是將下面的圖片中的書本找出來&#xff1a; 使用到的技術包括&#xff1a;轉灰度圖、提取顏色分量、二值化、形態學、輪廓提取等。 我們嘗試先把圖片轉為灰度圖&#xff0c;然后二值化&#xff0c;看看效果&#xff1a; 可以看到&#xff0c;二值化后&#xff0c;書的…

機器學習第一講:機器學習本質:讓機器通過數據自動尋找規律

機器學習第一講&#xff1a;機器學習本質&#xff1a;讓機器通過數據自動尋找規律 資料取自《零基礎學機器學習》。 查看總目錄&#xff1a;學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章&#xff1a;DeepSeek R1本地與線上滿血版部署&#xff1a;超詳細手把手指…

修改圖像分辨率

在這個教程中&#xff0c;您將學習如何使用Python和深度學習技術來調整圖像的分辨率。我們將從基礎的圖像處理技術開始&#xff0c;逐步深入到使用預訓練的深度學習模型進行圖像超分辨率處理。 一、常規修改方法 1. 安裝Pillow庫 首先&#xff0c;你需要確保你的Python環境中…

jsAPI

環境準備 1 安裝nvm nvm 即 (node version manager)&#xff0c;好處是方便切換 node.js 版本 安裝注意事項 要卸載掉現有的 nodejs提示選擇 nvm 和 nodejs 目錄時&#xff0c;一定要避免目錄中出現空格選用【以管理員身份運行】cmd 程序來執行 nvm 命令首次運行前設置好國…

SCDN是什么?

SCDN是安全內容分發網絡的簡稱&#xff0c;它在傳統內容分發網絡&#xff08;CDN&#xff09;的基礎上&#xff0c;集成了安全防護能力&#xff0c;旨在同時提升內容傳輸速度和網絡安全性。 SCDN的核心功能有&#xff1a; DDoS防御&#xff1a;識別并抵御大規模分布式拒絕服務…

Qt/C++開發監控GB28181系統/實時視頻預覽/視頻點播/rtp解包解碼顯示

一、前言 通過gb28181做實時視頻預覽&#xff0c;也就是視頻點播功能&#xff0c;是最重要的功能了&#xff0c;絕對是整個系統排第一重要的&#xff0c;這就是核心功能&#xff0c;什么設備注冊、獲取通道等都是為了實時預覽做準備的&#xff0c;當然這個功能也是最難的&…

找銀子 題解(c++)

題目 思路 首先&#xff0c;這道題乍一看&#xff0c;應該可以用搜索來做。 但是&#xff0c;搜索會不會超時間限制呢&#xff1f; 為了防止時間超限,我們可以換一種做法。 先創立兩個二維數組&#xff0c;一個是輸入的數組a&#xff0c;一個是數組b。 假設 i 行 j 列的數…

子集樹算法文檔

1.算法概述 子集樹是一種 回溯算法&#xff0c;用于生成一個集合的所有子集。給定一個數組 arr&#xff0c;該算法遞歸地遍歷所有可能的子集&#xff0c;并通過一個輔助數組 x 標記當前元素是否被選中。 2.算法特點 時間復雜度&#xff1a;O(2n)&#xff08;因為一個包含 n 個…

HTTP/1.1 host虛擬主機詳解

一、核心需求&#xff1a;為什么需要虛擬主機&#xff1f; 在互聯網上&#xff0c;我們常常希望在一臺物理服務器&#xff08;它通常只有一個公網 IP 地址&#xff09;上運行多個獨立的網站&#xff0c;每個網站都有自己獨特的域名&#xff08;例如 www.a-site.com?, www.b-s…

amass:深入攻擊面映射和資產發現工具!全參數詳細教程!Kali Linux教程!

簡介 OWASP Amass 項目使用開源信息收集和主動偵察技術執行攻擊面網絡映射和外部資產發現。 此軟件包包含一個工具&#xff0c;可幫助信息安全專業人員使用開源信息收集和主動偵察技術執行攻擊面網絡映射并執行外部資產發現。 使用的信息收集技術 技術數據來源APIs&#xf…