修改了一个用户在某个表空间的磁盘份额为0,那么会发生什么

版本:
    操作系统:oracle_linux_5.6_32
    数据库:oracle_10.2.0.1 单实例

说明:
   本实验是模拟alter user username quota 0 on tablespace_name的一个实验,证明这条语句会
   发生什么事情。

模拟原因:
   昨天有同学问我,当修改某一个用户在某个表空间上的磁盘份额时,会对这个用户下的一张表有
   什么影响,是不能访问这个表呢、还是不能插入新行呢,又或者是不能分配新的区。于是我做了
   下面实验,证明了这个结果到底是什么。

实验步骤:
(1)
首先,创建一个表空间。
SQL> create tablespace zsx datafile '/u01/app/oracle/oradata/zsx/zsx01.dbf' size 30m;
Tablespace created.

(2)
创建一个用户,使这个用户的默认表空间是zsx。
SQL> create user zsx identified by zsx account unlock default tablespace zsx;
User created.

(3)
对这个用户进行授权,只给他登陆和建表的权限,为了模拟的精确性,不建议给更高的resource或者DBA权限。
SQL> grant create session,create any table to zsx;
Grant succeeded.

(4)
给这个用户在表空间的磁盘份额,稍微给小一点,为了稍后证明另一个问题。
SQL> alter user zsx quota 5m on zsx;
User altered.

(5)
用zsx用户登陆,并创建一张表,那么现在环境就模拟好了。
[oracle@zsx ~]$ sqlplus zsx/zsx

SQL> create table zsx (id number);
Table created.

(6)
现在表创建表了,我们就去将这个zsx用户在zsx表空间上的磁盘份额修改为0.
SQL>  alter user zsx quota 0 on zsx;
User altered.

(7)
证明结论1是否成立,看看到底能不能对这张表进行访问。
SQL> select * from zsx;
no rows selected

注意:
很显然是可以的,可以查询这张表,只不过我们没有数据而已,因为我们本身就没有添加数据在这张表中。
所以结论1是不成立的。

(8)
证明结论2是否成立,看看能不能向这张表中添加新的数据。
SQL> insert into zsx values(1);
1 row created.

SQL> commit;
Commit complete.

注意:
很显然是可以添加数据的,所以结论2也是不成立的。

(9)
证明结论3是否成立,看看能不能为这张表分配新的区。
SQL> alter table zsx allocate extent (size 64k);
alter table zsx allocate extent (size 64k)
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'ZSX'

注意:
这个时候结论就基本得出了,是不能为这个表再分配新的区的,报了很明显的空间配额的错误。
所以结论3是成立的。

(10)
针对结论1,其实不完全成立,说添加新数据可以,那只是在新数据较小的情况下可以,一旦
数据量过大,超过了原先分配的5m空间,那么依然会报错,如下:
SQL> begin
  2    for i in 1..10000
  3    loop 
  4      insert into zsx values(i);
  5    end loop;
  6  end;
  7  /
begin
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'ZSX'
ORA-06512: at line 4

注意:
这时候因为5m的空间已经用完,需要重新分配新的区,所以这里一样会报错的。



综上所述:
结论3是成立的,结论2是不成立的,而结论1在数据允许的情况下是成立的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29107230/viewspace-1062643/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29107230/viewspace-1062643/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值