Oracle10g数据库,数据文件放在E盘,D盘200G还剩40G,E盘300G还剩2G。
UNDO表空间建在D盘了,数据库T中有个A表,数据量非常大。在网上搜索了一些方法都不行。我先delete了A表一部分数据。(有些数据要保留,不能用truncate全部删除)1、用alter table A shrink space cascade
报错 ORA-30036:无法按8扩展段(在还原表空间'UNDOTBS1'中)2、用exp user/pass@ file=d:\A.dmp tables=(A) compress=y grants=y buffer=2048000 也报空间不足。3、用alter tablespace T coalesce没有发现有什么改变。4、move应该也会报空间不足,所以我没试。5、目前正用analyze table A compute statistics结果还没出来。请问一下还有什么办法没有?
UNDO表空间建在D盘了,数据库T中有个A表,数据量非常大。在网上搜索了一些方法都不行。我先delete了A表一部分数据。(有些数据要保留,不能用truncate全部删除)1、用alter table A shrink space cascade
报错 ORA-30036:无法按8扩展段(在还原表空间'UNDOTBS1'中)2、用exp user/pass@ file=d:\A.dmp tables=(A) compress=y grants=y buffer=2048000 也报空间不足。3、用alter tablespace T coalesce没有发现有什么改变。4、move应该也会报空间不足,所以我没试。5、目前正用analyze table A compute statistics结果还没出来。请问一下还有什么办法没有?
+1一个
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
UNDO已经在D盘重建过了,可是执行一次shink都会报错。 有没有不产生UNDO的办法?
select * from ALL_OBJECTS where owner = upper('name'); -- 自己建在库里的表
SELECT a.tablespace_name as tablespace_name,
to_char(b.total/1024/1024,999999.99) as Total,
to_char((b.total-a.free)/1024/1024,999999.99) as Used,
to_char(a.free/1024/1024,999999.99) as Free,
to_char(round((total-free)/total,4)*100,999.99) as Used_Rate
FROM (SELECT tablespace_name, sum(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name) a,
(SELECT tablespace_name, sum(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name ) b
WHERE a.tablespace_name=b.tablespace_name
AND a.tablespace_name='UNDOTBS1'
ORDER BY a.tablespace_name;TABLESPACE_NAME TOTAL USED FREE USED_RATE
------------------------------ -------------------- -------------------- -------------------- --------------
UNDOTBS1 15000.00 770.19 14229.81 5.13-- 如果Used_Rate(即空间使用率)超过80%,建议加大UNDOTBS1表空间的数据文件!-- 查看 UNDOTBS1 表空间相关的数据文件
sys@SZTYORA> select name from v$datafile where ts# in (select ts# from v$tablespace where name='UNDOTBS1');NAME
--------------------------------------------------------------------------------------------------------------------
/ora/u01/app/oracle/oradata/sztyora/undotbs01.dbf-- 扩展数据文件的大小:
alter database datafile '/ora/u01/app/oracle/oradata/sztyora/undotbs01.dbf' resize 20480M;-- 从上面的查询可以看到:我的UNDOTBS1表空间的总大小(TOTAL字段)是15000M,约15G,假设其使用率为95%啦(我想将其扩大为20G),此时可以通过扩展数据文件大小来增大UNDOTBS1表空间,
-- 当然:还可以通过为UNDOTBS1表空间添加数据文件扩展UNDOTBS1表空间!-- 注意:如果你的系统是Windows的,且磁盘格式化为FAT32,其最大文件是有限制的(好像是4G吧,忘记啦),此时:单个数据文件应该不能超过4G,否则会报错!
你可能没看我的回复,现在我的D盘只有40G空间了,A表的数据量太大了,40G的UNDO表空间不够执行一次shrink
1、在D盘添加表空间数据文件,不过这样可能不符合楼主的初衷;
2、在D盘添加表空间数据文件,然后把A表的一部分数据移动到新的表空间备份起来,然后再在A表中删除备份的数据,只保留剩余的数据。
另外,shrink需要多大的UNDO表空间这个倒是没有尝试过。
A表的数据量太大了,移动(move)和导出(exp)空间都不够,所以我才用shrink,可是还是报空间不够。
我想知道在目前的基础上有没有什么办法可以达到这种效果?
有没有不产生UNDO的办法?