《oracle 12.2 local temp的原理和實現》要點:
本文介紹了oracle 12.2 local temp的原理和實現,希望對您有用。如果有疑問,可以聯系我們。
從Oracle數據庫12c開始,可以將Oracle Clusterware和Oracle RAC配置在大型集群中,稱為Oracle Flex集群.?這些集群包含兩種類型的節點:Hub節點和Leaf節點.?Hub節點緊密連接,可以直接訪問共享存儲,并作為一個或多個Leaf 節點的錨點. leaf 節點與Hub節點松動連接,可能無法直接訪問共享存儲.
關于Flex Cluster,詳情請點擊:Oracle Flex Clusters
隨著12.2的發布,如果是FLEX集群,可以在LEAF?NODE創建read?only實例,從而引入了local?temp表空間的概念.
local?temp和local?undo的概念不一樣,首先pdb必須使用自己的temp表空間,local?temp指的是RAC環境下,可以在各自的節點上創建local?temp表空間,擁有各自的temp表空間就跟擁有各自的PGA一樣,對于只讀節點來說大的排序需要用到temp時就不需要去看這塊空間另外一個節點有沒有使用,另外避免了兩邊同時使用temp表空間產生的爭用.?
首先,PDB不能使用CDB的temp表空間,PDB和CDB上temp視圖查出來的結果都不一樣:?連接到PDB1,并查看當前的臨時表空間
創建新的臨時表空間,設置為默認,并刪掉原來的臨時表空間
測試最初的臨時表空間不存在
查看當前的臨時表空間
以sysdba連接,再次查詢
dba_temp_files的SHARED字段中表明了類型,local有兩種類型,RIM是read_only實例,ALL是所有實例
SHARED:?for?shared?temporary?tablespace
LOCAL_ON_ALL:?for?local?temporary?tablespace?on?all?instances
LOCAL_ON_RIM:?for?local?temporary?tablespace?on?read-only?instances
官方給的創建語句有兩處問題,一是未指定tempfile的大小,二是local?temp是BIGFILE類型,所以不能指定AUTOEXTEND,也不能添加第二個tempfile.
先來看LOCAL_ON_ALL,創建語句如下,(由于沒有RAC環境只能在單實例上測試)
查詢數據庫當前的大文件表空間,臨時文件和臨時表空間
從操作系統層面查看
從上面可以看到,理論上會創建各自的tempfile,在指定文件名結尾加上_1和_2,但是不知V$TEMPFILE視圖中為什么沒有標明詳細的文件名.
LOCAL_ON_RIM由于需要read?only的實例,創建會報錯ORA-32778
[oracle@orasql2?~]$?oerr?ORA?32778
32778,?00000,?“DDL?operations?are?disabled?on?local?temporary?tablespaces?FOR?LEAF.”
//?*Cause:?A?DDL?operation?on?a?local?temporary?tablespace?FOR?LEAF?was
//?attempted?in?a?system?without?any?read-only?running?instances.
//?*Action:?Add?at?least?one?read-only?instance?to?the?cluster.
read?writ的實例會優先使用shared的臨時表空間,再使用local的臨時表空間 ;read?only的實例優先使用local的臨時表空間,再使用shared的臨時表空間?
其他操作都類似,具體可以參考官方文檔
http://docs.oracle.com/database/122/RACAD/introduction-to-oracle-rac.htm#RACAD-GUID-E84E3BA2-7F36-406B-B630-CD651E0C856F
文章來自微信公眾號:數據和云