oracle12c CDB下创建用户表空间ORA-65096,ORA-65048,ORA-00959

完成目标:在oracle 12c下创建用户test_user,默认表空间为test_cdb

首先在cdb模式下新建表空间

SQL> create tablespace test_cdb datafile '/app/oracle/oradata/orcl/cdb_tbs_01.dbf' size 20m;

Tablespace created.

ok,这里创建成功,接下来创建用户test_user指定默认表空间为 test_cdb

SQL>  create user test_user identified by 123456 default tablespace test_cdb;
 create user test_user identified by 123456 default tablespace test_cdb
             *
ERROR at line 1:
ORA-65096: 公用用户名或角色名无效

嗯,不好意思,忘记用户名称前要加c##或者C##,12c与11g创建用户有所区别哦,12c如果在pdb下和11g创建用户命令一致,在cdb容器下创建用户要加c##,注意了哈,这里也给大家提个醒,嗯,再次修改执行

SQL> create user c##test_user identified by 123456 default tablespace test_cdb;
create user c##test_user identified by 123456 default tablespace test_cdb
*
ERROR at line 1:
ORA-65048: 在可插入数据库 PDB1 中处理当前 DDL 语句时出错 ORA-00959: 表空间
'TEST_CDB' 不存在

又报错,提示我的表空间不存在,不可能的啊,刚才明明创建成功,截图为证了,这里不要心急,不要慌,看ORA-65048的错误内容:【在可插入数据库pdb1

............出错】,查看官方文档,有段话这么说的:

While creating a common user, any default tablespace, temporary tablespace, or profile specified using the following clauses must exist in all the containers belonging to the CDB:

DEFAULT TABLESPACE
TEMPORARY TABLESPACE
QUOTA
PROFILE

If these objects do not exist in all the containers, the CREATE USER statement fails.

在CDB下给用户分配表空间时,此表空间必须在没有pdb的情况或者pdb下有相同表空间名称的时候才能成功

查看下我的pdb

SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB1 			  READ WRITE NO
	 4 PDB2 			  READ WRITE NO
SQL> 

2个pdb,本来偷懒打算在一个pdb下创建test_cdb表空间,但是还是报错,报错内容大意就是pdb2下没有test_cdb的表空间对象,后来在两个pdb都创建了才成功,代码如下

SQL> alter session set container=pdb1;    

Session altered.

SQL> create tablespace test_cdb datafile '/app/oracle/oradata/orcl/pdb_tbs_01.dbf' size 2m;

Tablespace created.

SQL> alter session set container=cdb$root; --回到CDB容器

Session altered.

SQL> create user c##test_user identified by 123456 default tablespace test_cdb;
create user c##test_user identified by 123456 default tablespace test_cdb
*
ERROR at line 1:
ORA-65048: 在可插入数据库 PDB2 中处理当前 DDL 语句时出错 ORA-00959: 表空间
'TEST_CDB' 不存在


SQL> alter session set container=pdb2;

Session altered.

SQL> create tablespace test_cdb datafile '/app/oracle/oradata/orcl/pdb2_tbs_01.dbf' size 2m;

Tablespace created.

SQL> alter session set container=cdb$root;--回到CDB容器

Session altered.

SQL> create user c##test_user identified by 123456 default tablespace test_cdb;

User created.

总结:如果各位小伙伴也使用了ORACLE 12C,而且PDB非常多的情况下就不要在CDB下指定自己创建的表空间了,使用系统表空间比较好,而且在CDB容器下创建的用户属于公有用户,视情况而定

祝愿每天进步一点点

你可能感兴趣的:(oracle)