数据库空间满了怎么处理

Anon 2011-05-04 09:02:19
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结果还没出来。

请问一下还有什么办法没有?






...全文
1322 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
iqlife 2011-05-04
  • 打赏
  • 举报
回复
我的做法是EXP到远程机器的硬盘上(做备份),然后删除本地数据,我的是分区表,
Anon 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 luoyoumou 的回复:]
引用 15 楼 anon 的回复:

引用 13 楼 luoyoumou 的回复:
SQL code
-- 先查看UNDOTBS1表空间的使用情况:
SELECT a.tablespace_name as tablespace_name,
to_char(b.total/1024/1024,999999.99) as Total,
to_char((b.total-a.free)/1……
[/Quote]


已经加了五块硬盘,目前确实没有硬盘可用了。

我想删除一部分数据,然后回收表空间。
我想知道在目前的基础上有没有什么办法可以达到这种效果?
有没有不产生UNDO的办法?
luoyoumou 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 anon 的回复:]

引用 13 楼 luoyoumou 的回复:
SQL code
-- 先查看UNDOTBS1表空间的使用情况:
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) ……
[/Quote]

-- 不够就加硬盘撒!......你不会又说:公司没钱买硬盘吧?
Anon 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 vanjayhsu 的回复:]
两种办法:
1、在D盘添加表空间数据文件,不过这样可能不符合楼主的初衷;
2、在D盘添加表空间数据文件,然后把A表的一部分数据移动到新的表空间备份起来,然后再在A表中删除备份的数据,只保留剩余的数据。
另外,shrink需要多大的UNDO表空间这个倒是没有尝试过。
[/Quote]

A表的数据量太大了,移动(move)和导出(exp)空间都不够,所以我才用shrink,可是还是报空间不够。
vanjayhsu 2011-05-04
  • 打赏
  • 举报
回复
两种办法:
1、在D盘添加表空间数据文件,不过这样可能不符合楼主的初衷;
2、在D盘添加表空间数据文件,然后把A表的一部分数据移动到新的表空间备份起来,然后再在A表中删除备份的数据,只保留剩余的数据。
另外,shrink需要多大的UNDO表空间这个倒是没有尝试过。
Anon 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 luoyoumou 的回复:]
SQL code
-- 先查看UNDOTBS1表空间的使用情况:
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,
……
[/Quote]

你可能没看我的回复,现在我的D盘只有40G空间了,A表的数据量太大了,40G的UNDO表空间不够执行一次shrink
luoyoumou 2011-05-04
  • 打赏
  • 举报
回复
-- 一句话:事情是死的,人是活的,如果你连这么简单的问题也搞不定的话,我劝你:还是别搞DBA啦!
luoyoumou 2011-05-04
  • 打赏
  • 举报
回复
-- 先查看UNDOTBS1表空间的使用情况:
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,否则会报错!
yoyodoxing 2011-05-04
  • 打赏
  • 举报
回复
select segment_name,sum(bytes)/1024/1024 from user_extents group by segment_name

----提取本地自建表的容量大小,用于本地空间不够时的清理。


select * from ALL_OBJECTS where owner = upper('name');

-- 自己建在库里的表
Anon 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bobo12082119 的回复:]
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
[/Quote]

UNDO已经在D盘重建过了,可是执行一次shink都会报错。 有没有不产生UNDO的办法?
Anon 2011-05-04
  • 打赏
  • 举报
回复
可能是我没有写清楚,我现在是想删除一部分数据,回收表空间。

只有这台服务器的硬盘可用,没有其他的外挂硬盘了。
  • 打赏
  • 举报
回复
要不把控制文件,数据文件等拷贝出来,放在别的盘上
Well 2011-05-04
  • 打赏
  • 举报
回复
可以对undo进行重建。。。建立在D盘。。而再对各个表分区添加datafile指向D盘即可。。。
Anon 2011-05-04
  • 打赏
  • 举报
回复
analyze也报空间不足。

lzd_83可能没仔细看我写的内容吧,现在我不是想扩展表空间,是想回收表空间。
Ethan Tung 2011-05-04
  • 打赏
  • 举报
回复
在别的磁盘加数据文件
Rotel-刘志东 2011-05-04
  • 打赏
  • 举报
回复
扩展表空间。
xiexingxin 2011-05-04
  • 打赏
  • 举报
回复
继续关注楼主的问题? 我以前也遇到到这个问题! 不知道该怎么解决!希望有人能解决!
yejihui9527 2011-05-04
  • 打赏
  • 举报
回复
select * from dba_data_files;
+1一个

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧