天天看點

關于對USER_TS_QUOTAS視圖和表空間權限的研究

    起因是前兩天遇到一個使用人員的回報,他提到了在資料庫裡面建表報空間無法擴充的錯誤,經過檢視是表空間還剩餘300多M的剩餘表空間,同時系統比較繁忙可能存在查詢、排序、子查詢等操作,因為造成無法完成建立表的操作,另外使用人員又反應在user_ts_quotas系統視圖當中發現了自己使用的帳戶的預設表空間也在裡面,問是不是對表空間使用有限制?

關于對USER_TS_QUOTAS視圖和表空間權限的研究

    因為我檢視了該帳戶具有resource的角色,因為之前對這個視圖還不甚了解,于是想是不是賦予了resource的角色後又被管理者收回了unlimited tablespace的權限,沒怎麼想就重新給賦予了一次resource角色。但是想了想又不對,因為這有可能會改變之前的權限設定,于是跟局方說明了情況,局方讓我立刻恢複使用者原來的權限,這個時候我也有點思路不清晰,之前該帳戶具有那些表空間的使用權限呢,這該怎麼查?想想還是先從user_ts_quotas着手,于是先從oracle的文檔裡面進行查找, 找到了字段解釋 SQL> desc user_ts_quotas

Name

----------------------- TABLESPACE_NAME  => 表空間名稱

BYTES            => 使用者在該表空間使用的大小

MAX_BYTES        => 對使用者在該表空間使用的大小限制

BLOCKS           => 使用者在該表空間使用的資料塊數量

MAX_BLOCKS       => 對使用者在該表空間使用的資料塊數量限制

DROPPED          => 表空間是否被删除     同樣的,另外一個視圖DBA_TS_QUOTAS多了一個username字段,但是這裡需要說明的是這兩個視圖查詢出來的結果并不一緻,因為我隻有dba權限,而沒有該試用人員反應的帳戶的通路權限,是以給我造成了困惑,因為我通過dba_ts_quotas并沒有看到該使用者的資訊,在本機上做如下測試: SQL> select tablespace_name,bytes,max_bytes,blocks,max_blocks,dropped from dba_ts_quotas where username='SCOTT';

no rows selected

SQL> conn scott/tiger

SQL> select tablespace_name,bytes,max_bytes,blocks,max_blocks,dropped from user_ts_quotas;

no rows selected

    同樣也沒有看到,這表明是SCOTT這個使用者并沒有進行表空間配額的限制,由于使用人員發來的視圖max_bytes是0的值,經過一番測試發現了其中的原委: 1.具有unlimited tablespace權限的情況下,任何在unlimited tablespace賦予之前或者之後發出的alter user xxx quota n on tablespace_name都會被忽略,使用者具有任意表空間的使用權限; 2.當撤銷了unlimited tablespace權限後,隻有使用alter user xxx quota [n/unlimited] on tablespace_name的方式來給某個使用者授予某些表空間的使用權限,除此之外還可以使用指令 alter user xxx default tablespace xxxx來為某個使用者指定一個預設表空間,如無上述其他權限,則該使用者隻具備預設表空間的使用權限,同時這個預設表空間也不會出現在user_ts_quotas視圖中; 3.隻要發出了alter user xxx quota n on tablespace_name指令都會記錄發user_ts_quotas視圖當中,不管n是0還是其它數值,但是隻有當n=0時在dba_ts_quotas當中看不到記錄,非零值才會記錄到該視圖當中(0值表示在該表空間上無空間配額)。 4.關于DROPED字段的含義是這樣的:當表空間被删除,user_ts_quotas也會顯示出來,例如 TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO ------------------------------ ---------- ---------- ---------- ---------- --- TEST                                    0          0          0          0 YES SYSTEM                                  0          0          0          0 NO USERS                            20119552          0       2456          0 NO EXAMPLE                                 0          0          0          0 NO     當删除了TEST表空間後,dropped的值是yes,在沒有unlimited tablespace權限的情況下,當重新建立了TEST表空間後可以發現這個限制就會發揮作用,即無法在TEST表空間下建立,即使将使用者的預設表空間設為test表空間,配額限制依然生效。  通過以上測試,已經清楚了,生産庫的此使用者應該具備了unlimited tablespace 權限,是以我所做的grant resource to xxx 并沒有對該使用者産生影響,至此給局方進行了解釋之後,問題得到解決。   來源:http://space.itpub.net/12216142/viewspace-704795