現場(環境): CentOS 6.9 套件:Oracle 11GR2
原因:
RD今天在測試資料庫連線時發現有錯誤訊息產生。
也因為這個錯誤,造成Web Service完全無法連線。
那為什麼我們的資料庫會突然無法連線呢??
下圖為錯誤訊息。
處理方式:
這個問題看似很多錯誤,但其實關鍵都在一句話上。
ORA-01653: unable to extend table SYS.AUD$ by 1024 in tablespace SYSTEM
這邊很明顯的說到tablespace內已經無法增長了。
為什麼無法增長??
一般來說我們無法增長的是tablespace內的datafile。
那我們這邊就要先看到datafile的部份,空間大小是怎麼訂出來的?
Oracle 內預設的 db_block_size 是8K(最大可以調整到32K),
所以單一datafile的最大額度就是8K * 4194304 = 32G;一個datafile預設的上限就是32G。
當然這個大小適量就好,你太大就會拖慢讀寫速度。
一個Tablespace中最多可以擁有1024個datafile。
我們回過頭來看無法增長的原因,我們設定datafile有兩種方法
(1) 給定值大小,限制他只能用到多大,到了定值就錯誤
(已不超過單一datafile大小為主)。
(2) 給起始值大小,讓他自己增長到一個DBF的最大限度(預設是32G)。
兩種方式都有好有壞,
第一種方法用下去我們的檔案儲存再磁碟中會用連續寫入磁區的方式進行,
因為他已經把這個定值大小全部先佔用下來了,讀寫效能佳。
但因為並非自動增長,所以當datafile用滿了,就會出現這次的問題。
(SQL)>alter tablespace user add datafile size 500m;
第二種方法就是給他起始值的大小,後面讓他自己增長。
好處是他可以自己增長到32G,這期間你不用擔心他因為空間用滿而掛掉。
壞處是他的資料是以不連續的方式寫入磁區,讀寫效能較差。
(SQL)>alter tablespace users add datafile size 500m autoextend on maxsize unlimited;
如果有另外帶參數next ,就可以設定說我每次增長的量要多少,
沒有設的話會參照預設值進行自動增長的作業。
所以要用哪一種方是就得要自己斟酌,
當然如果你沒有太多時間管理資料庫,會建議你用第二種方式去處理比較省事。
後記:
當然也有可能是因為系統空間不同造成tablespace內的datafile無法增長,
這個也需要自己多都注意。
(本篇完)
參考網址:
https://my.oschina.net/u/135473/blog/377630
留言列表