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

posted @ 2020-08-16 11:00  张瑞丰  阅读(3639)  评论(0编辑  收藏  举报