2013年7月29日 星期一

Oracle - ORA-01658 解決方式


話說上次從客戶那邊抓了基本資料要倒到自己的DB,
沒想到一直失敗,看了一下出現了 ORA-01658 的錯誤訊息!
是說我看不太懂這個意思是啥啦...

上網估狗了一下,應該是 TABLESPACE 滿了的意思,
不過我覺得很奇怪,明明我就是先刪除資料後再匯入,
這樣應該要有空間才是啊?怪~~~
算了,反正我覺得 ORACLE 怪也不是第一遭了~~~

用下面的查詢查一下空間

SELECT A.TABLESPACE_NAME, A.BYTES / 1024 / 1024 "Sum MB",
       (A.BYTES - B.BYTES) / 1024 / 1024 "used MB", B.BYTES / 1024 / 1024 "free MB",
       ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100, 2) "percent_used"
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
       FROM DBA_DATA_FILES
       GROUP BY TABLESPACE_NAME) A,
     (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES, MAX(BYTES) LARGEST
       FROM DBA_FREE_SPACE
       GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME

ORDER BY ((A.BYTES - B.BYTES) / A.BYTES) DESC

每個都是滿的,但是看上面的訊息,其實我應該是 INDEX 的 TABLESPACE 滿了吧!

 嗯~~~很棒!
安裝的時候我很聰明的覺得 200MB 應該是夠用了,沒想到滿了!

SELECT A.TABLESPACE_NAME, A.BYTES / 1024 / 1024 "Sum MB"
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
       FROM DBA_DATA_FILES

       GROUP BY TABLESPACE_NAME) A


而且我還沒讓他可以自動長大~~~~@@;a 幹的好!

SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE, INCREMENT_BY
FROM DBA_DATA_FILES

ORDER BY FILE_ID DESC;


看來解決方式只能另外再多加一個 INDEX 的 TABLESPACE 了,
然後這次不要自作聰明了,讓他可以自動長大~~~

ALTER TABLESPACE INDEX_NAME
ADD DATAFILE 'C:\APP\FRANKIE\ORADATA\TEST1\DATAFILE\O2_MF_INDE_NAME_.DBF'

SIZE 200M AUTOEXTEND ON MAXSIZE 1G;

調整完之後就變成 400 了!匯入資料也沒問題了~~~