首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ORACLE 12C 多租户的维护管理

12C多租户架构是一个容器数据库(multitenant Container DataBase ,CDB)中包含多个可插拔数据库(PluggableDataBases)。在传统的数据库架构中Oracle实例与数据库的关系是1对1(单实例环境)和1对N(RAC数据库),而在多租户的环境下,实例与数据库的关系为N对1(单实例CDB环境)和N对N(RAC多租户CDB环境)。

简单讲,可插拔数据库(PDB)就像可插拔硬件一样,可以做到即插即用,其实现的逻辑就是将插拔数据库中的数据字典和容器数据库分离,实现快速创建、快速复制、快速迁移等能力。从逻辑上讲,数据库公用控制文件、redo日志、undo表空间,每个可插拔数据库(PDB)都有自己独立的SYSTEM和SYSAUX和临时表空间。

一、PDB的创建和删除

1、PDB的创建有下面几种方法:

从PDB$SEED中创建PDB

通过克隆一个现有的PDB数据库或非CDB数据库(non-CDB)来创建一个新的PDB

使用XML元数据描述文件将数据库插入到CDB中

使用DBMS_PDB方式

CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY pdb1admin

STORAGE (MAXSIZE 2G)

DEFAULT TABLESPACE pdb1

DATAFILE '/u01/oracle/oradata/ora12c/pdb1/pdb1.dbf' SIZE 250M AUTOEXTEND ON

PATH_PREFIX = '/u01/oracle/oradata/ora12c/pdb1'

FILE_NAME_CONVERT = ('pdbseed/', '/pdb1/');

以上命令通过从PDB$SEED创建一个名字为pdb1的插入数据库

2、PDB的删除方法:

drop pluggable database pdb1 including datafiles;

以上命令可以删除插入数据库并包含数据文件

注意:其它方式主要应用在现有PDB的复制、不同CDB中PDB的迁移,以及Non-CDB数据库迁移到PDB的方法

二、PDB的启停

打开PDB时,需要以SYSOPER或SYSDBA身份连接到CDB$ROOT,然后发出ALTERPLUGGABLE DATABASE OPEN语句,可以指定一个或多个PDB来打开

启动CDB后执行如下命令启动PDB

alter pluggable database pdb1 open;

启动CDB后启动所用PDB

alter pluggable database all open;

单独关闭PDB

alter pluggable database pdb1 close;

三、其它维护

表空间管理

在多租户数据库环境中,对数据库表空间的管理与传统的非多租户数据库管理基本相同。无论是对用户表空间还是临时表空间,唯一需要注意的是,在对表空间数据文件进行维护的时候,需要确认对象是属于哪个PDB或者是属于CDB$ROOT。

切换PDB

alter session set container=pdb1; —切换到某个PDB

alter session set container=cdb$root; —切换到cdb root

切换后,创建表空间和原来方式一致

用户管理

相比Oracle 11g之前版本中的用户管理,多租户数据库中数据库的管理有两种:本地用户和公共用户。本地用户即为某个PDB中的数据库用户,是仅存在某个PDB中的数据库用户,其管理方法与传统的非CDB环境相同。相比本地用户,公共用户是在多个PDB中具有相同用户名和验证身份的用户。

公共用户的名称不能与所有PDB中任何本地用户名称相同。公共用户是在根和每个现有和将来的PDB中具有相同身份的数据库用户。

本地用户的用户信息保存在属主PDB中的SYSTEM表空间中,而公共用户的用户信息在CDB$ROOT和各个PDB中的SYSTEM表空间中都有保存。

公共用户创建需要在CDB$ROOT根容器下创建:

alter session set container=cdb$root;

create user C##boco identified by oracle

PDB用户创建需要切换到对应容器下创建:

alter session set container=pdb1;

create user pdb1 identified by oracle

管理角色和权限

与公共用户和本地用户类似,在创建角色role的时候,也会有公共角色和本地角色的区别,当在根容器中创建角色时,该角色为公共角色,而在具体某一个PDB中创建角色时,该角色为本地角色。

公共角色可以授予公共用户,也可以授予本地用户。同样,在某一个PDB中,可以给一个公共用户授予公共角色,也可以给它赋予本地角色。所以,公共用户在不同的PDB中的权限可能是不同的。

可以在根容器CDB$ROOT下给所有的公共用户授予公共权限,如果需要赋予一个公共权限,则在赋权SQL命令后面需要加上container=all子句。如下:

grant create table to C##USER1 container=all;

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180124G0Q0RI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券