oracle 12c 创建表空间和用户

旧版本创建表空间和用户方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*分为四步 */
/*第1步:创建临时表空间 */
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

/*第2步:创建数据表空间 */
create tablespace user_data
logging
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

/*第3步:创建用户并指定表空间 */
create user username identified by password
default tablespace user_data
temporary tablespace user_temp;

/*第4步:给用户授予权限 */
grant connect,resource,dba to username;

Oracle 12c 中出现的问题

上面的方法在oracle 12c中创建会出现错误!
因为12c中有CDB和PDB。
默认的是CDB,而在CDB中创建用户会报 ORA-65096: 公用用户名或角色名无效 的错误。
而在用户名前面加上C## eg. c##username 又找不到表空间。
那是因为加上C##后会到PDB中找表空间,而刚刚创建的表空间是默认的CDB中创建的。
所以你需要到PDB中创建表空间,下面是切换CDB和PDB的方法。

show con_name; #查看当前session属于CDB还是PDB

结果像这样

con_name CDB$ROOT

说明是CDB,不然是PDB,CDB$ROOT这个名字记住切换回来用

select con_id,dbid,NAME,OPEN_MODE from v$pdbs; #查询pdb

alter session set container=ORCLPDB;#设置当前session

然后创建表空间,切换回来创建用户