什么是Oracle错误ORA-01536?

Gol*_*old -2 oracle

我在Oracle上遇到以下错误:ORA-01536

问题是什么?

APC*_*APC 19

在线文档包括一本书,其中包含所有错误消息的说明和解决方案.其中一些有点神秘,但它是开始的地方. 了解更多.

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>
Run Code Online (Sandbox Code Playgroud)

在另一个会话中,我们勇敢的用户创建了一个表...

SQL> conn fox_in_socks/tweetlebeetle
Connected.
SQL> create table t23 (col1 varchar2(4000))
  2  /

Table created.

SQL>
Run Code Online (Sandbox Code Playgroud)

..并做了一些工作....

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>
Run Code Online (Sandbox Code Playgroud)

嗯,哦!所以我们的用户去他们驯服的DBA并要求更多的配额,他们得到:

SQL> alter user fox_in_socks
  2      quota 10M on users
  3  /

User altered.

SQL>
Run Code Online (Sandbox Code Playgroud)

工作收益:

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>
Run Code Online (Sandbox Code Playgroud)

如果用户是应用程序所有者,那么DBA可能已决定为他们提供无限制的配额(特别是如果他们是唯一具有该表空间权限的用户):

alter user fox_in_socks
    quota unlimited on users
/
Run Code Online (Sandbox Code Playgroud)

(在现实生活中,USERS表空间不太可能出现这种情况).

用户可以使用适当的视图检查其当前配额:

SQL> select * from user_ts_quotas
  2  /

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
------------------------------ ---------- ---------- ---------- ---------- ---
USERS                             9437184   10485760       1152       1280 NO

SQL>
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 5

ORA-01536:表空间'字符串'超出空间配额

原因:表空间中段所有者的空间配额已用尽,操作尝试在表空间中创建新的段范围.

操作:在表空间中删除不必要的对象以回收空间,或者让特权用户为该段所有者增加此表空间的配额.