Oracle 12c R2版本 Application Containers 特性(一)
沃趣科技 楊禹航
在Oracle Database 12c R2版本中,Oracle帶來新的Application Containers特性,該特性對原有的多租戶功能進行了增強,在CDB root容器中可以建立一個叫做Application root的容器,類似於CDB root,可在其內建立多個依賴於Application root的Application PDBs,其架構圖如下:
“Application”
在Application Container特性下還有另一個概念,被命名為“Application”,我們可以把“Application”理解為一個區域,“Application”只能建立在Application root中,其內可以建立表、檢視、函式等公共物件,然後可在Application PDBs中使用sync同步命令,來實現“Application”內的公共物件共享到Application PDBs中。
本篇文章中,透過"Application Root/PDBs"與"Application"的建立開始帶你認識Application Container特性,在第二篇中將帶你瞭解“Application”內的公共物件(Application Common Objects),並透過實驗讓你對其有一個更加直觀的認識。
Application root的建立
Application root與普通的PDB建立語句相似,在建立語句中需要指定“as application container”子句。
首先我們先設定db_create_file_dest:
建立一個名qdatacon1的Application root:
這樣一個名為qdatacon1的Application root就已經成功建立 ,可以透過檢視dba_pdbs.application_root欄位檢視是否是Application root,如下:
dba_pdbs.application_root欄位為YES
將QDatacon1開啟:
注意,當在使用Application Containers特性時需要使用資料檔案的OMF的管理方式,雖然在不使用OMF管理時依然可以成功建立Application root以及Application PDBs,但當“Application”內包含表空間後,在Application PDBs中進行同步“Application”時會報ORA-01537錯誤,無法將“Application”內的表空間同步到Application PDBs中。錯誤程式碼如下:
Application root的基本管理與普通的PDB基本上沒有區別, 包括Application root的cloning/unplug/plugin等。但需要注意as application container的使用,比如下面unplug/plugin的過程:
當然,如果你想將Application root拔出後,以普通PDB的方式插入CDB中,那麼去掉
as application container子句即可。
Application PDBs的建立
Application PDB在建立時必須連線到相應Application root中,而不是CDB root,當連線到Application root中時,只需按照建立普通PDB的方式建立即可,無需額外子句指定,建立完成的PDB既是相應Application root中的Application PDB。
切換到Application root中建立Application PDB:qdcpdb1
切換到CDB中:
在CDB$root中透過show pdbs顯示時,可以看到的Application PDB與普通的PDB並沒有什麼區別。
可以透過cdb_pdbs檢視,來檢視Application PDB屬於哪個Application root
當Applicatoin PDB建立成功,可以使用sync命令將它與Application root中定義的Application進行同步。
alter pluggable database application all sync;
Applications
文章的開篇提到,可以把“Application”做為一個區域來理解,而“Application”只能在Application root中建立及管理,相關命令如下:
application_clauses::=
在“Application”的維護命令中可能最常用的就是install、patch、upgrade以及uninstall,下面對三個命令做簡單描述。
Install an Application
當使用alter pluggable database帶有begin install子句時,即開始一個“Application”的安裝,這裡可以理解為一個區域的開始,當安裝完成後在Application PDB中使用sync命令同步相應的“Application”將會被自動安裝在本PDB內。
QDatacon1:
這樣我們開始了一個qdcon1_reg1的“Application”,使用end install命令封閉qdcon1_reg1,如下:
可以透過dba_applications檢視檢視,已經安裝的Application,如下:
Application安裝完成後,可以在該Application root下的Application PDB中使用sync命令來進行同步,如下:
檢視dba_applications檢視,確認qdcon1_reg1是否已經安裝
可以看到qdcon1_reg1已經安裝完成,安裝完成後qdcon1_reg1中的公共物件會以特定的方式被共享到相應的Application PDB中,如下:
表tdata已經被共享到qdcpdb1中。
在Application root中可以透過dba_app_pdb_status檢視,檢視Application被安裝到哪些Application PDB中,如下:
Patch an Application
在上面的小結中,當我們使用end install子句將“Application”封閉後,如果想再次在“Application”中建立物件(table/view/packages/sequence等),以及對“Application”內已經存在的物件進行alter操作時,我們可以使用patch子句對現有的“Application”進行修補操作。
如下示例,開始一個patch,並且在application內創新增表以及更改現存表的表結構:
刪除Application內的表:
刪除失敗
結束patch:
檢視patch資訊
在qdcpdb1中同步qdcon1_reg1
tdata的表結構與texte表均同步完成
Upgrade an Application
對“Application”我們可以使用patch來對其進行修補操作,但修補操作只限新增/更改等,無法對已經存在“Application”中的公共物件進行刪除操作,如果我們想對公共物件進行刪除操作,可以使用UPGRADE子句對現有的“Application”進行升級,在升級的過程中,Oracle會首先自動建立Application root的Clone版本,Clone版本建立完成後,Application PDBs將指向Clone版本的Application root,“Application”將繼續執行升級操作,升級完成之後,Application root的Clone版本將繼續被保留,並且為不同步“Application”的Application PDB提供服務,同步“Application”後的Application PDB將指向升級後的Application root。
升級現有的qdcon1_reg1:
F1956732192_4_1即為qdatacon1的clone版本
刪除tdata表,並且建立新表tmeta:
結束升級,並檢視版本資訊:
在qdcpdb1中同步qdcon1_reg1
tdata被刪除/tmeata的建立已同步到qdcpdb1中。
Uninstall an Application
“Application”的解除安裝後並不會從資料字典中將該“Application”刪除,它會被標記為UNINSTALL,以便“Application”不可以進行upgrade/patch/uninstall等操作,當uninstall命令發出後,需要將該“Application”中包含的物件全部刪除。
uninstall同樣會產生clone版本的Application root
刪除物件且結束uninstall:
因為物件並沒有全部刪除,導致end uninstall失敗,下面繼續drop使用者和表空間:
檢視被uninstall的qdcon1_reg1狀態:
在qdcpdb1中檢視公共物件情況:
表texte是extended data-linked方式,資料儲存在Application root的qdata_tbs中,因為qdata_tbs已經被刪除,所以在qdcpdb1中查詢時報錯,而tmeta為metadata-linked方式,資料儲存在本地,所以可以在未做同步時可以查詢。
同步qdcon1_reg1:
同步完成。
本篇文章先到這裡,下一篇文章將講解“Application”內公共物件(Application Common Objects)的三種形式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2145849/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12c R2版本 Application Containers 特性(二)OracleAPPAI
- Oracle12c R2版本Application Containers特性(三)OracleAPPAI
- Oracle 12c 新特性(一)Oracle
- 2.3.1 About Application ContainersAPPAI
- Oracle 12C R2新特性-本地UNDO模式(LOCAL_UNDO_ENABLED)Oracle模式
- 2.3.1.1 Purpose of Application ContainersAPPAI
- Oracle 12c新特性Oracle
- Oracle 12c 新特性(四)Oracle
- Oracle 12c 新特性(三)Oracle
- Oracle 12c 新特性(二)Oracle
- 【12.2】Oracle 12C R2新特性-外部表支援分割槽了(Partitioning External Tables)Oracle
- Oracle 資料庫12c新特性總結(一)Oracle資料庫
- 【12c Partitioning】Oracle 12c Partitioning特性Oracle
- Oracle 12c新特性--ASMFD(ASM Filter Driver)特性OracleASMFilter
- Oracle 12c新特性之Sequence的Session特性OracleSession
- Oracle 12C新特性-History命令Oracle
- Oracle 12c 兩個新特性Oracle
- Oracle 12C新特性In-MemoryOracle
- Oracle GoldenGate 12c 新特性OracleGo
- Oracle 12c啟用inmemory特性Oracle
- 2.3.1.1.3 Application Containers Use Case: Logical Data WarehouseAPPAI
- Oracle 12c DG新特性Far SyncOracle
- Oracle 12c 新特性之 temp undoOracle
- ORACLE 12C新特性——CDB與PDBOracle
- ORACLE 12C 優化器的一些新特性總結(一)Oracle優化
- 【oracle 10g R2 新特性】Asynchronous CommitOracle 10gMIT
- Oracle 12C新特性-RMAN恢復表Oracle
- Oracle 12C 新特性之級聯truncateOracle
- 12c新特性-Oracle Sharding簡介Oracle
- Oracle 12C 新特性之 恢復表Oracle
- Oracle 12c新特性 - Hybrid histogram 3OracleHistogram
- Oracle 12c新特性 - Hybrid histogram 2OracleHistogram
- Oracle 12c新特性 - Hybrid histogram 1OracleHistogram
- Oracle 12c新特性 - Top frequency histogram 3OracleHistogram
- Oracle 12c新特性 - Top frequency histogram 2OracleHistogram
- Oracle 12c新特性 - Top frequency histogram 1OracleHistogram
- Oracle Database 12c十二大新特性OracleDatabase
- 新發布GoldenGate 12c版本中的主要特性Go