您好,登錄后才能下訂單哦!
在上一篇Oracle 12c R2版本 Application Containers 特性(一)中講解了Application Root/PDBs的創建以及“Application”的維護,本篇將介紹“Application Common Objects”,即公共對象。
公共對象是用戶在Application Container特性下創建的共享對象,且只能創建在Application Root中,共享給Application PDB,其有三種類型可共選擇,分別為:METADATA-LINKED、DATA-LINKED、EXTENDED DATA-LINKED.
METADATA-LINKED:共享公共對象的元數據給Application PDB,不可以查看公共對象在Application root內存儲的數據,在Appliation PDB內可插入本地數據。
DATA-LINKED:共享公共對象的元數據和數據給Application PDB,在Appliation PDB中僅可查詢公共對象在Application root內存儲的數據,無法對其進行DML操作,也不可進行本地數據插入。
EXTENDED DATA-LINKED:共享公共對象的元數據和數據給Application PDB,在Application PDB內可以查詢公共對象在Application root內存儲的數據,對Application root內存儲的數據不能進行DML操作,但在Application PDB內可插入本地數據,EXTENDED DATA-LIKED更像是METADATA-LIKED和DATA LIKED的結合。
如下是不同類型公共對象的元數據和數據的存儲位置對照表:
指定共享屬性時有兩種方式,第一種使用系統參數default_sharing,另一種是在CREATE語句中指定SHARING的類型子句(該子句覆蓋default_sharing參數)。
下面是共享屬性的選擇:
METADATA
DATA
EXTENDED DATA
NONE
以下數據庫中的對象可以被創建為公共對象:
Analytic views
Attribute dimensions
Directories
External procedure libraries
Hierarchies
Java classes, Java resources, Java sources
Packages
Object tables
Object types
Object views
Sequences
Stored functions
Stored procedures
Synonyms
Tables (including temporary tables)
Triggers
Views
對于上面列出的對象,均可以在創建時指定METADATA或NONE選項,而DATA/EXTENDED DATA只能被如下對象創建時所指定:
Table(不包括對象類型表):METADATA, DATA, EXTENDED DATA
Views (不包括對象視圖):METADATA, DATA, EXTENDED DATA
Sequences:METADATA, DATA, NONE
如下測試將通過表來展示不同共享方式的差別
在qdatacon1中安裝Application:qd_reg1:
DATA-LINKED類型
創建sharing=data的表t_data,并且結束qd_reg1的安裝:
在qdcpdb1中同步qd_reg1:
在qdatacon1中向t_data插入數據:
在qdcpdb1內查詢t_data:
查看在qdcpdb1中查詢t_data的執行計劃信息:
以上執行計劃走的是DATA LINK FULL方式。
在qdcpdb1中對表進行delete/insert:
data liked類型的對象數據存儲在Application root內,在Application PDB內無法對其進行DML操作。
在qdcpdb1內查詢數據的rowid信息:
METADATA LIKED類型
創建sharing=metadata類型的表t_meta:
在qdcpdb1內同步qd_reg1:
在qdatacon1中插入數據:
在qdcpdb1內查詢:
metadata liked類型僅共享元數據給Application PDB,在Application PDB內無法查詢共享對象在Application Root內存儲的數據。
在qdcpdb1中向t_meta插入數據:
在qdcpdb1內查詢t_meta數據的rowid信息:
數據在本地存儲,可以獲得ROWID。
查看執行計劃:
以上執行計劃走的TABLE ACCESS FULL。
在qdcpdb1中刪除數據:
EXTENDED DATA類型
創建sharing=extended data類型的表t_exte:
在qdcpdb1內同步:
在qdatacon1中插入數據:
在qdcpdb1中查詢并刪除數據:
qdcpdb1中可以訪問公共對象在Application root內存儲的數據,但是不能對其進行DML操作。
在qdcpdb1中插入數據:
0 QBackup存儲在 Application root內,1 QMonitor 存儲在本地。
在qdcpdb1內查詢數據的rowid信息:
在qdcpdb1內將表t_exte truncate掉:
這里僅將本地數據truncate掉了。
查看執行計劃:
以上執行計劃走的EXTENDED DATA LINK。
這里只做了TABLE的演示,關于其他對象的共享方式與之相近,不在演示。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。