Oracle19c创建表空间和用户(解决报错ORA-65048: error encountered when processing the current DDL statement in pluggable database ORCLPDB1等问题)
前言
之前工作中使用Oracle11g数据库较多,在使用Oracle19c数据库遇到了一些坑,对创建表空间和用户过程中遇到的一些问题进行记录。
创建表空间和数据文件
CREATE TABLESPACE TEST_DATA LOGGING DATAFILE 'TEST_DATAF.dbf' SIZE 500M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
CREATE TEMPORARY TABLESPACE TEST_TEMP TEMPFILE 'TEST_TEMPF.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL ;
CREATE TABLESPACE TEST_INDEX LOGGING DATAFILE 'TEST_INDEXF.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
创建用户
CREATE USER c##test PROFILE DEFAULT IDENTIFIED BY 11111111 DEFAULT TABLESPACE TEST_DATA TEMPORARY TABLESPACE TEST_TEMP ACCOUNT UNLOCK;
ALTER USER c##test QUOTA UNLIMITED ON TEST_DATA;
ALTER USER c##test QUOTA UNLIMITED ON TEST_INDEX;
GRANT CONNECT, resource TO c##test;
问题一
ORA-65096: invalid common user or role name
此错误是因为用户名称不符合规范,Oracle12C开始引入了CDB与PDB的新特性。sqlplus / as sysdba命令默认登陆的是CDB数据库,而CDB数据库中要求所有新建用户用户名必须以c##
开头,否则就会报以上错误,在PDB内创建用户则没有此要求。
解决方法:将图中用户名zhra6修改为c##zhra6
问题二
ORA-65048: error encountered when processing the current DDL statement in pluggable database ORCLPDB1
ORA-00959: tablespace 'ZHRA6_DATA' does not exist
原因是在CDB内创建用户分配表空间时,所分配的表空间必须在PDB和CDB中同时存在,否则会报错。如果是在PDB与CDB有相同表空间的情况下给CDB用户分配表空间,则会分配CDB的表空间,给用户PDB的表空间并不受影响。所以要在PDB内创建相同的表空间,然后再回CDB创建用户。
解决方法:
查询当前数据库名称show con_name
查询PDB数据库名称select name,open_mode from v$pdbs;
切换数据库alter session set container=ORCLPDB1;
在PDB中创建表空间与数据文件(注意数据文件不能与之前的重名)
CREATE TABLESPACE TEST_DATA LOGGING DATAFILE 'TEST_DATAF_1.dbf' SIZE 500M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
CREATE TEMPORARY TABLESPACE TEST_TEMP TEMPFILE 'TEST_TEMPF_1.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL ;
CREATE TABLESPACE TEST_INDEX LOGGING DATAFILE 'TEST_INDEXF_1.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
切换回CDB数据库alter session set container=CDB$ROOT;
已经可以正确创建用户了!