Oracle-CDB&PDB
原创
©著作权归作者所有:来自51CTO博客作者秋夜雨巷的原创作品,请联系作者获取转载授权,否则将追究法律责任
背景
Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,即数据库容器,PDB全称为Pluggable Database,即可插拔数据库。
当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
查看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;
登录PDB数据库
sqlplus autumnp1/orcl@127.0.0.1:1521/pdbautumn
用户类型
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用户进行授权
common用户即可登录pdb
新建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用户。
如果这篇文章对你有用,麻烦关注一下本人微信公众号~