一、多租户架构
在中大型企业公司中,使用数据库可能达到成百上千,基本上都处于多个物理服务器之上,带来的是维护成本以及硬件资源浪费。Oracle从12C开始引入多租户概念,由单个实例软件应用程序服务多个客户(租户)多个组织或这样用户共享相同的系统或应用程序。彼此之间的数据以及配置是隔离的,拥有自己的独立环境。可以理解成一栋楼,由一个房东将多个房间租给多个房客。每个房客都是自己的房间,共享楼中的资源。

多租户架构使Oracle 数据库能够充当多租户容器数据库 (CDB)。CDB包括零个,一个或多个客户创建的可插拔数据库 (PDB) 。
多租户容器数据库中的容器(CDB)每个都包含以下PDB:
1、CDB根容器(CDB root container):CDB 根容器用于管理和隔离PDB,元数据共享,全局资源管理等。
2、种子容器(seed PDB):种子 PDB 是系统提供的模板,CDB 可使用它来创建新的 PDB。种子 PDB 名为PDB$SEED。
3、应用程序容器(application containers):在 CDB 中,应用程序容器是一种特殊类型的 PDB,其目的是容纳多个相关联的 PDB。应用程序容器允许将一组 PDB 作为单个实体进行管理,共享元数据和资源。这有助于更好地组织和隔离相关联的应用程序。
4、用户创建的PDB(user-created PDBs):用户创建的一组模式、对象和相关结构,在逻辑上对客户端应用程序显示为单独的数据库 。
二、CDB管理
主要涉及CDB创建,删除,更改等操作
#1、创建 CDB
CREATE DATABASE ... ENABLE PLUGGABLE DATABASE;
如果不指定该ENABLE PLUGGABLE DATABASE子句,则新创建的数据库是非CDB。
#2、查看
SQL> SELECT NAME, CDB, CON_ID FROM V$DATABASE;
NAME CDB CON_ID
--------- --- ----------
DB1 YES 0
三、PDB管理
(一)创建PDB
(1)从种子pdb中复制创建PDB
1.创建PDB
sys@DB1 01:44:14> alter session set pdb_file_name_convert='pdbseed','pdb2';
Session altered.
sys@DB1 01:44:19> create pluggable database pdb2 admin user pdbroot identified by xxxxxx;
Pluggable database created.
sys@DB1 01:44:38> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB2 MOUNTED
2.启动PDB以及配置PGA和SGA
sys@DB1 01:44:42> ALTER SESSION SET CONTAINER=pdb2;
Session altered.
##启动
sys@DB1 01:47:21> ALTER PLUGGABLE DATABASE pdb2 OPEN;
Pluggable database altered.
##配置PGA
sys@DB1 01:47:37> ALTER SYSTEM SET PGA_AGGREGATE_TARGET=20G SCOPE=MEMORY;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=20G SCOPE=MEMORY
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-56747: invalid value 21474836480 for parameter pga_aggregate_target; must be smaller than parameter pga_aggregate_target of the root container
##设置的PGA_AGGREGATE_TARGET的值大于了根容器(root container)的PGA_AGGREGATE_TARGET的值,需要确保你在pdb2中设置的PGA_AGGREGATE_TARGET的值小于或等于根容器的限制,查询根容器的PGA_AGGREGATE_TARGET的值,然后相应地调整pdb2中的设置。
sys@DB1 01:47:42> SHOW PARAMETER PGA_AGGREGATE_TARGET;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 782M
####根容器的PGA_AGGREGATE_TARGET的值为782M。因此,你可以在pdb2中设置一个小于或等于这个值的PGA_AGGREGATE_TARGET
sys@DB1 01:47:57> ALTER SYSTEM SET PGA_AGGREGATE_TARGET=700M SCOPE=MEMORY;
System altered.
### 配置SGA
sys@DB1 01:49:26> ALTER SYSTEM SET SGA_TARGET=700M SCOPE=MEMORY;
System altered.
###查看
sys@DB1 02:05:42> SHOW PARAMETER PGA_AGGREGATE_TARGET;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 700M
sys@DB1 01:55:31> show parameter sga_target;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 700M
3、创建永久表空间
sys@DB1 01:44:42> ALTER SESSION SET CONTAINER=pdb2;
Session altered.
sys@DB1 02:15:41> create tablespace YXSC datafile '/data/DB2/YXSC_data01.dbf' size 100m;
Tablespace created.
4、创建临时表空间
sys@DB1 01:44:42> ALTER SESSION SET CONTAINER=pdb2;
Session altered.
###查看表空间组
sys@DB1 02:33:43> select GROUP_NAME,TABLESPACE_NAME from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TEMP_GRP TEMP1
###查看默认临时表空间
sys@DB1 02:34:35> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
PROPERTY_NAME
--------------------------------------------------------------------------------------------------------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------DEFAULT_TEMP_TABLESPACE
TEMP
(2)克隆创建PDB
sys@DB1 02:49:15> CREATE PLUGGABLE DATABASE DB4 ADMIN USER db4root IDENTIFIED BY xxxxxxx ROLES=(DBA) FILE_NAME_CONVERT=('/data/DB1/', '/data/DB4/db4/');
Pluggable database created.
sys@DB1 02:50:07> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB2 READ WRITE NO
4 DB4 MOUNTED
6 DB3 MOUNTED
(二)启动关闭PDB
##切换到容器内
sys@DB1 03:15:36> alter session set container=pdb2;
Session altered.
##查看当前pdb
sys@DB1 03:43:23> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB2 READ WRITE NO
##关闭PDB
sys@DB1 03:43:34> shutdown immediate;
Pluggable Database closed.
##查看状态已关闭
sys@DB1 03:43:43> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB2 MOUNTED
##启动PDB
sys@DB1 03:43:45> startup ;
Pluggable Database opened.
##查看状态已开启
sys@DB1 03:43:51> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB2 READ WRITE NO
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




