背景

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,即数据库容器,PDB全称为Pluggable Database,即可插拔数据库。

当进入ORACLE 12C后,实例与数据库可以是一对多的关系

Oracle-CDB&PDB_表空间

查看CDB和PDB

-- 以sysdba身份登录
sqlplus /nolog
conn /as sysdba;

-- sysdba身份可以查看所有pdb数据库
show pdbs;

-- 切换会话到指定数据库
alter session set container=cdb$root; --切换会话到CDB
alter session set container=ORCLPDB; --切换会话到PDB

-- 查看当前连接数据库: 返回cdb或者pdb名称
show con_name;

-- 查看当前用户及其用户空间
select * from user_users;

建立PDB

建立PDB并指定管理员和默认tablespace

-- 用pdbseed创建pdb并指定pdb位置,设置PDB默认管理员用户autumnp1,并指定该pdb的默认表空间
create pluggable database pdbautumn
admin user autumnp1 identified by orcl
roles = (DBA)
FILE_NAME_CONVERT=('D:\Oracle\oradata\ORCL\pdbseed','D:\Oracle\oradata\ORCL\pdbautumn')
DEFAULT TABLESPACE autumnpdbdefaulttabsp DATAFILE 'D:\Oracle\oradata\ORCL\pdbautumn\autumnpdbdefaulttabsp.dbf' SIZE 10M AUTOEXTEND ON NEXT 1M;

-- 赋予用户指定表空间的配额(指定大小,也可以用UNLIMITED不限制大小)
ALTER USER autumnp1 QUOTA UNLIMITED ON autumnpdbdefaulttabsp;

-- 打开pdb数据库
alter pluggable database pdbautumn open;

Oracle-CDB&PDB_数据库_02

登录PDB数据库

sqlplus autumnp1/orcl@127.0.0.1:1521/pdbautumn

Oracle-CDB&PDB_oracle_03

用户类型

COMMOM USERS: 普通用户,一般建立在CDB层,用户名需要以C#或C##开头。这种用户可以在CDB和各PDB直接切换session。
LOCAL USERS: 本地用户,仅建立在PBD层,建立的时候需要指定容器。

新建COMMON用户

新建common用户并赋予权限

-- 创建用户并指定密码,没有指定表空间会用默认的表空间USERS和TEMP
create user c##aeolian identified by orcl;
-- 给common user赋予权限
grant connect,resource,dba to c##aeolian;
-- 一次性赋予所有权限,注意这里的create session仅限用户在当前(dba所处的数据库)这个pdb建立连接。
grant dba,connect,resource,create session,create table,create view,unlimited tablespace to aeolian ;

-- 查看登录用户的表空间
select * from user_users;

登录

-- 登录默认的CDB,不用指定ip:port/dbname
sqlplus c##autumn/orcl

-- 登录其他PDB
-- 需要其他PDB的dba进行授权grant connect,resource,dba to c##autumn;
-- 授权方式一:sqlplus system/orcl登录后切换到pdb中alter session set container=ORCLPDB;然后进行授权
-- 授权方式二:sqlplus aeolian/orcl@127.0.0.1:1521/ORCLPDB as sysdba拥有dba角色的local用户登录后进行授权
sqlplus c##autumn/orcl@127.0.0.1:1521/ORCLPDB

拥有dba角色local用户登录后,对common用户进行授权

Oracle-CDB&PDB_oracle_04


common用户即可登录pdb

Oracle-CDB&PDB_oracle_05

新建Local用户

创建表空间

首先创建表空间,如果不事先创建表空间,新建用户时就会用默认表空间user和temp

#永久表空间创建,datafile可以指定表空间物理文件位置
#大小 500M,每次 5M 自动增大,最大不限制
create tablespace aeolian_tablespace datafile 'aeolianfile.dbf' size 100M autoextend on next 5M maxsize unlimited;;
#临时表空间创建
create temporary tablespace aeolian_template_tablespace tempfile 'aeoliantempfile.dbf' size 10m;

#查看表空间及其文件位置
select file_name,tablespace_name from dba_data_files;

创建local user

切换到指定PDB数据库ORCLPDB下面新建用户时,新建的用户为数据库PDB下面的local用户,而system作为common用户可以随意切换cdb和各个pdb。system要想在指定pdb下操作需要先切换session到指定的pdb下面。

#切换到PDB数据库,可以用dba用户执行show pdbs查看所有pdb数据库。不切换默认就是默认的CDB数据库。
alter session set container=ORCLPDB;

#创建账户密码,12c往后普通用户需要带前缀C##或c##
#创建用户,并指定默认表空间,如果不指定表空间则默认永久性表空间为system,默认临时表空间为temp
create user aeolian identified by orcl default tablespace aeolian_tablespace temporary tablespace aeolian_template_tablespace;

# 普通用户:授予connect, resource权限。
# DBA管理用户:授予connect,resource, dba权限。
# 提示:connect,resource, dba三个都是oracle内置已经绑定好权限的角色
grant connect,resource,dba to aeolian;

local用户登录PDB

#用户登录 username/pwd@IP:Port/PDB
sqlplus aeolian/orcl@127.0.0.1:1521/ORCLPDB

用户和表空间关系

一个用户可以同时管理很多表空间,但是默认表空间只有一个,当创建表,视图,引索等不指定表空间时都会存放在默认表空间中。
的默认表空间

-- 可以将tablespace2这个表空间分配给autumn这个用户来管理
ALTER USER autumn QUOTA UNLIMITED ON tablespace2;
-- 指定默认表空间
ALTER USER autumn DEFAULT TABLESPACE tablespace2;

总结

也就是说要先建PDB然后再建tablespace,然后再在pdb下建立local用户并把PDB下面的tablespace赋给local用户。

如果这篇文章对你有用,麻烦关注一下本人微信公众号~

Oracle-CDB&PDB_表空间_06