Oracle 使用者對錶空間配額quota說明

kakaxi9521發表於2017-04-12

一、解決問題:

解決表空間很大,總顯示空間不足的問題
ORA-01536:space   quota   exceeded   for   table   space   'AAA '
二、三個解決辦法:
        (1)   alter   user   USERNAME   quota   100M   on   TABLESPACENAME;
        (2)   alter   user   USERNAME   quota   unlimited   on   TABLESPACENAME;
        (3)   grant   unlimited   tablespace   to   USERNAME;
quota是為了限制使用者對錶空間的使用
比如你限制使用者a在tablespace   a中的quota為10m,當使用者a在tablespace   a中的資料量達到10m後,無論你的tablespace   a中有多少空間,a都無法再使用tablespace   a   了。
所以你需要
alter   user   a   quota   1000M   on   a;
alter   user   a   quota   unlimited   on   a;
grant   unlimited   tablespace   to   a
你可以查詢dba_ts_quotas來獲取相關資訊

二、Quota 說明

            配額大小指的是使用者指定使用表空間的的大小。在1.1 節裡提到,預設情況下,使用者對所有表空間都是沒有配額的,即不受空間的限制。 檢視幾個使用者的建立指令碼來驗證一下:

CREATE USER SYSTEM

  IDENTIFIED BY <password>

  DEFAULT TABLESPACE SYSTEM

  TEMPORARY TABLESPACE TEMP

  PROFILE DEFAULT

  ACCOUNT UNLOCK;

  -- 2 Roles for SYSTEM

  GRANT AQ_ADMINISTRATOR_ROLE TO SYSTEM WITH ADMIN OPTION;

  GRANT DBA TO SYSTEM WITH ADMIN OPTION;

  ALTER USER SYSTEM DEFAULT ROLE ALL;

  -- 5 System Privileges for SYSTEM

  GRANT GLOBAL QUERY REWRITE TO SYSTEM;

  GRANT CREATE MATERIALIZED VIEW TO SYSTEM;

  GRANT CREATE TABLE TO SYSTEM;

  GRANT UNLIMITED TABLESPACE TO SYSTEM WITH ADMIN OPTION;

  GRANT SELECT ANY TABLE TO SYSTEM;

CREATE USER DAVE

  IDENTIFIED BY <password>

  DEFAULT TABLESPACE USERS

  TEMPORARY TABLESPACE TEMP

  PROFILE DEFAULT

  ACCOUNT UNLOCK;

  -- 2 Roles for DAVE

  GRANT CONNECT TO DAVE;

  GRANT RESOURCE TO DAVE;

  ALTER USER DAVE DEFAULT ROLE ALL;

  -- 1 System Privilege for DAVE

  GRANT UNLIMITED TABLESPACE TO DAVE;

            從這2個指令碼來看,預設情況下,都會對使用者賦 unlimited tablespace 的許可權。這是是在建立的時候指定的,當我們的使用者建立好之後,我們也可以修改使用者的配額。

有關使用者的配額的操作說明

1. 建立使用者時,指定限額

SQL> conn / as sysdba;

Connected.

SQL> create user anqing identified by anqing default tablespace users temporary tablespace temp quota 10M on users;

User created.

查詢使用者配額的資訊:

SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='ANQING';< /FONT>

TABLESPACE_NAME      USERNAME    MAX_BYTES

------------------------------ ---------- ----------

USERS                    ANQING       10485760

2.更改使用者的表空間限額:

不對使用者做表空間限額控制:

SQL> grant unlimited tablespace to anqing;

Grant succeeded.

這種方式是全域性性的. 即修改使用者多所有表空間的配額。

如果我們想改某個具體的,即針對使用者的某個特定的表空間,可以使用如下SQL:

SQL> alter user anqing quota unlimited on users;

User altered.

檢視配額:

SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='ANQING';< /FONT>

TABLESPACE_NAME                USERNAME    MAX_BYTES

------------------------------ ---------- ----------

USERS                          ANQING             -1

這時候max_bytes 為-1,即不受限制。

3. 回收使用者對錶空間的配額:

同樣兩種方式,

全域性:

SQL> revoke unlimited tablespace from anqing;

Revoke succeeded.

在檢視配額,已經沒有了相關資訊:

SQL> select tablespace_name,username,max_bytes from  DBA_TS_QUOTAS where username='ANQING';< /FONT>

no rows selected

針對某個特定的表空間:

SQL> alter user anqing quota 0 on users;

User altered.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21374452/viewspace-2137072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章