1. 程式人生 > >Oracle異常:Caused by: java.sql.SQLException: ORA-01536: 超出表空間 '登入名' 的空間限額 (JPA儲存資料)

Oracle異常:Caused by: java.sql.SQLException: ORA-01536: 超出表空間 '登入名' 的空間限額 (JPA儲存資料)

原因: Oracle表空間為0,沒有分配空間記憶體.

解決辦法在程式碼框裡: 

1. 檢視使用者表空間的限額 
     select * from user_ts_quotas; 

max_bytes欄位就是了 
-1是代表沒有限制,其它值多少就是多少了. 

2. 不對使用者做表空間限額控制: 
       GRANT UNLIMITED TABLESPACE TO ***(使用者); 

  

----------------------------------------------------------------------------------------------------------------------
這種方式是全域性性的. 
或者 
  alter user ***(使用者名稱) quota unlimited on ***(表空間); 
  這種方式是針對特定的表空間的. 

可以分配自然也可以回收了: 
  revoke unlimited tablespace from ***(使用者) 
  或者 
    alter user *** quota 0 on ***

 

 ps:

表空間的大小與使用者的配額大小是兩種不同的概念。表空間的大小是指實際的使用者表空間的大小,而配額大小指的是使用者指定使用表空間的的大小

把表空間檔案增大,還是出現這個問題,使用者在使用表空間的同時使用空間的限額,如果超出限制,就算有空的地方,也不會讓使用者使用。

遇到ORA-01536錯誤,首先要檢視使用者的表空間的限額

   select * from dba_ts_quotas;

   select * from user_ts_quotas;

max_bytes欄位-1是代表沒有限制,其它值多少就是多少. 

dba_ts_quotas :描述所有使用者表空間的限額

user_ts_quotas :描述當前使用者表空間的限額。

如果查詢結果中max_bytes欄位不為
-1,修改為無限制或者指定的大小。 不對使用者做表空間限額控制: GRANT UNLIMITED TABLESPACE TOuser; 這種方式是全域性性的。 或者 alter user user quota unlimited on user_tablespace; 這種方式是針對特定的表空間的. 回收表空間限額控制: revoke unlimited tablespace from user; 或者 alter user user quota 0 on user_tablespace;