Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

0

好友

5

主题
1#
发表于 2013-3-21 08:28:55 | 查看: 6279| 回复: 11
环境:
rac+10.2.0.4  asm存储

实时在线系统库中的一个大表数据约5亿,历史原因没有分区,segment大小约为120G ,待删除的数据有5kw。

请问 为了不影响业务,有什么好的方法没有?
2#
发表于 2013-3-21 09:05:00
在线,未分区,还能咋删除,一点一点删咯

回复 只看该作者 道具 举报

3#
发表于 2013-3-21 10:15:06
按rowid手工分区,然后可以并行执行,对undo没影响,注意归档空间

回复 只看该作者 道具 举报

4#
发表于 2013-3-21 10:31:36
我是在存储过程中批量来删除的,并且采用并行删除,但是,有个问题困扰着我,就是在存储过程并行删除的时候,必须用execute immediate string 方式,我手工在客户端并行删除10w的数据几分中就可以,但是运行存储过程,一次循环删除10w需要很久。前提并行操作都是enable的。

回复 只看该作者 道具 举报

5#
发表于 2013-3-21 10:39:48
存储过程贴出来看看呗

回复 只看该作者 道具 举报

6#
发表于 2013-3-21 10:45:14
begin  
      astart := 1;
      aend :=100000;
      nend := 545776661;
      i :=1;
begin  
         
         while astart < nend loop  
         delete /*+ parallel(a,8) */ From user a Where exists (Select 1   From user_dul_deleted_id b where a.id=b.id and b.id between  astart  and aend )  ;
         commit;
         dbms_output.put_line(to_char(astart)|| '  rows have been deleted ! total times :'|| to_char(i));
         dbms_output.put_line('astart:'||to_char(astart));
         dbms_output.put_line('aend:'||to_char(aend));
         dbms_output.put_line('-----nend:'||to_char(nend));   
         astart := aend;
         aend := aend + 100000;
         i := i+1;   
         end loop;  
end;  
end;  

回复 只看该作者 道具 举报

7#
发表于 2013-3-21 15:55:18
这个procedure和“5亿的大表,删除5kw的数据”是一个问题吗?

回复 只看该作者 道具 举报

8#
发表于 2013-3-21 16:16:37
是的  批量删除的

回复 只看该作者 道具 举报

9#
发表于 2013-3-21 16:21:23
按rowid手工分区,手工多个连接并行,不是parallel(a,8)这种并行

回复 只看该作者 道具 举报

10#
发表于 2013-3-21 21:33:13
明白你的意思 多个客户端来并行。谢谢!

回复 只看该作者 道具 举报

11#
发表于 2013-3-26 18:41:11
学习一下了  rowid 分区、并行连接

回复 只看该作者 道具 举报

12#
发表于 2013-3-27 03:56:12
学习了,就是没有这种大场面啊。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 14:38 , Processed in 0.056300 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569