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