ORA-30036删除大数据量报错
a:分析是undo表空间不足造成
t1 300w行记录
SQL> delete from t1;
delete from t1
*
第 1 行出现错误:
ORA-30036: 无法按 8 扩展段
(在还原表空间 'UNDOTBS5' 中)
select (tablespace_name) "表空间名",
sum(total_size) "总空间/M",
sum(total_free) "剩余空间/M",
sum(max_continue) "最大连续空间/M",
round(sum(total_free) / sum(total_size) * 100) "剩余百分比/ratio"
from ((select tablespace_name,
(0) total_size,
round(sum(bytes) / 1024 / 1024, 2) total_free,
round(max(bytes) / 1024 / 1024, 2) max_continue
from dba_free_space
group by tablespace_name) union all
(select tablespace_name, round(sum(bytes) / 1024 / 1024, 2), 0, 0
from dba_data_files
group by tablespace_name))
group by tablespace_name
order by 5 asc;
表空间名 总空间/M 剩余空间/M 最大连续空间/M 剩余百分比/ratio
------------------------------ ---------- ---------- -------------- ----------------
UNDOTBS5 50 0 0 0
UNDOTBS3 10 0 0 0
UNDOTBS2 10 .13 .06 1
UNDOTBS4 10 .31 .06 3
USERS 317.5 127.13 126.5 40
SYSAUX 600 353.38 352 59
SYSTEM 700 428.38 428 61
JERRY 550 411.94 362.94 75
TEST 5 3.81 3.75 76
TBS2 5 3.94 3.88 79
TOM 5 3.94 3.94 79
表空间名 总空间/M 剩余空间/M 最大连续空间/M 剩余百分比/ratio
------------------------------ ---------- ---------- -------------- ----------------
UNDOTBS1 200 178.44 174 89
TOM2 20 19 19 95
SOCTT_TBS 200 198.63 198.63 99
解决方案
1:调整表空间的大小
//300w
alter database datafile 'D:\DEV\ORACLEDATA\TEST\UNDOTBS05.DBF' resize 1000M;//解决方案ok
2:重新创undo表空间并切换为当前undo表空间
select tablespace_name from dba_tablespaces;
select file_name from dba_data_files;
create undo tablespace undotbs6 datafile 'D:\DEV\ORACLEDATA\TEST\UNDOTBS06.DBF' size 2000m;
alter system set undo_tablespace=UNDOTBS6
原本想创建一个大的表空间替换现有的表空间,,报错
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-30036: 无法按 8 扩展段 (在还原表空间 'UNDOTBS5' 中)