oracle自12c版本开始引入了多租户的特性,多了一个CDB和PDB的概念,简单理解我们在11g时代只有PDB(即库的概念),现在多了一层CDB(即容器的概念),每个CDB下可以包含多个PDB,所以我们在创建用户时也就有了公用用户和本地用户的区别,公用用户对应CDB,本地用户对应PDB。
oracle19c创建本地用户
19c中分为公用用户和本地用户,公用用户就是在CDB(即容器)下创建的用户,必须以C##开头;本地用户就是在PDB(即库)下创建的用户,这就和11g时的用户一样了。
如果你习惯使用oralce sql developer创建用户,一般会先连接sys用户,与11g都一致。
默认情况下直接创建的都是公用用户(必须以C##开头),想创建本地用户必须先切换至对应的库中并开启数据库,其实所有的操作都是要先切换库并开启。
查看库信息
show con_name pdbs;
如上图所示,CDB$ROOT是当前容器名称,ORCLPDB是一个PDB插接式数据库,安装后默认创建的一个,没有可自行创建。OPEN MODE为MOUNTED,代表还未开启。
创建表空间
1.切换库
alter session set container = ORCLPDB ;
2.开启库
startup;
注意,开启库的命令需要在sql plus下执行,其他命令可以在sql developer中执行。
这个时候你可以再次查看库信息,如上图所示,会看到只有一条PDB信息,并且OPEN MODE已经改为READ WRITE了。
3.创建表空间
--创建临时表空间
create temporary tablespace my_temp
tempfile 'C:\oracle19c\oradata\ORCL19C\orclpdb\my_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
--创建数据表空间
create tablespace my_data
logging
datafile 'C:\oracle19c\oradata\ORCL19C\orclpdb\my_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
这里没什么大变化,唯一值得注意的是现在oradata路径下多了一层PDB文件夹(…\orclpdb…),可以把PDB用户的表空间放在对应的PDB文件夹下,把公用用户的表空间放在公用目录(…\ORCL19C…)下。
创建本地用户
这个时候在sql developer中创建用户就是本地用户,并且可以选到对应PDB的表空间,也可以执行语句创建用户。
-- 创建用户
CREATE USER "mypdb" IDENTIFIED BY "mypdbpassword"
DEFAULT TABLESPACE "MY_DATA"
TEMPORARY TABLESPACE "MY_TEMP";
-- 授权
GRANT "DBA" TO "mypdb" ;
GRANT "CONNECT" TO "mypdb" ;
ALTER USER "mypdb" DEFAULT ROLE "DBA","CONNECT";
本地用户连接
一般配置sql developer连接时,我们选择SID,PDB用户配置服务名,即PDB库名称。
注意,数据库重启后默认PDB的OPEN MODE是MOUNTE状态,需要重新切换到指定PDB库并开启才能正常连接。