表空間用戶限額
正在開會,同事跑過來說數據庫有問題,通訊程序不能入庫,趕快獲取一條insert into a values()語句後在toad工具中手動插入,發現報錯:Ora-01536:超出了表空間users的空間限量。
該表a的是用戶A下的一個大表,表空是users,而非A用戶的默認表空間。users表空間有大約70%的空閒空間,爲什麼a表就不能使用了呢?從網上搜索後終於明白:
ora-1536 是指的你建表的那個user 所能使用的空間沒有了,不是那個表所在的tablespace 沒有free space 了。你需要做的是給那個user 對那個tablespace 有更多的space 可以使用。
解決辦法增大能夠使用的表空間數或授予無限制的使用權限
ALTER USER A QUOTA 50M ON users;
ALTER USER A QUOTA UNLIMITED ON users;
但爲什麼會出現這樣的問題呢,原來設計的時候用戶A,賦予DBA和resource權限,並沒有設置表空間限額。但現在怎麼會出現這麼多的空間限額呢?
會不會是上次更改用戶A的默認表空間造成的呀?
上次爲了數據庫便於維護,將用戶A的表從別的表空間移到了表空間中,然後更改表空間TS_A 爲用戶A的默認表空間
select 'alter table '||table_name||' move tablespace TS_A ;'
from user_tables
where tablespace_name='LEE_TEST' ;
alter user A DEFAULT TABLESPACE TS_A;
把用戶A下的表全部移到表空間TS_A下,但因爲a是一個比較大的表,所以沒有移動成功,a的表空間仍然是users;
估計跟這次操作有關係 ,改天進行測試。那天進行移動表的存儲空間時還造成索引無效的錯誤,看來這次操作帶來負面影響還是真不少。
創建一個用戶,分配了400M的表空間,結果在用到13.3M時報錯:
ORA-01536: 超出表空間 '***' 的空間限額
經查,表空間跟表空間限額兩個值是不一樣的.
推測按默認的話oracle應該會給每個用戶分配一個默認的表空間限額,具體比例待查,但這比例肯定遠小於100%.
所以說分配了400M的表空間未必能存儲400M的數據.
解決辦法如下:
查看用戶表空間的限額
select * from user_ts_quotas;
max_bytes字段就是了
-1是代表沒有限制,其它值多少就是多少了.
不對用戶做表空間限額控制:
GRANT UNLIMITED TABLESPACE TO ***(用戶);
這種方式是全局性的.
或者
alter user ***(用戶名) quota unlimited on ***(表空間);
這種方式是針對特定的表空間的.
可以分配自然也可以回收了:
revoke unlimited tablespace from ***(用戶)
或者
alter user *** quota 0 on ***
表空間的大小與用戶的配額大小是兩種不同的概念。表空間的大小是指實際的用戶表空間的大小,而配額大小指的是用戶指定使用表空間的的大小
把表空間文件增大,還是出現這個問題,用戶在使用表空間的同時使用空間的限額,如果超出限制,就算有空的地方,也不會讓用戶使用。
遇到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;
該表a的是用戶A下的一個大表,表空是users,而非A用戶的默認表空間。users表空間有大約70%的空閒空間,爲什麼a表就不能使用了呢?從網上搜索後終於明白:
ora-1536 是指的你建表的那個user 所能使用的空間沒有了,不是那個表所在的tablespace 沒有free space 了。你需要做的是給那個user 對那個tablespace 有更多的space 可以使用。
解決辦法增大能夠使用的表空間數或授予無限制的使用權限
ALTER USER A QUOTA 50M ON users;
ALTER USER A QUOTA UNLIMITED ON users;
但爲什麼會出現這樣的問題呢,原來設計的時候用戶A,賦予DBA和resource權限,並沒有設置表空間限額。但現在怎麼會出現這麼多的空間限額呢?
會不會是上次更改用戶A的默認表空間造成的呀?
上次爲了數據庫便於維護,將用戶A的表從別的表空間移到了表空間中,然後更改表空間TS_A 爲用戶A的默認表空間
select 'alter table '||table_name||' move tablespace TS_A ;'
from user_tables
where tablespace_name='LEE_TEST' ;
alter user A DEFAULT TABLESPACE TS_A;
把用戶A下的表全部移到表空間TS_A下,但因爲a是一個比較大的表,所以沒有移動成功,a的表空間仍然是users;
估計跟這次操作有關係 ,改天進行測試。那天進行移動表的存儲空間時還造成索引無效的錯誤,看來這次操作帶來負面影響還是真不少。
創建一個用戶,分配了400M的表空間,結果在用到13.3M時報錯:
ORA-01536: 超出表空間 '***' 的空間限額
經查,表空間跟表空間限額兩個值是不一樣的.
推測按默認的話oracle應該會給每個用戶分配一個默認的表空間限額,具體比例待查,但這比例肯定遠小於100%.
所以說分配了400M的表空間未必能存儲400M的數據.
解決辦法如下:
查看用戶表空間的限額
select * from user_ts_quotas;
max_bytes字段就是了
-1是代表沒有限制,其它值多少就是多少了.
不對用戶做表空間限額控制:
GRANT UNLIMITED TABLESPACE TO ***(用戶);
這種方式是全局性的.
或者
alter user ***(用戶名) quota unlimited on ***(表空間);
這種方式是針對特定的表空間的.
可以分配自然也可以回收了:
revoke unlimited tablespace from ***(用戶)
或者
alter user *** quota 0 on ***
表空間的大小與用戶的配額大小是兩種不同的概念。表空間的大小是指實際的用戶表空間的大小,而配額大小指的是用戶指定使用表空間的的大小
把表空間文件增大,還是出現這個問題,用戶在使用表空間的同時使用空間的限額,如果超出限制,就算有空的地方,也不會讓用戶使用。
遇到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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.