前言
之前工作中使用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;
已經可以正確創建用戶了!