【DB笔试面试547】在Oracle中,什么是用户的表空间配额(User tablespace Quota)?

  • 2019 年 10 月 10 日
  • 筆記

题目部分

在Oracle中,什么是用户的表空间配额(User tablespace Quota)?

答案部分

用户的表空间配额也叫表空间限额,指的是用户可以使用指定表空间的最大大小。控制用户的表空间配额也就等于控制用户所占用的表空间大小。在默认情况下,需要对用户赋予RESOURCE角色,虽然该角色没有UNLIMITED TABLESPACE权限,但是对用户赋予了该角色后,系统将会默认给用户赋予UNLIMITED TABLESPACE的系统权限,因此,新建的用户对所有表空间都是没有配额的,即不受空间的限制。表空间配额可以在创建用户的时候指定,也可以在创建用户后再修改用户的配额。关于表空间配额需要注意以下几点:

① DBA用户是具有UNLIMITED TABLESPACE的权限的,若是回收DBA角色,则会导致UNLIMITED TABLESPACE权限被连带回收,易引起生产事故,所以,在回收DBA角色时需特别注意。

② 当用户使用空间超出限额的时候会报“ORA-01536”和“ORA-01950”的错误。

③ 目标用户必须不能含有UNLIMITED TABLESPACE的系统权限,否则空间配额对用户的设置无效,也就会出现在DBA_TS_QUOTAS中的BYTES大于MAX_BYTES的情况。

常用命令如下所示:

CREATE USER LHR_TS_QUOTAS IDENTIFIED BY LHR DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA 10M ON USERS; --USERS表空间限额10M  GRANT UNLIMITED TABLESPACE TO LHR_TS_QUOTAS;--修改用户LHR_TS_QUOTAS在任何表空间上都无配额限制  ALTER USER LHR_TS_QUOTAS QUOTA UNLIMITED ON USERS;--修改用户LHR_TS_QUOTAS无配额限制  ALTER USER LHR_TS_QUOTAS QUOTA 5M ON USERS;--修改用户在USERS表空间上为5M限额  SELECT TABLESPACE_NAME,USERNAME,MAX_BYTES FROM  DBA_TS_QUOTAS WHERE USERNAME='LHR_TS_QUOTAS';--查询用户的表空间限额  REVOKE UNLIMITED TABLESPACE FROM LHR_TS_QUOTAS;--回收无限制的表空间权限  ALTER USER LHR_TS_QUOTAS QUOTA 0 ON USERS;--执行这条语句后LHR_TS_QUOTAS用户在DBA_TS_QUOTAS视图中就查不到了  

测试示例如下所示:

SYS@orclasm > CREATE USER LHR_TS_QUOTAS IDENTIFIED BY LHR DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA 10M ON USERS;    User created.    SYS@orclasm > SELECT TABLESPACE_NAME,USERNAME,MAX_BYTES FROM  DBA_TS_QUOTAS WHERE USERNAME='LHR_TS_QUOTAS';    TABLESPACE_NAME                USERNAME                        MAX_BYTES  ------------------------------ ------------------------------ ----------  USERS                          LHR_TS_QUOTAS                    10485760    SYS@orclasm > ALTER USER LHR_TS_QUOTAS QUOTA UNLIMITED ON USERS;    User altered.    SYS@orclasm > SELECT TABLESPACE_NAME,USERNAME,MAX_BYTES FROM  DBA_TS_QUOTAS WHERE USERNAME='LHR_TS_QUOTAS';    TABLESPACE_NAME                USERNAME                        MAX_BYTES  ------------------------------ ------------------------------ ----------  USERS                          LHR_TS_QUOTAS                          -1    <--- -1表示没有空间配额限制    SYS@orclasm > ALTER USER LHR_TS_QUOTAS QUOTA 5M ON USERS;    User altered.    SYS@orclasm > SELECT TABLESPACE_NAME,USERNAME,MAX_BYTES FROM  DBA_TS_QUOTAS WHERE USERNAME='LHR_TS_QUOTAS';    TABLESPACE_NAME                USERNAME                        MAX_BYTES  ------------------------------ ------------------------------ ----------  USERS                          LHR_TS_QUOTAS                     5242880    SYS@orclasm > ALTER USER LHR_TS_QUOTAS QUOTA 0 ON USERS;    User altered.    SYS@orclasm > SELECT TABLESPACE_NAME,USERNAME,MAX_BYTES FROM  DBA_TS_QUOTAS WHERE USERNAME='LHR_TS_QUOTAS';    no rows selected  

& 说明:

有关表空间配额的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2140868/

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。