烦恼一般都是想太多了。

0%

Oracle12c中创建库与用户

因为 Oracle 12c 中引入了 CDP 和 PDB 的概念,就是在一个数据库实例中容纳多个数据库,因此与以前的版本就会有所不同了。最明显的,就是创建用户不同了。

容器数据库 CDB

每当用户登录的时候,在登录的会话中会有一个容器 container 的概念。如果我们用 sys 用户登录上去查看的话,会看到我们的容器列表:

select name,con_id,dbid from v$containers;
CDB$ROOT 1 2809435516
PDB$SEED 2 361560979
ORCLPDB1 3 920661185

在 sqlplus 12 中我们可以用 show con_name 来查看我们当前所处的容器,不过, sqlplus 11 是没有的,所以我们只能通过其他的方式了:

select SYS_CONTEXT('userenv','con_name') "container name",
SYS_CONTEXT('userenv','con_id') "container id",
SYS_CONTEXT('userenv','CURRENT_SCHEMA') "Current schema",
SYS_CONTEXT('userenv','SID') "SID"
FROM DUAL;

CDB$ROOT 1 SYS 620

我们也可以查看我们的 PDB(Pluggable Database 可拔插数据库)

select pdb_name,status from dba_pdbs;
PDB$SEED NORMAL 2
ORCLPDB1 NORMAL 3

PDB$SEED 是作为一个 PDB 的模板而存在的。

创建用户

当我们使用 sys 登录的时候,我们当前的会话实际上是处于 CDB$ROOT 这个容器中,这里只能是创建公共用户(对所有的 PDB 可用),但这总是会出现很多问题,所以我放弃这种方法了。

create user c##bill identified by bbbbb;

必须加上 c##

我采用的是切换 PDB 的形式来添加算了:

alter session set container=ORCLPDB1
create user bill identified by bbbbb;

创建库

我们可以在建库的时候来建立好用户。
建库的时候,我们采用 PDB$SEED 来建立。

select name,con_id,dbid from v$containers;
CDB$ROOT 1 2809435516
PDB$SEED 2 361560979
ORCLPDB1 3 920661185


select name from v$datafile where con_id=2;
/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf

create pluggable database bims admin user bill identified by "bbbbbb"
default tablespace bims_ts
file_name_convert=('/opt/oracle/oradata/ORCLCDB/pdbseed/','/opt/oracle/oradata/ORCLCDB/bims/');

-- 打开
alter pluggable database bims open;

但这样登录还是不行的,我们会遇到

ORACLE only available to users with RESTRICTED SESSION privilege

用 sys 登录:

alter session set container=bims
grant restricted session to bill;

这样就可以登录了。

完毕