多租戶環境

CDB與PDB是Oracle 12C引入的新特性,在ORACLE 12C數據庫引入的多租用戶環境(Multitenant Environment)中,容許一個數據庫容器(CDB)承載多個可插拔數據庫(PDB)。CDB全稱爲ContainerDatabase,中文翻譯爲數據庫容器,PDB全稱爲Pluggable Database,便可插拔數據庫。在ORACLE 12C以前,實例與數據庫是一對一或多對一關係(RAC):即一個實例只能與一個數據庫相關聯,數據庫能夠被多個實例所加載。而實例與數據庫不多是一對多的關係。當進入ORACLE 12C後,實例與數據庫能夠是一對多的關係。下面是官方文檔關於CDB與PDB的關係圖。
多租戶環境
一個CDB數據庫容器包含了下面一些組件:
ROOT組件
ROOT又叫CDB$ROOT,存儲着ORACLE提供的元數據和Common User,元數據的一個例子是ORACLE提供的PL/SQL包的源代碼,Common User 是指在每一個容器中都存在的用戶。
SEED組件
Seed又叫PDB$SEED,這個是你建立PDBS數據庫的模板,你不能在Seed中添加或修改一個對象。一個CDB中有且只能有一個Seed.這個感念,我的感受很是相似SQL SERVER中的model數據庫。
PDBS
CDB中能夠有一個或多個PDBS,PDBS向後兼容,能夠像之前在數據庫中那樣操做PDBS,這裏指大多數常規操做。
這些組件中的每個均可以被稱爲一個容器。所以,ROOT(根)是一個容器,Seed(種子)是一個容器,每一個PDB是一個容器。每一個容器在CDB中都有一個獨一無二的的ID和名稱
1.1概念
ORACLE多租戶環境包括一個容器數據庫CDB和一個或多個可插入數據庫PDB。CDB是一組表空間,對外顯示爲一個邏輯數據庫。CDB建立後,將至少包括兩個容器。根容器CDB$ROOT是環境容器。通常來講,只有DBA會連根容器。種子容器PDB$SPEED是一個已提供的只讀容器,能夠複製,能夠建立可插入容器(名字隨意)。
要點
A.有一個數據庫CDB
B.有一個數據庫實例,一個系統全局區(SGA)和一組後臺進程
C.PDB只是一組表空間和一個服務
D.PDB服務經過數據庫偵聽器提供給用戶
E.連接到一個PDB服務時,會話範圍僅限於與PDB相關聯的表空間
F.根容器定義的對象能夠有因此PDB共享、訪問
G.PDB中定義的對象(包括用戶)PDB私有
H.每一個PDB都有本身的數據字典,定義其本地對象,其指針指向在根容器的數據字典中定義的共享對象sql

特別注意
全部容器必須使用相同的字符集
補丁應用與根容器
非CDB視圖
USER_數據庫

ALL_session

DBA
CDB視圖多一個
CDB

非CDB每一個數據庫實例都有本身的SGA 後臺進程和數據庫字典
一個CDB只有一組後臺進程、一個SGA(一般遠小於各個SGA的總和),許多數據庫字典的一個副本,一個ORACLE HOME 節約了資源
1.2CBD和根容器ide

CDB是數據庫,由實例安裝和打開
根容器是管理共享資源的容器,其主要組件以下
控制文件
undo表空間
redo
實例SGA和後臺進程
數據字典
公共用戶和角色翻譯

根容器至少四個表空間
system、undo、sysaux、temp,它還有傳播到全部PDB的公共用戶和角色,並擁有ORACLE提供的、每一個PDB都須要的全部對象。
根容器是惟一一個不經過偵聽鏈接的容器
C:\Users\Administrator>set ORACLE_SID=orclpdb
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 星期四 12月 14 10:03:02 2017指針

Copyright (c) 1982, 2016, Oracle. All rights reserved.code

鏈接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Productionorm

SQL> show con_name對象

CON_NAME

CDB$ROOTblog

SQL> alter session set container=orclpdb
2 ;
會話已更改。

SQL> show con_name;

CON_NAME
------------------------------ ORCLPDB
2.PDB可插入容器
C:\Users\Administrator>sqlplus pdb2/pdb2@pdb2 as sysdba
SQL> set line 100
SQL> select 'instance: '||instance_name from v$instance
2 union all select 'database: '||name from v$database
3 union all select 'container: '||global_name from global_name;

'INSTANCE:'||INSTANCE_NAME

instance: orcl
database: ORCL
container: PDB2
SQL> conn system/xxxxxxx@orclpdb
已鏈接。
SQL> select 'instance: '||instance_name from v$instance
2 union all select 'database: '||name from v$database
3 union all select 'container: '||global_name from global_name;
'INSTANCE:'||INSTANCE_NAME

instance: orcl
database: ORCL container: ORCLPDB
SQL> alter session set container=cdb$root
2 ;

會話已更改。

SQL> set line 100 SQL> col name format A20 SQL> select con_id,name from v$containers;

CON_ID NAME

1 CDB$ROOT
     2 PDB$SEED
             3 ORCLPDB
     4 PDB2
3.1.可插入數據庫的配置
 4種技術
 A.建立一個新的PDB
 B.叢非CDB建立一個PDB
 C.克隆一個新的PDB
 D.插入一個拔出的PDB
 3.2容器間通信
 SQL> show user;

USER 爲 "SYSTEM"
SQL> show con_name;

CON_NAME
------------------------------ CDB$ROOT
SQL> select * from dual;
DU

X
SQL> select con_id,name,dummy from containers(sys.dual) natural join v$containers;

CON_ID NAME                 DU

1 CDB$ROOT             X
     3 ORCLPDB              X
     4 PDB2                 X
相關文章
相關標籤/搜索