【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程序員面試筆試寶典》,作者:李華榮。