問題描述
在向orale資料庫匯入資料的時候報 ORA-01658: 無法為資料表空間 XXX中的段建立 INITIAL 區錯誤。
這是由於資料表空間對應的資料檔案中資料量超過Oracle在建立資料表空間的時候資料檔案初始化大小值,當資料量達到這個值,再向資料庫中匯入資料就會報錯。 解決方案
解決辦法就是擴充資料表空間,可以選擇將表容量擴大,比如擴充到5000MB,或者當資料表空間不夠時每次自動增加一定的容量,如每次自增200M。
--查看錶空間大小SELECT FILE_NAME as 資料檔案,TABLESPACE_NAME as 資料表空間名稱,AUTOEXTENSIBLE as 自動擴充,STATUS as 狀態,MAXBYTES as 可擴充最大值,USER_BYTES as 已使用大小,INCREMENT_BY as 自動擴充增量 FROM dba_data_files
--擴充空間,將資料檔案擴大至5000MB alter database datafile 'D:\DataBase\Test.DBF' resize 5000m;
--自動成長,資料表空間不足時增加200MB,最大擴充5000MB alter database datafile 'D:\DataBase\Test.DBF' autoextend on next 200m maxsize 5000m;
--擴充無限大空間alter database DATAFILE 'D:\DataBase\Test.DBF' autoextend on maxsize unlimited;
注意資料表空間大小限制
資料表空間資料檔案容量與DB_BLOCK_SIZE有關,在初始建庫時,DB_BLOCK_SIZE要根據實際需要,設定為 4K,8K、16K、32K、64K等幾種大小,ORACLE的物理檔案最大隻允許4194304個資料區塊(由作業系統決定)
即:
4k最大資料表空間為:16384M
8K最大資料表空間為:32768M
16k最大資料表空間為:65536M
32K最大資料表空間為:131072M
64k最大資料表空間為:262144M
所以將maxsize設定為unlimited也並非能無限擴充,還受限於區塊大小,即blocksize大小,如一般blocksize預設8k,資料檔案大小最大也只能擴充到32GB。當然可以設定bigfile(大檔案資料表空間),8k的blocksize資料表空間檔案理論上最大可以擴充32TB,但是實際上受作業系統的檔案系統限制。使用大檔案資料表空間(bigfile tablespace)可以大幅度增強Oracle資料庫的儲存能力,簡化資料庫管理工作。與此同時,付出的代價是增加備份與恢複的時間。如果是中小型項目,資料量在TB級以內,建議使用小檔案資料表空間。一個小檔案資料表空間(smallfile tablespace)最多可以包含1022個資料檔案(datafile)。詳細可看Oracle物理檔案限制大小表格Physical Database Limits
添加資料表空間資料檔案sql指令碼如下:
--增加資料檔案,TestTablespace是這裡測試使用的資料表空間名稱 alter tablespace TestTablespace add datafile 'D:\DataBase\Test2.DBF' size 1024m;
——————————————————————————————————————————
參考源:
Oracle11gR2Physical Database Limits