Oracle 12c
Oracle 12C
Oracle 12c 也在雲端的基礎上發展為多租戶架構 , 新的資料庫讓企業可以在 單一實體機器中部署多個資料庫 ,而且每個資料庫都能以 動態插拔 的方式,在12c多租戶架構下擴充、整合、升級與備份 。
杜奕鋒認為,12c多租戶雲端架構的概念,是一種類虛擬化技術,沒有真的採用虛擬化技術,而是 像虛擬化使用VM來打包執行環境的概念來設計資料庫,在一個大資料庫之下,由多個小的資料庫組成,這就是所謂的多租戶雲端架構 。
目前, 12c 的多租戶架構最多可支援252個資料庫 ,而且資料庫管理員可以把多個資料庫當作一個資料庫來管理,不論升級或備份都可以插拔的方式完成。
Oracle 12C引入了CDB與PDB的新特性,在ORACLE 12C資料庫引入的多租使用者環境(Multitenant Environment)中,允許一個 資料庫容器 (CDB)承載多個 可插拔資料庫 (PDB)。CDB全稱為Container Database,中文翻譯為資料庫容器,PDB全稱為Pluggable Database,即可插拔資料庫。在ORACLE 12C之前,例項與資料庫是一對一或多對一關係(RAC):即一個例項只能與一個資料庫相關聯,資料庫可以被多個例項所載入。而例項與資料庫不可能是一對多的關係。當進入ORACLE 12C後,例項與資料庫可以是一對多的關係。下面是官方文件關於CDB與PDB的關係圖。
其實大家如果對 SQL SERVER 比較熟悉的話,這種CDB與PDB是不是感覺和SQL SERVER的單例項多資料庫架構是一回事呢。像PDB$SEED可以看成是master、msdb等系統資料庫,PDBS可以看成使用者建立的資料庫。而可插拔的概念與SQL SERVER中的使用者資料庫的分離、附加其實就是那麼一回事。看來ORACLE也“抄襲”了一把SQL SERVER的概念,只是改頭換面的包裝了一番。
Oracle 資料庫12c的組成包括三個部分
分別是:
1 最底層的CDB(Container Database)
CDB則是一個後端平臺,讓資料庫管理員可以將多個PDB資料庫當作一個來管理,對於終端使用者來說並沒有任何差異。
當資料庫需要遷移時,拔出的PDB會攜帶自己的資訊與設定,比如修補程式以及加密資訊等,而若需要擴充套件PDB時,則需要另外增加記憶體才能應用。
2 中間層的Root
Root則是用來定義需要共享的後端內容,比如修補程式更新,只需要在Root做一次,在Root之上運作的PDB就可以多個一起完成更新;
3 最上層的PDB(Plugable Database)。
每個PDB都是一個可獨立插拔與管理的資料庫 ;
CDB 元件(Components of a CDB)
一個CDB資料庫容器包含了下面一些元件:
ROOT 元件
ROOT又叫CDB$ROOT, 儲存著ORACLE提供的後設資料和Common User,後設資料的一個例子是ORACLE提供的PL/SQL包的原始碼,Common User 是指在每個容器中都存在的使用者。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SEED 元件
Seed又叫PDB$SEED,這個是你建立PDBS資料庫的模板,你不能在Seed中新增或修改一個物件。一個CDB中有且只能有一個Seed. 這個感念,個人感覺非常類似SQL SERVER中的model資料庫。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ----------------------------------- ----------
2 PDB$SEED READ ONLY NO
3 PDBORCL READ WRITE NO
PDBS
CDB中可以有一個或多個PDBS,PDBS向後相容,可以像以前在資料庫中那樣操作PDBS,這裡指大多數常規操作。
這些元件中的每一個都可以被稱為一個容器。因此,ROOT(根)是一個容器,Seed(種子)是一個容器,每個PDB是一個容器。每個容器在CDB中都有一個獨一無二的的ID和名稱。
1 )連線到CDB資料庫
連線到CDB資料庫容器非常簡單,跟以前連線資料庫是一樣的
[oracle@chen12c ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Tue May 12 18:37:11 2015
Copyright (c) 1982, 2014, Oracle. All rights reserved.
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
--------- -------------------------- -------------------- ----------
ORCL Multitenant Option enabled READ WRITE 0
SQL> select cdb from v$database;
CDB
---
YES
3 )檢視當前容器(Container)
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> select sys_context('userenv','con_name') "Container DB" from dual;
Container DB
--------------------------------------------------------------------------------
CDB$ROOT
4 )檢視CDB容器中的PDBS資訊
檢視CDB中有多少個pluggable database
資料庫起來後,預設PDB為mount狀態
SQL> set linesize 200
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;
SQL> select con_id,dbid,name,open_mode from v$pdbs;
CON_ID DBID NAME OPEN_MODE
---------- ---------- -------- ----------
2 790056509 PDB$SEED READ ONLY
3 2636272535 PDBORCL MOUNTED
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDBORCL READ WRITE NO
5 )啟動PDB資料庫
方式1:
開啟pdb資料庫
SQL> alter pluggable database pdborcl open;
Pluggable database altered.
SQL> select con_id,dbid,name,open_mode from v$pdbs;
CON_ID DBID NAME OPEN_MODE
---------- ---------- -------- ----------
2 790056509 PDB$SEED READ ONLY
3 2636272535 PDBORCL READ WRITE
方式2:
SQL> select con_id,dbid,name,open_mode from v$pdbs;
CON_ID DBID NAME OPEN_MODE
--------- ---------- -------- ----------
2 790056509 PDB$SEED READ ONLY
3 2636272535 PDBORCL MOUNTED
進入pdb資料庫
SQL> alter session set container=pdborcl;
Session altered.
SQL> startup
Pluggable Database opened.
SQL> select con_id,dbid,name,open_mode from v$pdbs;
CON_ID DBID NAME OPEN_MODE
---------- ---------- -------- ----------
3 2636272535 PDBORCL READ WRITE
6 )關閉PDB資料庫
SQL> alter pluggable database pdborcl close;
Pluggable database altered.
SQL> select name,open_mode from v$pdbs;
NAME OPEN_MODE
-------- ----------
PDBORCL MOUNTED
7 )在容器間切換
SQL> show con_name
CON_NAME
------------------------------
PDBORCL
SQL> alter session set container=cdb$root;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDBORCL MOUNTED
SQL> alter session set container=chen ;
ERROR:
ORA-65011: Pluggable database CHEN does not exist.
SQL> alter session set container=pdborcl;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDBORCL
建立使用者
1 切換到容器資料庫
SQL> alter session set container=cdb$root;
Session altered.
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
orcl OPEN
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDBORCL MOUNTED
2 建立使用者(容器資料庫)
SQL> create user chen identified by chen;
create user chen identified by chen
*
ERROR at line 1:
ORA-65096: invalid common user or role name
SQL> ! oerr ora 65096
65096, 00000, "invalid common user or role name"
// *Cause: An attempt was made to create a common user or role with a name
// that was not valid for common users or roles. In addition to
// the usual rules for user and role names, common user and role
// names must start with C## or c## and consist only of ASCII
// characters.
// *Action: Specify a valid common user or role name.
//
錯誤資訊的解析非常明確地告知“試圖建立一個通用使用者,必需要用C##或者c##開頭”
SQL> create user c##chen identified by chen default tablespace users;
User created.
SQL> grant dba to c##chen;
Grant succeeded.
SQL> select username from dba_users where username='C##CHEN';
USERNAME
----------
C##CHEN
SQL> conn c##chen/chen
Connected.
SQL> create table t1(id number);
Table created.
SQL> declare
2 begin
3 for i in 1..10 loop
4 insert into t1 values(i);
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> show user
USER is "C##CHEN"
建立使用者(可插拔資料庫)
[oracle@chen12c ~]$ cd /u01/app/oracle/product/12.1.0/network/admin/
[oracle@chen12c admin]$ vim tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = chen12c)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = chen12c)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdborcl)
)
)
[oracle@chen12c admin]$ tnsping pdborcl
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 12-MAY-2015 18:21:31
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/12.1.0/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = chen12c)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl)))
OK (0 msec)
--啟動關閉PDB
--pdb的管理可以在cdb中進行也可以在pdb中進行,
--如果是cdb中進行,需要PLUGGABLE關鍵字(如下alter),
--如果是pdb中直接和普通資料庫一樣(startup/shutdown immediate)
--開啟單個pdb
alter pluggable database pdborcl open ;
--開啟所有pdb
alter pluggable database all open ;
--關閉所有pdb
alter pluggable database all close immediate;
--進入pdb
alter session set container=pdborcl;
--//
conn sys/sys@localhost:1521/pdborcl as sysdba;
[oracle@chen12c admin]$ sqlplus sys/oracle@pdborcl as sysdba
--進入cdb
alter session set container=cdb$root;
--//
conn / as sysdba;
--建立使用者
--建立使用者預設的是container=all,在cdb中只能建立全域性使用者(c##開頭),
--會在cdb和所有的pdb中建立該使用者(但是pdb中的全域性使用者需要另外授權才能夠在pdb中訪問)。
--在pdb中只能建立的使用者為本地使用者
--建立全域性使用者
create user c##xff identified by xifenfei;
--建立本地使用者
alter session set container=pdborcl;
create user xxx identified by 123;
--使用者授權
--使用者授權預設情況下是隻會給當前container,在cdb中也可以指定container=all,對所有open的pdb且存在該使用者都進行授權
grant connect to c##xff;
grant resource to c##xff container=all
--修改引數
--在cdb中修改,pdb會繼承進去;如果在pdb中修改會覆蓋pdb從cdb中繼承的引數含義
alter system set open_cursors=500 container=all;
show parameter open_cursors;
alter session set container=pdborcl;
show parameter open_cursors;
--//
alter system set open_cursors=100;
show parameter open_cursors;
conn / as sysdba
show parameter open_cursors;
參考:
http://www.cnblogs.com/kerrycode/p/3386917.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2135508/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 12c Deprecation of Oracle StreamsOracle
- Oracle 12C GDSOracle
- 【12c Partitioning】Oracle 12c Partitioning特性Oracle
- Oracle 12C安裝Oracle
- Oracle 12c新特性Oracle
- Oracle 12c Relocate PDBOracle
- Oracle 12c Refreshable CloneOracle
- Oracle 12c RAC: MGMTDBOracle
- ORACLE 12C EM ExpressOracleExpress
- Oracle 12C配置EMOracle
- ORACLE 12c Core DocOracle
- Oracle 12c - Data RedactionOracle
- oracle 12c 釋出Oracle
- Oracle 12c升級指南Oracle
- 12C Oracle ASM Filter DriverOracleASMFilter
- Oracle 12c Automatic ReoptimizationOracle
- benchmark 壓測Oracle 12cOracle
- sysbench壓測Oracle 12COracle
- Oracle 12c 新特性(四)Oracle
- Oracle 12c 新特性(三)Oracle
- Oracle 12c 新特性(二)Oracle
- Oracle 12c 新特性(一)Oracle
- Oracle 12C dgbroker 配置Oracle
- Oracle 12c PDB淺析Oracle
- Oracle Linux 7上安裝Oracle 12cOracleLinux
- Oracle 12C新特性-History命令Oracle
- Oracle 12c 兩個新特性Oracle
- Oracle 12C新特性In-MemoryOracle
- Oracle 12C 官方文件地圖Oracle地圖
- Oracle 12c CDB&PDBs管理Oracle
- Oracle 12C Statistics on Column GroupsOracle
- oracle 12c release 2 安裝Oracle
- Oracle 12c RMAN全攻略Oracle
- Oracle 12c PDB遷移(一)Oracle
- ORACLE 12C RMAN 功能增強Oracle
- oracle 12c 靜默安裝Oracle
- Oracle 12c Data Guard搭建(一)Oracle
- Oracle 12c系列(六)|Relocate a PDBOracle