Oracle可以使用配额Quota)这个概念对用户所使用的表空间进行限制。如果不同用户共同使用同一个表空间,可以使用这种方法可以有效地限制每个用户对该表空间的使用。

可以使用视图USER_TS_QUOTAS视图获取用户对表空间的配额限制情况。

1.查看用户sec在相关表空间的配额使用情况
sys@ora10g> conn sec/sec
Connected.
col TABLESPACE_NAME for a15
sec@ora10g> select * from user_ts_quotas;

TABLESPACE_NAME      BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
--------------- ---------- ---------- ---------- ---------- ---
TBS_SEC_D                0          0          0          0 NO
TBS_SEC_I                0          0          0          0 NO
TBS_SEC_LOB              0          0          0          0 NO

2.调整sec用户在TBS_SEC_D表空间上的配额为无限大
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> alter user sec quota unlimited on tbs_sec_d;

User altered.

sys@ora10g> conn sec/sec
Connected.
sec@ora10g> select * from user_ts_quotas;

TABLESPACE_NAME      BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
--------------- ---------- ---------- ---------- ---------- ---
TBS_SEC_I                0          0          0          0 NO
TBS_SEC_LOB              0          0          0          0 NO
TBS_SEC_D                0         -1          0         -1 NO

这里字段MAX_BYTES内容为“-1”即表示配额为无限大。

3.模拟因配额不足导致ORA-01536错误
1)调整sec在tbs_sec_d表空间上的配额为1M。
sec@ora10g> conn / as sysdba
Connected.
sec@ora10g> alter user sec quota 1m on tbs_sec_d;

User altered.

sys@ora10g> conn sec/sec
Connected.
sec@ora10g> select * from user_ts_quotas;

TABLESPACE_NAME      BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
--------------- ---------- ---------- ---------- ---------- ---
TBS_SEC_I                0          0          0          0 NO
TBS_SEC_LOB              0          0          0          0 NO
TBS_SEC_D                0   10485760          0       1280 NO

2)创建表T,在数据量超过1M后“ORA-01536”错误得以现身
sec@ora10g> create table t as select * from all_objects;

Table created.

sec@ora10g> insert into t select * from t;
insert into t select * from t
            *
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'TBS_SEC_D'

4.用户表空间限额的创建与更改:

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

eg:
CREATE USER SKATE IDENTIFIED BY SKATE_PWD
DEFAULT TABLESPACE SKATE_TS
TEMPORARY TABLESPACE temp
QUOTA 3M ON SKATE_TS
PASSWORD EXPIRE;


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

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

GRANT UNLIMITED TABLESPACE TO skate; 
这种方式是全局性的. 
或者 
alter user skate quota unlimited on skate_ts; 
这种方式是针对特定的表空间的. 

3. 可以分配自然也可以回收了: 

revoke unlimited tablespace from skate;
或者 
alter user skate quota 0 on SKATE_TS;

表空间大小不足问题的解决:使用“ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file”命令向指定的数据增加表空间,根据具体的情况可以增加一个或多个表空间。

 

 

---


备注:本博文转载自--http://space.itpub.net/519536/viewspace-664347

                                    --http://blog.163.com/sunjava2@126/blog/static/28268625201111253621355/