场景:
创建用户,在用户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
(
'',
'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 ;