作者:admin 日期:2023-10-17 瀏覽: 次
Oracle報(bào)錯(cuò)ORA
向Oracle 10g數(shù)據(jù)庫中批量插入數(shù)據(jù),當(dāng)插入近2億條數(shù)據(jù)后,報(bào)出如下錯(cuò)誤: ORA-01653: 表xx無法通過 8192 (在表空間 xx_data 中) 擴(kuò)展。
查看表空間,發(fā)現(xiàn)表空間大小已達(dá)到32G,但創(chuàng)建表空間時(shí)已設(shè)置了無限擴(kuò)展(初始空間為20G),磁盤空間沒滿,說明表空間無法進(jìn)行自動(dòng)擴(kuò)展了。
查找資料了解到Oracle 10g 單個(gè)表空間數(shù)據(jù)文件的最大值為: 最大數(shù)據(jù)塊 * DB_BLOCK_SIZE
查看Oracle的 DB_BLOCK_SIZE
SQL> select value from v$parameter where name ='db_block_size';
8192
本機(jī)數(shù)據(jù)庫的數(shù)據(jù)塊大小為8K,算出本機(jī)Oracle 單個(gè)表空間數(shù)據(jù)文件的最大值為: 4194304 * 8/1024 = 32768M (32G);
所以既使創(chuàng)建表空間時(shí)設(shè)置了 autoextend on maxsize unlimited,其最大空間也是不會(huì)超過32G。
注: 表空間數(shù)據(jù)文件容量與DB_BLOCK_SIZE的設(shè)置有關(guān),而這個(gè)參數(shù)在創(chuàng)建數(shù)據(jù)庫實(shí)例的時(shí)候就已經(jīng)指定。DB_BLOCK_SIZE參數(shù)可以設(shè)置為4K、8K、16K、32K、64K等幾種,Oracle的物理文件最大只允許4194304個(gè)數(shù)據(jù)塊(這個(gè)參數(shù)具體由操作系統(tǒng)決定,一般應(yīng)該是此數(shù)字),表空間數(shù)據(jù)文件的最大值對應(yīng)關(guān)系就可以通過4194304×DB_BLOCK_SIZE/1024M計(jì)算得出。 4k最大表空間為:16384M
8K最大表空間為:32768M
16k最大表空間為:65536M
32K最大表空間為:131072M
64k最大表空間為:262144M
而Oracle默認(rèn)分配的為8K,也就是對應(yīng)于32768M左右的空間大小,如果想繼續(xù)增大表空間的話,只需要通過alter tablespace name add datafile ‘path/file_name’ size 1024M;添加數(shù)據(jù)文件的方式就可以了。
數(shù)據(jù)塊是oracle中最小的空間分配單位,各種操作的數(shù)據(jù)就的放在這里,oracle從磁盤讀寫的也是塊。一旦create database,db_block_size就是不可更改的。因?yàn)閛racle是以塊為單位存儲(chǔ)數(shù)據(jù)的,任何一個(gè)存儲(chǔ)元素最少占用一個(gè)塊,如果你改變了db_block_size,必然導(dǎo)致部分塊不能正常使用。
其實(shí)在unix類操作系統(tǒng)中,文件塊和oracle塊的關(guān)系非常緊密(建議相等),這樣才能保證數(shù)據(jù)庫的執(zhí)行效率。在windows下可能就不這么講究了。建議使用8k以上的塊,有人做過測試,同樣的配置,8k的塊比4k快大約40%,比2k快3倍以上。
處理方法兩種:①假如當(dāng)前表空間只有一個(gè)數(shù)據(jù)文件,可以擴(kuò)大該數(shù)據(jù)文件的大?。▎蝹€(gè)數(shù)據(jù)文件最大32G);②為當(dāng)前表空間新增數(shù)據(jù)文件。
淮安數(shù)據(jù)恢復(fù)為當(dāng)前表空間新增數(shù)據(jù)文件方法如下:
在命令行下,以oracle系統(tǒng)管理員用戶登錄oracle,再執(zhí)行以下操作:
1)方法一:分步驟。為指定的表空間增加數(shù)據(jù)文件(三步驟) ①為指定的表空間創(chuàng)建數(shù)據(jù)文件,并指定初始大小 ALTER TABLESPACE 表空間名稱 ADD DATAFILE 'D:\Oracle\app\Administrator\oradata\orcl\新數(shù)據(jù)文件名稱.DBF' SIZE 32M;
②為該數(shù)據(jù)文件打開自動(dòng)增長 ALTER DATABASE DATAFILE 'D:\Oracle\app\Administrator\oradata\orcl\新數(shù)據(jù)文件名稱.DBF' AUTOEXTEND ON;
③指定每次自動(dòng)增長的大小 ALTER DATABASE DATAFILE 'D:\Oracle\app\Administrator\oradata\orcl\新數(shù)據(jù)文件名稱.DBF' AUTOEXTEND ON NEXT 200M ;