Oracle用户表空间使用配额设置方法

作者:技术拾光

时间:2026-08-15

浏览:369

ORA-01950 错误的根本原因,是用户在目标表空间上没有可用配额,而不是系统权限不足。要解决该问题,必须使用 ALTER USER ... QUOTA 显式分配表空间配额;仅设置默认表空间、授予权限,或创建用户时未指定配额,都不能生效。同时,QUOTA 只对永久表空间有效。 必须通过 ALTER

文章目录

ORA-01950 错误的根本原因,是用户在目标表空间上没有可用配额,而不是系统权限不足。要解决该问题,必须使用 ALTER USER ... QUOTA 显式分配表空间配额;仅设置默认表空间、授予权限,或创建用户时未指定配额,都不能生效。同时,QUOTA 只对永久表空间有效。

Oracle用户表空间使用配额设置方法

必须通过 ALTER USER ... QUOTA 显式设置配额,其他方式如授予权限、设置默认表空间、建用户时不带配额,均不能替代表空间配额配置。

为什么执行 CREATE TABLE 会报 ORA-01950

这个问题本质上并不是没有授予建表权限,而是目标表空间没有配置配额。即使已经执行了 GRANT CREATE TABLE TO scott,只要 scott 在目标表空间,例如 USERS,没有获得对应配额,建表操作就无法成功。

错误信息中的 “no privileges on tablespace” 容易让人误以为是权限不足,但这里的 “privileges” 实际上指的是表空间配额,而不是系统权限。

常见误判包括:

  • 认为设置了 DEFAULT TABLESPACE USERS 就可以直接写入。实际上,它只是在未指定 TABLESPACE 子句时决定对象默认存放位置,并不等于赋予写入能力。
  • 认为 RESOURCE 角色自带表空间配额。实际上,该角色并不包含任何配额。
  • 查询 DBA_TS_QUOTAS 结果为空时,误以为会继承默认值。实际上,这通常表示未配置配额,效果等同于 QUOTA 0。

ALTER USER ... QUOTA 的三种合法取值

QUOTA 表示硬性上限,超过后会阻止相关 DDL 或 DML 操作,例如 INSERT 触发新 extent 分配时也会受限,它并不是建议值。

  • ALTER USER scott QUOTA 50M ON users;:将 users 表空间的使用上限严格限制为 50MB,达到上限后会报 ORA-01536。
  • ALTER USER scott QUOTA UNLIMITED ON app_data;:仅对 app_data 表空间取消容量限制,其他表空间仍需分别设置配额。
  • ALTER USER scott QUOTA 0 ON system;:显式禁止在 SYSTEM 表空间中创建任何段,即使拥有 DBA 角色也不能写入,但不会影响已存在对象。

需要注意的是,QUOTA 0 并不等于撤销权限,它只是阻止继续写入。如果要完全收回不受配额限制的权限,还需要执行 REVOKE UNLIMITED TABLESPACE FROM scott。

哪些表空间不支持 QUOTA

QUOTA 仅对永久性数据表空间,即 PERMANENT 类型表空间生效。对于以下两类表空间,配额设置无实际作用:

  • 临时表空间(TEMPORARY):排序操作和全局临时表会使用这里,相关配额语法即使可以执行,实际上也会被忽略。
  • 撤销表空间(UNDO):事务回滚段由系统自动管理,不纳入用户配额控制范围。

如果需要控制临时空间使用量,应通过 ALTER USER ... TEMPORARY TABLESPACE ts_name 指定资源受限的临时表空间,并结合 PROFILE 中的 RESOURCE_LIMIT 与 SESSIONS_PER_USER 进行约束。

创建用户时直接配置配额更稳妥

如果在用户创建完成后再补充执行 ALTER USER,容易出现遗漏,尤其是在应用初始化脚本紧随用户创建后立即执行的情况下,更容易触发 ORA-01950。

推荐写法如下(Oracle 12c+ 支持):

CREATE USER app_user IDENTIFIED BY pwd
DEFAULT TABLESPACE app_data
TEMPORARY TABLESPACE temp
QUOTA 200M ON app_data
QUOTA 50M ON idx_tbs
QUOTA 0 ON system;

这样配置后:

  • 用户默认在 app_data 表空间中写入对象,最大可用 200MB。
  • 用户可以显式指定 TABLESPACE idx_tbs 创建索引,但总量不能超过 50MB。
  • 即使具备 CREATE TABLE 权限,也不能在 SYSTEM 表空间中创建任何段。

还需注意,QUOTA 不会清理已存在对象,但后续 DML 一旦触发空间扩展,例如插入数据导致分配新的 extent,仍然可能因为超过配额限制而报错。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›