ora-01536报错是用户表空间配额超限,非表空间无空闲空间;需查dba_ts_quotas,用alter user设置quota,注意大小写、连接用户、ddl指定表空间等常见问题。
ora-01536 报错说明:不是表空间没空间,而是用户没配额
遇到 ora-01536: space quota exceeded for tablespace 'users',第一反应别急着扩数据文件——先查 dba_ts_quotas。这个错误只表示当前用户在该表空间的配额用完了,和表空间本身剩余多少空间无关。哪怕 dba_free_space 显示还有 5gb 空闲,只要用户配额是 10mb 且已写满,照样报错。
ALTER USER ... QUOTA 的三种典型用法
给用户分配配额必须用 ALTER USER,不能靠加数据文件或开自动扩展解决:
-
ALTER USER scott QUOTA 500M ON users;—— 显式分配 500MB,适合有明确容量预期的场景 -
ALTER USER scott QUOTA UNLIMITED ON users;—— 解除配额限制,生产环境慎用,尤其对非 DBA 用户 -
ALTER USER scott QUOTA 0 ON users;—— 彻底禁止该用户在此表空间建对象,常用于隔离测试账号
注意:QUOTA 是按表空间粒度设置的,一个用户可在 users 有配额,在 example 没配额;GRANT UNLIMITED TABLESPACE 是系统权限,会覆盖所有表空间的配额设置,但需 DBA 授权,且无法被单个 QUOTA 0 覆盖。
为什么 ALTER USER 后还是插不进数据?常见漏点
执行完 ALTER USER 却仍报 ORA-01536,大概率踩了这几个坑:
- 目标表空间名大小写不一致:Oracle 在部分平台(如 Linux)下对表空间名大小写敏感,
USERS≠users,查dba_tablespaces确认实际名称 - 用户连的是另一个 schema:比如你改了
scott的配额,但应用连的是app_user,得查dba_users确认当前连接用户 - 配额生效有延迟:极少数情况下(如 RAC 环境节点同步滞后),需等几秒或执行
ALTER SYSTEM FLUSH SHARED_POOL(不推荐常规操作) - 对象创建指定了其他表空间:建表时写了
TABLESPACE example,但你只给users加了配额,得检查 DDL 或默认表空间设置
配额监控与日常巡检建议
配额问题往往在上线后才暴露,建议把以下查询加入例行检查脚本:
SELECT username, tablespace_name, bytes/1024/1024 AS quota_mb, max_bytes/1024/1024 AS max_quota_mb
FROM dba_ts_quotas
WHERE username NOT IN ('SYS','SYSTEM')
AND (max_bytes = -1 OR bytes >= max_bytes * 0.9);
其中 max_bytes = -1 表示 UNLIMITED,bytes >= max_bytes * 0.9 表示已用超 90%。另外,dba_users.default_tablespace 和 temporary_tablespace 也要一并核对,避免默认表空间配额为 0 导致隐性失败。











