Oracle 用户对表空间配额quota说明

2014-11-24 18:15:01 · 作者: · 浏览: 0

一、解决问题:


解决表空间很大,总显示空间不足的问题
ORA-01536:space quota exceeded for table space 'AAA '
二、三个解决办法:
(1) alter user USERNAME quota 100M on TABLESPACENAME;
(2) alter user USERNAME quota unlimited on TABLESPACENAME;
(3) grant unlimited tablespace to USERNAME;
quota是为了限制用户对表空间的使用
比如你限制用户a在tablespace a中的quota为10m,当用户a在tablespace a中的数据量达到10m后,无论你的tablespace a中有多少空间,a都无法再使用tablespace a 了。
所以你需要
alter user a quota 1000M on a;
alter user a quota unlimited on a;
grant unlimited tablespace to a
你可以查询dba_ts_quotas来获取相关信息


二、Quota 说明


配额大小指的是用户指定使用表空间的的大小。在1.1 节里提到,默认情况下,用户对所有表空间都是没有配额的,即不受空间的限制。 查看几个用户的创建脚本来验证一下:


CREATE USER SYSTEM


IDENTIFIED BY


DEFAULT TABLESPACE SYSTEM


TEMPORARY TABLESPACE TEMP


PROFILE DEFAULT


ACCOUNT UNLOCK;


-- 2 Roles for SYSTEM


GRANT AQ_ADMINISTRATOR_ROLE TO SYSTEM WITH ADMIN OPTION;


GRANT DBA TO SYSTEM WITH ADMIN OPTION;


ALTER USER SYSTEM DEFAULT ROLE ALL;


-- 5 System Privileges for SYSTEM


GRANT GLOBAL QUERY REWRITE TO SYSTEM;


GRANT CREATE MATERIALIZED VIEW TO SYSTEM;


GRANT CREATE TABLE TO SYSTEM;


GRANT UNLIMITED TABLESPACE TO SYSTEM WITH ADMIN OPTION;


GRANT SELECT ANY TABLE TO SYSTEM;


CREATE USER DAVE


IDENTIFIED BY


DEFAULT TABLESPACE USERS


TEMPORARY TABLESPACE TEMP


PROFILE DEFAULT


ACCOUNT UNLOCK;


-- 2 Roles for DAVE


GRANT CONNECT TO DAVE;


GRANT RESOURCE TO DAVE;


ALTER USER DAVE DEFAULT ROLE ALL;


-- 1 System Privilege for DAVE


GRANT UNLIMITED TABLESPACE TO DAVE;


从这2个脚本来看,默认情况下,都会对用户赋 unlimited tablespace 的权限。这是是在创建的时候指定的,当我们的用户创建好之后,我们也可以修改用户的配额。


有关用户的配额的操作说明


1. 创建用户时,指定限额


SQL> conn / as sysdba;


Connected.


SQL> create user anqing identified by anqing 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='ANQING';


TABLESPACE_NAME USERNAME MAX_BYTES


------------------------------ ---------- ----------


USERS ANQING 10485760


2.更改用户的表空间限额:


不对用户做表空间限额控制:


SQL> grant unlimited tablespace to anqing;


Grant succeeded.


这种方式是全局性的. 即修改用户多所有表空间的配额。


如果我们想改某个具体的,即针对用户的某个特定的表空间,可以使用如下SQL:


SQL> alter user anqing quota unlimited on users;


User altered.


查看配额:


SQL> select tablespace_name,username,max_bytes from DBA_TS_QUOTAS where username='ANQING';


TABLESPACE_NAME USERNAME MAX_BYTES


------------------------------ ---------- ----------


USERS ANQING -1


这时候max_bytes 为-1,即不受限制。


3. 回收用户对表空间的配额:


同样两种方式,


全局:


SQL> revoke unlimited tablespace from anqing;


Revoke succeeded.


在查看配额,已经没有了相关信息:


SQL> select tablespace_name,username,max_bytes from DBA_TS_QUOTAS where username='ANQING';


no rows selected


针对某个特定的表空间:


SQL> alter user anqing quota 0 on users;


User altered.