近期學習進行壓力測試,由於大批量導入數據,Oracle數據庫產生ORA-01653: unable to extend table錯誤,原因是TABLESPACE沒有空間了。
從報錯信息可以很直觀的看出:CA_5531DATA表空間中的表無法擴展, 原因一般為:數據文件空間不足且未設置autoextend on屬性(自動擴展)或者用戶磁盤限額不足導致用戶的表無法擴展(也可不設置自動擴展,給夠充足空間的表空間數據文件)。
如果要查看當前用戶使用的表空間情況,使用如下命令:
select * from user_users
如果要查看oracle下面所有的表空間,使用如下命令:
select * from Dba_Tablespaces
查詢文件是否設置autoextend on屬性:
select file_name ,autoextensible,increment_by from dba_data_files;
注:這里是我修改之后截的圖,之前為NO,導致表空間不足
確定問題后,解決方法:將表空間的數據文件屬性改為自動擴展 autoextend on
設置表空間自動擴展SQL語句:
ALTER DATABASE DATAFILE <'your data_file'> AUTOEXTEND ON [NEXT <size>] [MAXSIZE <size/UNLIMITED>];
DATAFILE:要增加的表空間數據文件路徑
NEXT:每次自動擴展多少空間
MAXSIZE:最大擴展至多少空間
增加指定大小的數據文件:
ALTER TABLESPACE <your tablespace_name> ADD DATAFILE <'your data_file'> SIZE <size> [AUTOEXTEND ON] [NEXT <size>] [MAXSIZE <size/UNLIMITED>];
增加指定大小數據文件的同時也可將表空間設置為自動擴展。
1.數據文件自動擴展的好處
1)不會出現因為沒有剩余空間可以利用到數據無法寫入
2)盡量減少人為的維護
3)可以用於重要級別不是很大的數據庫中,如測試數據庫等
2.數據文件自動擴展的弊端
1)如果任其擴大,在數據量不斷變大的過程中會導致某個數據文件異常的大
2)沒有人管理的數據庫是非常危險的
注:自動擴展表空間也不是無限擴展的
表空間數據文件容量與DB_BLOCK_SIZE有關,在初始建庫時,DB_BLOCK_SIZE要根據實際需要,設置為 4K、8K、16K、32K、64K等幾種大小,ORACLE的物理文件最大只允許4194304個數據塊(由操作系統決定),表空間數據文件的最大值為 4194304×DB_BLOCK_SIZE/1024M。
如圖所示,當db_block_size為8192時,表空間最大只能擴展到32G。
在oracle11g中引進了bigfile表空間,他充分利用了64位CPU的尋址能力,使oracle可以管理的數據文件總量達到8EB。單個數據文件的大小達到128TB,即使默認8K的db_block_size也達到了32TB。
創建bigfile的表空間使用的sql語句和創建表空間的語句使用基本相同。
create bigfile tablespace···
需要注意的是使用bigfile表空間,它只能支持一個數據文件。也就是說這個文件的最大大小就是表空間最大大小,你不可能通過增加數據文件來擴大該表空間的大小。