因为 Oracle 12c 中引入了 CDP 和 PDB 的概念,就是在一个数据库实例中容纳多个数据库,因此与以前的版本就会有所不同了。最明显的,就是创建用户不同了。
容器数据库 CDB
每当用户登录的时候,在登录的会话中会有一个容器 container 的概念。如果我们用 sys 用户登录上去查看的话,会看到我们的容器列表:
select name,con_id,dbid from v$containers; |
在 sqlplus 12 中我们可以用 show con_name
来查看我们当前所处的容器,不过, sqlplus 11 是没有的,所以我们只能通过其他的方式了:
select SYS_CONTEXT('userenv','con_name') "container name", |
我们也可以查看我们的 PDB(Pluggable Database 可拔插数据库)
select pdb_name,status from dba_pdbs; |
PDB$SEED 是作为一个 PDB 的模板而存在的。
创建用户
当我们使用 sys 登录的时候,我们当前的会话实际上是处于 CDB$ROOT 这个容器中,这里只能是创建公共用户(对所有的 PDB 可用),但这总是会出现很多问题,所以我放弃这种方法了。
create user c##bill identified by bbbbb; |
必须加上 c##
。
我采用的是切换 PDB 的形式来添加算了:
alter session set container=ORCLPDB1 |
创建库
我们可以在建库的时候来建立好用户。
建库的时候,我们采用 PDB$SEED 来建立。
select name,con_id,dbid from v$containers; |
但这样登录还是不行的,我们会遇到
ORACLE only available to users with RESTRICTED SESSION privilege |
用 sys 登录:
alter session set container=bims |
这样就可以登录了。