用vc ado编程删除数个表中一个月前的记录,用delete删符合时间条件的记录,太慢了,而且有一个跟其他表关联的表,十几万条记录,我的程序删了一周还没完!!!!
而且删了记录并没有释放空间!!再搞不定服务器就要死了,老板已经怒了。
各位帮帮忙,我是数据库菜鸟。
而且删了记录并没有释放空间!!再搞不定服务器就要死了,老板已经怒了。
各位帮帮忙,我是数据库菜鸟。
解决方案 »
- 關掉form時,如何不讓彈出窗口,提示“要儲存您已做的變更嗎”
- oracle实现类似于Java语言中String的split方法, 达人进!
- 求救:oracle中如何翻译“ StickyDate > DateAdd( y, 20, GetDate() )”这句?
- Oracle 企业管理器 启动问题!!!!
- Join的上限
- 误删除表和视图后并执行Imp操作的情况,还可以恢复吗。
- net manager 与dblink的区别?
- 求UNIX环境下的oracle8数据库系统管理书籍或教程......
- 求sql
- 急 在线等oracle 截取特殊符号之间的数字
- pl/sql错误
- oracle 中的一个update 问题
大量数据的删除,可以考虑分批删除、提交。
贴表结构和删除的SQL语句!
表一:CUS.INFO(ID,AGE,TIME,SERVICE)
表二:CUS,INFO_SET(ID,INFO_ID,PASSWORD)
表三:CUS.INFO_FILE(ID,INFO_ID,FILE_NAME,FILE_POSITION)
后两张表的INFO_ID与表一的ID关联。首先删表二、表三
sql语句分别为:
delete from INFO_SET where INFO_ID in(select id from INFO where TIME BETWEEN 1 and xxxxxxxxx);
delete from INFO_FILE where INFO_ID in(select id from INFO where TIME BETWEEN 1 and xxxxxxxxx);
xxxxxxxxx是符合条件的时间。
最后删表一
delete from INFO where TIME BETWEEN 1 and xxxxxxxxx;表二、表三很快,表一很慢,测试过,肯定是能用,一万条记录我测试过,用了两分钟。另外,我删旧数据的同时,别人还在往这几张表插入新的记录。
释放存储空间如何解决?
ALert.log文件,看看有没有出错信息,估计是hung死了
我当时的情况是删除一年的数据(千万级),一次要删除十几个小时。
我采取的办法是一:做了一个循环,一年分成12个月,一个月一个月分批删除;
二:根据你这些语句,你这2个表肯定是有主外建关联的,如非必要,建议取消关联,速度会提升很多;
我的一点个人经验,希望能对你有所帮助delete from INFO_SET where INFO_ID in(select id from INFO where TIME BETWEEN 1 and xxxxxxxxx);
delete from INFO_FILE where INFO_ID in(select id from INFO where TIME BETWEEN 1 and xxxxxxxxx
/--先作一个存贮过程:CREATE OR REPLACE PROCEDURE User1.pro_del AS
begin delete from INFO_SET
where INFO_ID in
(select id from INFO where TIME BETWEEN 1 and xxxxxxxxx);
delete from INFO_FILE
where INFO_ID in
(select id from INFO where TIME BETWEEN 1 and xxxxxxxxx);
delete from INFO where TIME BETWEEN 1 and xxxxxxxxx;END;
/--再作一个JOB:begin
sys.dbms_job.submit(job => :job,
what => 'User1.pro_del;',
next_date => to_date('18-10-2008', 'dd-mm-yyyy'),
interval => 'TRUNC(SYSDATE+1)');
commit;
end;
/
你的表肯定有问题了......找下v$session_wait 等待事件..
在数据库中执行比用程序执行的效率要高。且楼主在8楼说"每天都要定时删",使用JOB定时执行是最简捷的,用vc基本上做不了的。