oracle表空间配额和unlimited tablespace权限

对于一个新建的用户,如果没有分配给unlimitedtablespace系统权限的用户,必须先给他们指定限额,之后他们才能在表空间中创建对象,限额可以是:

A、以兆字节或者千字节为单位的特定值

B、无限制的

限额是指定标空间中允许的空间容量,默认的情况下,用户在任何表空间中都是没有限额的,可以使用一下三个选项来为用户提供表空间限额:

A、无限制的:允许用户最大限度的使用表空间中的可用空间

B、值:用户可以使用的表空间,以千字节或者兆字节为单位。这并不能保证会为用户保留该空间。因此此值可能大于或小于表看三毛中的当前可用表空间

C、UNLIMITEDTABLESPACE系统权限:此系统权限会覆盖所有的单个表空间限额,并向用户提供所有表空间(包括SYSTEM和SYSAUX)的无限制限额(注:授予resource角色的时候也会授予此权限)

一定不要为用户提供system或sysaux表空间的限额。通常,只有sys和system用户才能在system或sysaux表空间中创建对象。

对于分配的临时表空间或临时还原表空间则不需要限额。

 

如果需要为一个用户指定一个限额,可以有两种方法:

1、在创建用户的时候指定限额:

CREATE USER ABCIDENTIFIED BY ABC

DEFAULTTABLESPACE TEST

TEMPORARYTABLESPACE TEMP

QUOTA 3M ON TEST;

2、在创建用户完成之后对用户限额进行指定:

CREATE USER BCDIDENTIFIED BY BCD

DEFAULTTABLESPACE TEST;

ALTER USER BCDQUOTA 3M ON TEST;

更改用户的表空间限额:

全局:

grant unlimitedtablespace to abc;

针对某个表空间:

alter user abcquota unlimited on test;

回收:

revoke unlimitedtablespace from abc;

alter user abcquota 0 on test;

 

在此需要注意两个概念:表空间不足和用户配额不足

这两着不是一个概念。表空间的大小是指实际的用户表空间的大小;配额大小是用户指定使用表空间的大小

二者的解决方法也不相同。配额问题的解决:alter user abcauota 2g on tablespace_name; 表空间不足的话就是扩展表空间或者增加数据文件了。

 

与表空间限额先关的数据字典:

dba_ts_quotas:DBA_TS_QUOTASdescribes tabelspace quotas for all users

user_ts_quotas:USER_TS_QUOTASdescribes tablespace quotas for the current user. This view does not displaythe USERNAME column;

在两个数据字典中,max_bytes字段就是表示表空间限额的值了,单位是B,其中-1代表没有限制,其他的值多少就是多少的限额了。

 

系统权限unlimited tablespace说明

在最后我们需要关于一个比较重要的权限做一个说明,这个系统权限就是UNLIMITEDTABLESPACE

unlimitedtablespace的特点:

1、系统权限unlimitedtablespace不能被授予role,只能被授予用户。也就是说,unlimitedtablespace系统权限不能包含在一个角色role中

2、unlimitedtablespace没有被包括在resource role和dba role中,但是unlimitedtablespace随着resource或者dba的授予而授予用户的。也就是说,如果将role角色授予了某个用户,那么这个用户将会拥有unlimitedtablespace系统权限

3、unlimitedtablespace不能伴随这resource被授予role而授予用户。也就是说加入resource角色被授予了role_test角色,然后把role_test授予了test用户,但是此时unlimitedtablespace没有被授予test用户

需要特别注意的是:当一个用户同时具有resource和dba角色时,当回收了dba角色后(revoke dba fromusername),该用户之前具有的unlimited tablespace系统权限同时回收了,即使该用户还具有有resource角色也同样会回收。这将导致该用户没有任何表空间的配额,不能再表空间做任何操作,而且实际验证在这种情况下,数据库不会有任何的告警日志,因此很难排查,只能从应用端去排查相应的报错。因此在回收dba角色后,一定要检查是否具有相应的unlimitedtablespace权限,或者重新针对相应的表空间修改配额,推荐针对相应的表空间修改配额,而不是授予unlimitedtablespace系统权限。

 

用户超过配额使用表空间一般会在告警日志中出现ORA-01536报错。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值