Oracle 19c 创建 PDB 用户
参考:oracle19c sql developer创建本地用户(PDB用户)及配置连接
参考:oracle12c创建用户提示ORA-65096:公用用户名或角色无效
需求
使用 jeecg 的项目,需要导入 sql 到 oracle 数据库
导入 SQL 数据
用户\密码\表空间
JEECGBOOT\password\JEECGBOOT
oracle 的一些概念
🍄 表空间:逻辑概念,物理上是个文件
🍄 用户:类似 MySQL 的数据库
🍄 CDB:Contenter Database,即容器数据库。一个CDB可以有多个PDB。
🍄 PDB:pluggable Database,即可插拔数据库,可以实现从一个CDB拔出,插入到另一个CDB中。
🍄 公共用户:CDB 公共用户,CDB 公共用户必须以 C## 或 c## 开头,并且 Oracle 会在每个 PDB 中同时创建该用户。
🍄 本地用户:PDB 用户,本地用户在所在 PDB 中必须是唯一的。
oracle自12c版本开始引入了多租户的特性,多了一个CDB和PDB的概念,简单理解我们在11g时代只有PDB(即库的概念),现在多了一层CDB(即容器的概念),每个CDB下可以包含多个PDB,所以我们在创建用户时也就有了公用用户和本地用户的区别,公用用户对应CDB,本地用户对应PDB。
19c中分为公用用户和本地用户,公用用户就是在CDB(即容器)下创建的用户,必须以C##开头;本地用户就是在PDB(即库)下创建的用户,这就和11g时的用户一样了。
如果你习惯使用oralce sql developer创建用户,一般会先连接sys用户,与11g都一致。
默认情况下直接创建的都是公用用户(必须以C##开头),想创建本地用户必须先切换至对应的库中并开启数据库,其实所有的操作都是要先切换库并开启。
操作
查看库信息
show con_name pdbs;
查询结果
CON_NAME
------------------------------
CDB$ROOT
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB1 MOUNTED
CDB$ROOT 是当前容器名称,ORCLPDB1 是一个 PDB 插接式数据库,安装后默认创建的一个,没有可自行创建。OPEN MODE 为 MOUNTED,代表还未开启。
创建表空间
切换库
alter session set container = ORCLPDB;
开启库
startup;
SQL> show con_name pdbs;
CON_NAME
------------------------------
CDB$ROOT
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB1 READ WRITE NO
这个时候你可以再次查看库信息,如上图所示,会看到只有一条PDB信息,并且 OPEN MODE 已经改为 READ WRITE 了。
创建表空间
临时表空间使用已经有的:TEMP,不创建了。
create tablespace JEECGBOOT
logging
datafile '/opt/oracle/product/19c/dbhome_1/dbs/JEECGBOOT.dbf'
size 100m
autoextend on
next 100m maxsize 20480m
extent management local;
创建本地用户
创建用户
CREATE USER "JEECGBOOT" IDENTIFIED BY "password"
DEFAULT TABLESPACE "JEECGBOOT"
TEMPORARY TABLESPACE "TEMP";
授权
GRANT "DBA" TO "JEECGBOOT";
GRANT "CONNECT" TO "JEECGBOOT" ;
ALTER USER "JEECGBOOT" DEFAULT ROLE "DBA","CONNECT";
本地用户连接
数据库,ORCLPDB1
用户名,可以是:sys、system、或者后来自己新建的 JEECGBOOT
在左侧用户 JEECGBOOT ,右键打开模式,运行 SQL 文件