ORA-01950及oracle表空間配額(quota)

1、狀況說明html

建立用戶時只有connect角色及CREATE TABLE(爲用戶建立表的權限),INSERT ANY TABLE(向任意表中插入行的權限)兩個系統權限時,當在此用戶下建立表時會有報錯:ORA-01950: 對錶空間 'USERS' 無權限sql

2、針對此報錯解決方法數據庫

以sys用戶登錄數據庫,執行如下語句(對指定表空間不作限額):bash

alter user 數據庫用戶名quota unlimited on USERS;ide


3、事例分析狀況步驟:spa

一、查看事例用戶jktest已有角色與權限htm

受權:
grant connect,CREATE TABLE,INSERT ANY TABLE to jktest;

1.1 jktest有鏈接角色:
it

SYS@orcl>select * from dba_role_privs where grantee='JKTEST';
GRANTEE                  GRANTED_ROLE             ADM DEF
------------------------------ ------------------------------ --- ---
JKTEST                     CONNECT                 NO  YES

1.2 jktest擁有系統的權限以下:
table

SYS@orcl>select * from dba_sys_privs where grantee='JKTEST';
GRANTEE                  PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
JKTEST                   CREATE TABLE                              NO
JKTEST                   INSERT ANY TABLE                        NO


二、Oracle 用戶對錶空間配額quota操做說明(兩種方式說明以下)class

2.1 建立用戶時指定限額(指定用戶在某表空間限制)

sqlplus  / as sysdba
SQL> create user jktest identified by jktest default tablespace users temporary tablespace temp quota 10M on users;
User created.

查詢用戶配額的信息:
SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='JKTEST';
TABLESPACE_NAME   USERNAME  MAX_BYTES
------------------- ---------- ----------
USERS        JKTEST   10485760


2.2 更改用戶的表空間限額:

……不對用戶作表空間限額控制:
SQL> grant unlimited tablespace to jktest;
Grant succeeded.
這種方式是全局性的. 即修改用戶對全部表空間的配額。

……若是咱們想改某個具體的,即針對用戶的某個特定的表空間不作限額(對指定表空間不作限額),可使用以下SQL:
SQL> alter user jktest quota unlimited on USERS;
User altered.

……查看配額:
SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='JKTEST';
TABLESPACE_NAME         USERNAME  MAX_BYTES
------------------------------ ---------- ----------
USERS               JKTEST   -1
這時候max_bytes 爲-1,即不受限制。


三、回收用戶對錶空間的配額(一樣兩種方式):

3.1 全局:
SQL> revoke unlimited tablespace from jktest;
Revoke succeeded.

……在查看配額,已經沒有了相關信息:
SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='JKTEST';
no rows selected

3.2 針對某個特定的表空間:
SQL> alter user jktest quota 0 on users;
User altered.
--若是用戶已經被授予了unlimited tablespace權限的話,那麼alter user jktest quota 0 on users;限制是不起做用的
相關文章
相關標籤/搜索