【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程序员面试笔试宝典》,作者:李华荣。