1. 错误场景:

今天在测试一个功能的时候遇到了ORA-01536错误,具体如下
SQL> create table t_row_col_change (n number, str varchar2(100));
create table t_row_col_change (n number, str varchar2(100))
*
第 1 行出现错误:
ORA-01536: 超出表空间 'USERS' 的空间限额
2. 解决过程:
开始以为是表空间不够用了,看了下,的确USERS表空间下只剩下2%不到的空间了,于是新建了一个数据文件增加表空间,可是再次运行还是一样的ORA-01536;
google了一把,发现正确的解决方法如下,找一个DBA用户,运行下面这句SQL
SQL> alter user hetaoblog quota 400m on USERS;
用户已更改。
将hetaoblog在USERS表空间上的限额去掉;
注:
a. 之前运行create table这句SQL的用户是hetaoblog, 这个要替换成你直接的数据库用户名;
b. 前面create table没有指定表空间,所以默认在USERS表空间创建,如果你提示的错误是其他表空间,这里也要换成对应的表空间;
3.详细分析:
a. 表空间限额和表空间不够是两回事,所以通过增加表空间不直接解决问题;
b. 我在开发环境下,所以直接将限制去掉了;如果你要设置实际的大小,那你可以设置需要的大小如下:
alter user hetaoblog quota 200M on USERS;
c. 要查看实际对应的用户的表空间限制,就运行下面这句SQL查询所在表空间上对应的MAX_BYTES,如果是-1就表示没有限制
select * from user_ts_quotas;
select * from dba_ts_quotas
d. 如果要对所有表空间设取消的限制的话,可以运行下面这句SQL
grant unlimited tablespace to hetaoblog;
让hetaoblog在所有的表空间上都没有限制;
e. 如果要收回限制的话,可以运行下面两句中的之一
SQL> alter user hetaoblog quota 0 on USERS;
用户已更改。
SQL> revoke unlimited tablespace from hetaoblog;
撤销成功。