場景:
創建用戶,在用戶scheme下新建了一張表,插入數據時報錯 ORA-01950: 對表空間 'xxx'無權限
創建用戶
/*第1步:創建臨時表空間 */ create temporary tablespace odi_temp tempfile 'C:\app\ORACLE\oradata\orcl\odi_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /*第2步:創建數據表空間 */ create tablespace odi_data logging datafile 'C:\app\ORACLE\oradata\orcl\odi_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /*第3步:創建用戶並指定表空間 */ create user sakila identified by sakila default tablespace odi_data temporary tablespace odi_temp profile default ; /*第4步:給用戶授予權限 */ grant connect,resource to sakila;
創建表
CREATE TABLE actor ( actor_id numeric NOT NULL , first_name VARCHAR(45) NOT NULL, last_name VARCHAR(45) NOT NULL, last_update DATE NOT NULL, PRIMARY KEY (actor_id) );
插入數據時報錯
INSERT INTO actor ( actor_id, first_name, last_name, last_update ) VALUES ( '1', 'PENELOPE', 'GUINESS', '2006-02-15 04:34:33.000' );
報錯信息:
ORA-01950: 對表空間 'ODI_DATA' 無權限
ORA-01950: no privileges on tablespace 'ODI_DATA'
原因:
沒有分配表空間配額:
配額(quota):允許被使用的空間。用戶可以在表空間上可以使用的空間。
解決辦法:
使用sys用戶添加用戶在表空間上的配額,
alter user SAKILA quota unlimited on odi_data;
這個問題如果在創建用戶時,給該用戶授予表空間配額可以避免。下面的紅色部分
參照 http://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503
/* 創建用戶並指定表空間 */ create user username identified by password default tablespace user_data temporary tablespace user_temp
quota unlimited on user_data profile default ;