Oracle PDB、CDB模式下创建表空间、用户和授权
Oracle PDB、CDB模式下创建表空间、用户和授权
一、Oracle11g及之前的数据库创建用户方式
1、创建表空间
语法:
create tablespace 表空间名称 datafile '表空间路径\文件名.dbf' size 初始大小m autoextend on next 增量 maxsize 最大值(unlimited为无限制);
案例:
create tablespace GPP datafile ‘/docker/oracle/data.dbf’ size 1000m autoextend on next 100m maxsize unlimited;
创建时,可以会遇到没有权限的问题,可以登录root账户,赋予oracle所安装用户的权限
2、在表空间内创建用户
语法:
create user 用户名称 identified by 密码 default tablespace 表空间;
案例:
create user gpp identified by gpp default tablespace GPP;
常见错误:
ORA-65096:invalid common user or role name,在Oracle19c中,用户名必须以C##或c##为前缀 (非热插拔模式)
3、给用户授权,connect,resource,dba分别三种不通操作权限,根据实际情况可以自行变更。
grant connect,resource to gpp;
grant dba to gpp;
二、关于PDB和CDB
Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
引用自CSDN https://blog.csdn.net/qq877507054/article/details/81209967
数据库实例就像一个USB设备一样,插在数据库上,如果需要迁移将变得非常简单。
1、CDB模式和PDB模式
cdb相当于操作系统,调用并管理各个pdb。pdb相当于真正提供业务需求的数据库实例。oracle 12c安装后只创建了cdb,需要自己生成相应的pdb。oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db.
CDB即直接在数据库上操作不支持插拔,PDB模式创建的数据库支持插拔,为了方便区分,CDB模式创建的用户必须以C##开头。
三、Oracle12C后续版本创建用户说明
如果用一种 的方式创建用户会出现ORA-65096: invalid common ``user
or
role ``name
错误,此错误是因为用户名称不符合规范,Oracle 12C开始引入了CDB与PDB的新特性。sqlplus / as sysdba命令默认登陆的是CDB数据库,而CDB数据库中要求所有新建用户用户名必须以c##开头,否则就会报以上错误,在PDB内创建用户则没有此要求。
1、使用CDB模式,用户名以C##开头
# 创建用户
create user C##用户名称 identified by 密码 default tablespace 表空间;
# 授权
grant connect,resource to C##用户名称;
grant dba to C##用户名称;
2、使用PDB创建
# 查询当前所在容器
SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;
# 查询所有容器
select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
===结果===
2 3586925310 PDB$SEED READ ONLY
3 1583096685 ORCLPDB1 READ WRITE
===结果===
# 切换容器 这里需要权限
alter session set container=ORCLPDB1;
#创建用户
create user rayfoo identified by password default tablespace RAYFOO;
# 此时又出现报错信息如下ORA-00959: tablespace 'RAYFOO' does not exist, Time: 0.075000s
原因是在CDB内创建用户分配表空间时,所分配的表空间必须在PDB和CDB中同时存在,否则会报错。如果是在PDB与CDB有相同表空间的情况下给CDB用户分配表空间,则会分配CDB的表空间,给用户PDB的表空间并不受影响。所以要在PDB内创建相同的表空间,然后再回CDB创建用户
# 重新创建表空间
create tablespace RAYFOO datafile '/opt/oracle/oradata/rayfoo_pdb.dbf' size 100m autoextend on next 100m maxsize 10g;
#重新创建用户
create user rayfoo identified by password default tablespace RAYFOO;
# 授权
grant connect,resource to rayfoo;
grant dba to rayfoo;
3、PDB模式用户登录的注意事项
使用PDB创建的用户连接时实例名是所在PDB的名称,上述例子中的即为ORCLPDB1