resource角色对quota表空间限额的影响

前两天,看到论坛中有位兄弟说设置了用户对表空间的quota限额,但仍可以插入超过限额大小的数据量到表空间。

也是觉得很奇怪,那quota起什么作用?

用实验来说明:

1. 创建用户

SQL> create user res_user identified by user_123

default tablespace dcsopen_tbspace

quota 500K on dcsopen_tbspace;

grant create session, create table to res_user;

限定res_user用户在dcsopen_tbspace表空间中只能使用500K的容量。

2. 使用res_user账户登录

SQL> select * from user_ts_quotas;

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO

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

DCSOPEN_TBSPACE                         0     516096          0         63 NO

查看该用户可用最大容量为516096字节,大约500K。

3. 测试表空间可用容量

SQL> create table t as select * from all_objects where 1<>1;

创建一张表结构,用于测试。

SQL> insert into t select * from all_objects;

insert into t select * from all_objects

*

ERROR at line 1:

ORA-01536: space quota exceeded for tablespace ‘DCSOPEN_TBSPACE‘

向其中插入数据,报错ORA-01536: space quota exceeded for tablespace ‘DCSOPEN_TBSPACE‘,提示用户当前使用容量已超过对表空间的限额值因此拒绝执行插入。

4. 为用户授予resource权限

SQL> grant resource to res_user;

SQL> insert into t select * from all_objects;

未提示错误。

SQL> select * from user_ts_quotas;

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO

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

DCSOPEN_TBSPACE                   5242880     516096        640         63 NO

发现容量早已超过MAX_BYTES值。

查询此时用户拥有的角色:

SQL> select * from user_role_privs;

USERNAME                       GRANTED_ROLE                   ADM DEF OS_

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

RES_USER                       RESOURCE                             NO  YES NO

查询此时用户的系统权限:

SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                   ADM

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

RES_USER                       CREATE SESSION                           NO

RES_USER                       UNLIMITED TABLESPACE               NO

RES_USER                       CREATE TABLE                               NO

用户具有了UNLIMITED TABLESPACE的权限,即对表空间没有限额。

为了验证这点,可以revoke resource from res_user,再查询user_sys_privs,发现确实UNLIMITED
TABLESPACE权限是跟随RESOURCE角色的。

5. 可以不授予resource,但仍让用户具有无限容量权限

SQL> alter user
res_user quota unlimited on dcsopen_tbspace;

SQL> select * from
user_ts_quotas;

TABLESPACE_NAME
                    BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO

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

DCSOPEN_TBSPACE                   5242880         -1        640         -1 NO

-1表示无上限。

结论

1. 可以为用户指定使用某个表空间的限额,当使用容量超过限额,会提示错误。限额值可以用user_ts_quotas表查询。

2. 若为用户授予resource角色,则用户自动具有UNLIMITED TABLESPACE权限,即使用quota限额,也不受其控制。

时间: 2024-11-04 05:28:39

resource角色对quota表空间限额的影响的相关文章

[原创] ORA-01536 超出表空间 &#39;xxxx&#39; 的空间限额

1.故障情况 星期一上班一早,客户打电话来,说数据库空间满了.检查表空间情况,还有剩余,检查alert_XXX.log也未有报错. 软件方手工测试,执行插入数据时报错,如下: ORA-01536: 超出表空间 'xxxx' 的空间限额 2.故障解决 使用业务用户'AA'登陆数据库,查询业务用户'AA'对表空间'XXXX'的限额 select * from user_ts_quotes; max_bytes字段为“0”,说明限额用完了,需要调整 增大用户对表空间的读写限额,由原来的2.5G加大到5

ORA-01536: 超出表空间 &#39;tablespace_name&#39; 的空间限额

表空间限额问题知识总结:    表空间的大小与用户的配额大小是两种不同的概念    表空间的大小是指实际的用户表空间的大小,而配额大小指的是用户指定使用表空间的的大小    把表空间文件增大,还是出现这个问题,用户在使用表空间的同时使用空间的限额,如果超出    限制,    就算有空的地方,也不会让用户使用视图:    dba_ts_quotas  : DBA_TS_QUOTAS describes tablespace quotas for all users.    user_ts_quo

ORACLE-用户及表空间创建命令总结

博文说明[前言]: 本文将通过个人口吻介绍记录用户及表空间创建相关命令,在目前时间点[2017年5月16号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 正文: 一:创建表空间 此空间用用于数据存储[存储表.function.存储过程等,即存储数据结构以及真实数据,使用实际物理存储区域] 示例1:创建表空间和表空间初始数据文件 create tablespace xxxx_db d

Oracle 表空间详解

目录 目录 表空间概述 表空间的分类 默认表空间 查看默认的永久表空间 查看默认的TEMP表空间 查看默认的表空间类型 逻辑结构到物理结构的映射 对表空间的操作 查看表空间使用情况 查看数据库拥有的表空间 查看表空间中的数据文件 查看用户拥有的表空间 创建表空间 修改表空间 修改用户的默认和临时表空间 修改表空间的状态 修改表空间的数据文件 删除表空间 用户表空间限额 表空间概述 Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle

oracle表空间创建及管理

一.数据文件和数据库逻辑存储结构: 一个表空间包含一个或多个数据文件,一个表空间包含一个或多个段,一个段包含一个或多个区,一个区包含一个或多个连续的数据库块,一个数据库块包含一个或多个操作系统块.段是对象存储基本单元,段中的区总是在同一个表空间中,可以跨数据文件.区是空间分配的基本单元,连续的数据块,不能跨数据文件.块是I/O 的基本单元,不能跨数据文件. 表空间的分类永久表空间 存放永久性数据,如表,索引等.临时表空间 不能存放永久性对象,用于保存数据库排序,分组时产生的临时数据.UNDO表空

Ora-01536:超出了表空间users的空间限量(转)

Ora-01536:超出了表空间users的空间限量(转) 正在开会,同事跑过来说数据库有问题,通讯程序不能入库,赶快获取一条insert into a values()语句后在toad工具中手动插入,发现报错:Ora-01536:超出了表空间users的空间限量. 该表a的是用户A下的一个大表,表空是users,而非A用户的默认表空间.users表空间有大约70%的空闲空间,为什么a表就不能使用了呢?从网上搜索后终于明白: ora-1536 是指的你建表的那个user 所能使用的空间没有了,不

Oracle 11g常用管理命令(用户、表空间、权限)

PS:下面是Oracle 11g最常用的基本管理命令,包括创建用户.表空间,权限分配等.以下命令本人都验证操作过,并加上了本人的小结与说明. 1.启动oracle数据库: 从root切换到oracle用户进入: su - oracle 进入sqlplus环境,nolog参数表示不登录: sqlplus /nolog 以管理员模式登录: sqlplus / as sysdba 启动数据库 startup; 停止数据库 shutdown immediate 远程连接数据库 sqlplus /nolo

oracle imp导入库到指定表空间

1.创建表空间 create tablespace example_tablespace datafile 'e:\****.dbf' size 10m reuse autoextend on next 1m maxsize unlimited; 2.创建用户,指定表空间,临时表空间 create user username identified by password default tablespace usertablespace temporary tablespace temp; 3.

oracle 创建用户和imp指定表空间

创建用户: 1,sqlplus sys/pwd as sysdba; 2, create user username identified by password; 3, grant dba,connect,resource to username; 查看表空间使用情况: SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BY