ITPub博客

首页 > 数据治理 > 数据治理 > oracle quota 与无限表空间(UNLIMITED TABLESPACE)

oracle quota 与无限表空间(UNLIMITED TABLESPACE)

原创 数据治理 作者:tiny_cion 时间:2021-02-02 10:45:23 0 删除 编辑

注意如下创建语句并不能直接使用users表空间,因为没有quota:

create user xmc identified by xmc default tablespace users;


一、resource角色和quota


SQL>  select * from role_sys_privs where role='RESOURCE';


ROLE        PRIVILEGE ADM

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

RESOURCE        CREATE TRIGGER NO

RESOURCE        CREATE SEQUENCE NO

RESOURCE        CREATE TYPE NO

RESOURCE        CREATE PROCEDURE NO

RESOURCE        CREATE CLUSTER NO

RESOURCE        CREATE OPERATOR NO

RESOURCE        CREATE INDEXTYPE NO

RESOURCE        CREATE TABLE NO

虽然reource没有无限表空间权限,但是把resource角色赋予一个用户,它有unlimited tablespace的权限,

而赋予给另外一个角色role2,然后再把角色role2赋予用户t_user2,那么用户不会被赋予UNLIMITED 

TABLESPACE权限,注意如果我们把resource角色从用户收回,那么UNLIMITED TABLESPACE权限也会自动收回

实例:

create role role2;

grant resource to role2;

create user t_user2 identified by t_user;

grant role2,connect to t_user2;

SQL> select * from session_privs; 

PRIVILEGE

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

CREATE SESSION

CREATE TABLE

CREATE CLUSTER

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

CREATE TYPE

CREATE OPERATOR

CREATE INDEXTYPE

可以看到被赋予resource角色以后,自动拥有了UNLIMITED TABLESPACE权限PRIVILEGE

oracle表空间配额(quota)与UNLIMITED TABLESPACE系统权限


二、quota相关视图


1)dba_ts_quotas(查看所有用户的表空间配额)


BYTES字段表示用户已经使用的空间;MAX_BYTES如果为-1表示没有限制,其他值表示限制配额

注意只有用alter user user_name quota on tablespace_name;命令显示的调整过用户的空间配额,该视图中才会有记录,

否则该视图没有记录, 如果该视图没有信息,我们可以通过user_ts_quotas视图来了解用户的表空间限额信息


2)user_ts_quotas(查看当前用户表空间配额)

--注意可能有时我们查询该视图,用户在某个表空间的配额为0,但是我们依然可以使用该表空间,那么说明用户被

赋予了UNLIMITED TABLESPACE,因为UNLIMITED TABLESPACE的优先级高。

SQL> create user test1 identified by test1 default tablespace users quota 10m on users;

SQL> grant connect to test1;

SQL> grant select any dictionary to test1;

SQL> conn test1/test1

SQL> select * from user_ts_quotas;

TABLESPACE_NAME     BYTES  MAX_BYTES BLOCKS MAX_BLOCKS DRO

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

USERS 0   10485760       0       1280 NO


注:UNLIMITED TABLESPACE系统权限:此系统权限会覆盖所有的单个表空间限额,并向用户提供所有

表空间(包括SYSTEM和SYSAUX)的无限制限额

grant select any dictionary to test2;

SQL> select * from user_sys_privs;查看用户是否具有UNLIMITED TABLESPACE权限

USERNAME        PRIVILEGE ADM

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

TEST2        SELECT ANY DICTIONARY NO


三、配额管理


1)建用户时指定配额

SQL>create user test3 identified by test3 default tablespace users quota unlimited on users;

SQL> create user TEST2 identified by TEST2 default tablespace users temporary tablespace temp quota 

10m on users quota 10m on system;


注意temp表空间不支持表空间配额


2)更改用户表空间配额


grant unlimited tablespace to test2;--不对用户作配额限制


alter user test2 quota unlimited on users;--对指定表空间不做限额


alter user test2 quota 1000m on users;--指定用户在某表空间限制


revoke unlimited tablespace from java;--收回用户的unlimited tablespace权限


alter user test2 quota 0 on users;--针对alter user test2 quota unlimited on users;;


--如果用户已经被授予了unlimited tablespace权限的话,那么alter user java quota 0 on users;限制是不起作用的


四、表空间已删除,关于表空间配额信息还存在


表空间被删除以后但是关于该表空间的配额信息在视图中依然能够查到,这个是正常的,因为表空间被drop后,

ts$和tsq$中的信息并没有被清理,如果你重建一个同名的tablespace,并限制quota 为0,tsq$中的记录就被删除了.


可以使用

drop tablespace ts1 including contents and datafiles drop quota;

这样的语法,一并将quota信息删除,默认是keep quota.

实验1:

create tablespace ts1 datafile '/u01/app/oracle/oradata/xmc/ts01.dbf' size 10m;

create user tt identified by tt default tablespace ts1 quota 5m on ts1;

 grant connect,select any dictionary to tt;

conn tt/tt

select * from user_ts_quotas;

TABLESPACE_NAME     BYTES  MAX_BYTES BLOCKS MAX_BLOCKS DROPPED

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

TS1 0    5242880       0        640 NO


drop tablespace ts1;

conn tt/tt

select * from user_ts_quotas;

TABLESPACE_NAME     BYTES  MAX_BYTES BLOCKS MAX_BLOCKS DROPPED

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

TS1 0    5242880       0        640 YES


DROPPED VARCHAR2(3) Whether the tablespace has been dropped


实验2

SQL> drop tablespace ts1 including contents and datafiles drop quota;

SQL> conn tt/tt

Connected.

SQL> select * from user_ts_quotas;

no rows selected


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30654353/viewspace-2755330/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 11gr2 adg gap处理
请登录后发表评论 登录
全部评论

注册时间:2015-12-23

  • 博文量
    32
  • 访问量
    37530