侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Oracle ORA-01950:对表空间“XXX”没有权限

与晚风述往事
2021-11-05 / 0 评论 / 0 点赞 / 438 阅读 / 937 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-11-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

错误信息

【汉】ORA-01950:对表空间“XXX”没有权限

【英】ORA-01950:no privileges on tablespace 'string'

环境信息

操作系统 数据库版本 备注
CentOS 7 Oracle 11G

执行插入数据时报错。
image.png

Oracle在插入数据前,会有多项检查,其中就包括验证用户是否具有其表空间的使用额度。如果没有额度,则会抛出该错误。

Oracle有两种方式分配表空间的使用配额,分别是:

  • 授予用户UNLIMITED TABLESPACE
  • 分配表空间使用配额

将UNLIMITED TABLESPACE权限给到用户,则表示用户使用任何表空间没有任何限制。

而分配表空间额度,则需要指定表空间名。通常可以理解为将表空间的指定大小给到用户使用。

看过【故】后,我们就可以进行解决了。解决的流程还是先排查,然后再给出解决方法。

排查

首先查询TS用户具有的权限。

SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION 
FROM DBA_SYS_PRIVS 
WHERE GRANTEE='TS';

image.png
从上图看,证明用户TS的确没有UNLIMITED TABLESPACE权限。

然后再查询当前实例下的所有表空间额度分配情况

SELECT TABLESPACE_NAME,USERNAME,BYTES,MAX_BYTES,
BLOCKS,MAX_BLOCKS,DROPPED
FROM DBA_TS_QUOTAS

image.png
从上图看,证明TS用户没有任何额度分配。

解决

排查完后,我们就可以使用两种方法来解决。

个人建议使用此方法解决。

授权解决

授权

GRANT UNLIMITED TABLESPACE TO TS;

执行授权后,再次查看会发现TS用户已经有UNLIMITED TABLESPACE权限。
image.png

分配额度解决

分配1K大小使用空间

ALTER USER TS QUOTA 1K ON TEST_DATA;

分配完后,再次查看同样会发现TS用户已经有1K的表空间使用权限。
image.png

说明:
这里显示的最大8192byte,换算成KB后就是8K。看到这里可能会有疑惑,我自己限制了1KB,为啥会分配8KB呢?其实是因为在Oracle数据库中,最小单位是块,默认的块大小是8192,所以分配时会分配最小1个块。

至此,ORA-01950的错就解决了。

0

评论区