回覆列表
  • 1 # yzilz43129

      Oracle 12C引入了CDB與PDB的新特性,在ORACLE 12C資料庫引入的多租使用者環境(Multitenant Environment)中,允許一個數據庫容器(CDB)承載多個可插拔資料庫(PDB)。CDB全稱為Container Database,中文翻譯為資料庫容器,PDB全稱為Pluggable Database,即可插拔資料庫。在ORACLE 12C之前,例項與資料庫是一對一或多對一關係(RAC):即一個例項只能與一個數據庫相關聯,資料庫可以被多個例項所載入。而例項與資料庫不可能是一對多的關係。當進入ORACLE 12C後,例項與資料庫可以是一對多的關係。下面是官方文件關於CDB與PDB的關係圖。  clip_image002  其實大家如果對SQL SERVER比較熟悉的話,這種CDB與PDB是不是感覺和SQL SERVER的單例項多資料庫架構是一回事呢。像PDB$SEED可以看成是master、msdb等系統資料庫,PDBS可以看成使用者建立的資料庫。而可插拔的概念與SQL SERVER中的使用者資料庫的分離、附加其實就是那麼一回事。看來ORACLE也“抄襲”了一把SQL SERVER的概念,只是改頭換面的包裝了一番。  CDB元件(Components of a CDB)  一個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)連線到CDB資料庫  連線到CDB資料庫容器非常簡單,跟以前連線資料庫是一樣的複製程式碼  [oracle@get-orasvr02 ~]$ sqlplus / as sysdbaSQL*Plus: Release 12.1.0.1.0 Production on Sun Oct 20 23:41:36 2013Copyright (c) 1982, 2013, Oracle. All rights reserved.  Connected to an idle instance.  SQL>  [oracle@get-orasvr02 ~]$ sqlplus sys/password as sysdbaSQL*Plus: Release 12.1.0.1.0 Production on Sun Oct 20 23:43:17 2013Copyright (c) 1982, 2013, Oracle. All rights reserved.  Connected to an idle instance.  SQL>  複製程式碼  2)檢視資料庫是否為CDB  複製程式碼  SQL> select name, decode(cdb, "YES", "Multitenant Option enabled", "Regular 12c Database: ") "Multitenant Option" , open_mode, con_id from v$database;NAME Multitenant Option OPEN_MODE CON_ID--------- ----------------------------- -------------------- ----------EPPS Multitenant Option enabled READ WRITE 0複製程式碼  YES表示該資料庫是CDB,如果是NO表示是NO-CDB(普通資料庫)3)檢視當前容器(Container)  3.1  複製程式碼  SQL> show con_name  CON_NAME  ------------------------------  CDB$ROOT  SQL>  3.2  SQL> select sys_context("userenv", "con_name") "Container DB" from dual;Container DB  ----------------------------------------------------CDB$ROOT  SQL>  複製程式碼  4)檢視CDB容器中的PDBS資訊  檢視CDB中有多少個pluggable database  複製程式碼  SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;CON_ID DBID GUID NAME OPEN_MODE---------- ---------- -------------------------------- ------------------------------ ----------2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED READ ONLY3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS MOUNTEDSQL>  複製程式碼  5)啟動PDB資料庫  方式1:  複製程式碼  SQL> alter pluggable database PDBEPPS open;Pluggable database altered.  SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;CON_ID DBID GUID NAME OPEN_MODE---------- ---------- -------------------------------- ------------------------------ ----------2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED READ ONLY3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS READ WRITE複製程式碼  方式2:  複製程式碼  SQL> alter session set container=PDBEPPS;Session altered.  SQL> startup  Pluggable Database opened.  SQL>  複製程式碼  6)關閉PDB資料庫  SQL> alter pluggable database PDBEPPS close;Pluggable database altered.  SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;CON_ID DBID GUID NAME OPEN_MODE---------- ---------- -------------------------------- ------------------------------ ----------2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED READ ONLY3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS MOUNTEDSQL>  7)在容器間切換  SQL> alter session set container=PDBEPPS;Session altered.  SQL> show con_name;  CON_NAME  ------------------------------  PDBEPPS  SQL>  SQL> alter session set container=CDB$ROOT;Session altered.  SQL> show con_name;  CON_NAME  ------------------------------  CDB$ROOT  SQL>

  • 中秋節和大豐收的關聯?
  • 你和精英之間還差點什麼?