oracle表空間配額(quota)與UNLIMITED TABLESPACE系統權限
漁夫數據庫筆記 2014-05-20 21:13:28
分類專欄: ORACLE數據庫 文章標簽: quota dba_ts_quotas 表空間配額 UNLIMITED TABLESPACE
一:quota相關視圖
1)dba_ts_quotas(查看所有用戶的表空間配額)
BYTES字段表示用戶已經使用的空間;MAX_BYTES如果為-1表示沒有限制,其他值表示限制配額
--只有用alter user user_name quota on tablespace_name;命令顯示的調整過用戶的空間配額,該視圖中才會有記錄,否則該視圖沒有記錄
--如果該視圖沒有信息,我們可以通過user_ts_quotas視圖來了解用戶的表空間限額信息
- user_ts_quotas(查看當前用戶表空間配額)
--注意可能有時我們查詢該視圖,用戶在某個表空間的配額為0,但是我們依然可以使用該表空間,那么說明用戶被賦予了UNLIMITED TABLESPACE。
注:UNLIMITED TABLESPACE系統權限:此系統權限會覆蓋所有的單個表空間限額,並向用戶提供所有表空間(包括SYSTEM和SYSAUX)的無限制限額(注:授予resource角色的時候也會授予此權限)
--SQL> select *from user_sys_privs;查看用戶是否具有UNLIMITED TABLESPACE權限
二:resource角色和quota
注意resource角色被賦予用戶時,用戶就自動被賦予了UNLIMITED TABLESPACE權限(雖然resource中並不包含該權限)如果我們把resource角色從用戶收回,那么UNLIMITED TABLESPACE權限也會自動收回
注意如果你把resource角色賦予另外一個角色a,然后再把角色a賦予用戶,那么用戶不會被賦予UNLIMITED TABLESPACE權限
SQL> select * from role_sys_privs where role='RESOURCE'; >>resource角色中並不包含UNLIMITED TABLESPACE權限
ROLE PRIVILEGE ADM
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE INDEXTYPE NO
SQL> grant connect,resource to test1;
SQL> conn test1/oracle1234;
SQL> select * from session_privs; >>可以看到被賦予resource角色以后,自動擁有了UNLIMITED TABLESPACE權限
PRIVILEGE
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
三:配額管理
1)建用戶時指定配額
SQL> create user java identified by oracle default tablespace users temporary tablespace temp quota 100m on users quota 100m on system;
--注意temp表空間不支持表空間配額
2)更改用戶表空間配額
grant unlimited tablespace to java;--不對用戶作配額限制
alter user java quota unlimited on users;--對指定表空間不做限額
alter user java quota 1000m on users;--指定用戶在某表空間限制
revoke unlimited tablespace from java;--收回用戶的unlimited tablespace權限
alter user java quota 0 on users;--針對alter … quota unlimited …;
--如果用戶已經被授予了unlimited tablespace權限的話,那么alter user java quota 0 on users;限制是不起作用的
四:表空間已刪除,關於表空間配額信息還存在
表空間被刪除以后但是關於該表空間的配額信息在視圖中依然能夠查到
這個是正常的,因為表空間被drop后,ts$和tsq$中的信息並沒有被清理,如果你重建一個同名的tablespace,並限制quota 為0,tsq$中的記錄就被刪除了.
從10gR2開始,你可以使用
drop tablespace mytsincluding contents and datafiles drop quota;
這樣的語法,一並將quota信息刪除,默認是keep quota.
trace的時候你會發現,如果加上drop quota這樣的options clause,那么就會有
select user# from tsq$ wherets#=:1
delete from tsq$ where ts#=:1and user#=:2
...
這樣的動作.而dba_ts_quotas視圖的定義正是使用了tsq$中的信息
create or replace viewsys.dba_ts_quotas
(tablespace_name, username, bytes, max_bytes, blocks, max_blocks, dropped)
as
select ts.name, u.name, nvl(spc.bytes, 0),
decode(q.maxblocks, -1, -1, q.maxblocks *ts.blocksize),
nvl(spc.blocks, 0), q.maxblocks, decode(ts.online$,3, 'YES', 'NO')
from sys.tsq$ q, sys.ts$ ts, sys.tbs_space_usagespc, sys.user$ u
where q.ts# = ts.ts#
and q.user# = u.user#
and spc.tsn = ts.ts#
and spc.owner = u.name
and q.maxblocks != 0
本文出自 “技術” 博客,請務必保留此出處http://589985.blog.51cto.com/1609992/1336658