我在Oracle上遇到以下错误:ORA-01536
有什么问题?
答案 0 :(得分:19)
在线文档包含一本书,其中包含所有错误消息的说明和解决方案。其中一些有点神秘,但它是开始的地方。 Find out more。
Anyhoo,这是ORA-01536的插图解决方案。
DBA创建一个新用户:
SQL> create user fox_in_socks identified by tweetlebeetle
2 default tablespace users quota 1M on users
3 /
User created.
SQL> grant create session, create table to fox_in_socks
2 /
Grant succeeded.
SQL>
在另一个会话中,我们的勇敢用户创建了一个表...
SQL> conn fox_in_socks/tweetlebeetle
Connected.
SQL> create table t23 (col1 varchar2(4000))
2 /
Table created.
SQL>
..做了一些工作......
SQL> begin
2 for i in 1..1000 loop
3 insert into t23 values (rpad('a', 4000, 'a'));
4 commit;
5 end loop;
6 end;
7 /
begin
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'USERS'
ORA-06512: at line 3
SQL>
嗯,哦!所以我们的用户去他们温和的DBA并要求更多的配额,他们得到:
SQL> alter user fox_in_socks
2 quota 10M on users
3 /
User altered.
SQL>
工作进展:
SQL> begin
2 for i in 1..1000 loop
3 insert into t23 values (rpad('a', 4000, 'a'));
4 commit;
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL>
如果用户是应用程序所有者,那么DBA可能已经决定给他们无限制的配额(特别是如果他们是唯一拥有该表空间权限的用户):
alter user fox_in_socks
quota unlimited on users
/
(在现实生活中,USERS表空间不太可能出现这种情况)。
用户可以使用适当的视图查看其当前配额:
SQL> select * from user_ts_quotas
2 /
TABLESPACE_NAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
------------------------------ ---------- ---------- ---------- ---------- ---
USERS 9437184 10485760 1152 1280 NO
SQL>
答案 1 :(得分:5)
原因:表空间中段所有者的空间配额已用尽,操作尝试在表空间中创建新的段范围。
操作:删除表空间中不必要的对象以回收空间,或者让特权用户为该段所有者增加此表空间的配额。