互联网服务

如何删除一张大表的几个月前的数据

有一张大表 数据量在 600W+
在做导出备份时,因为该表的存在 严重影响到 当时系统的性能,(是否用办法EXPORT全库导出的时候 不导出这张表?)

目前和应用协商将该表数据删除到只保留3个月的数据,

用DELETE 删除实务日志 肯定会满。。

现在在运行的情况下 是否可以用  ALTER TABLE ACTIVATE NOT LOGGED  ?


有没有更好的办法 只留下3个月数据?
参与15

14同行回答

somisssomiss系统工程师上海宝信软件南京分公司
最佳答案 只能选1个 ,对不起 下面几位 热心的了显示全部
最佳答案 只能选1个 ,对不起 下面几位 热心的了收起
互联网服务 · 2013-03-14
浏览967
somisssomiss系统工程师上海宝信软件南京分公司
回复 7# weiruan85 THX,Problem solved in your way.显示全部
回复 7# weiruan85

THX,Problem solved in your way.收起
互联网服务 · 2013-03-14
浏览965
somisssomiss系统工程师上海宝信软件南京分公司
回复 11# itsbegin    谢谢,先去测试环境 试下显示全部
回复 11# itsbegin


   谢谢,先去测试环境 试下收起
互联网服务 · 2013-03-14
浏览921
somisssomiss系统工程师上海宝信软件南京分公司
回复 9# xu5762173    谢谢 最后采取了 这个方法最后SQL 如下db2 "select '\"' || trim(TABSCHEMA) ||'\".\"'|| trim(tabname) || '\"' from syscat.tables where  tabschema in ('SCHEMANAME1','SCHEMANAME1 2',') AND tabname not in ('TBNAME1',...显示全部
回复 9# xu5762173


   谢谢 最后采取了 这个方法
最后SQL 如下

db2 "select '\"' || trim(TABSCHEMA) ||'\".\"'|| trim(tabname) || '\"' from syscat.tables where  tabschema in ('SCHEMANAME1','SCHEMANAME1 2',') AND tabname not in ('TBNAME1','TBNAME2')" |grep "\"" > tables.txt
db2move DBNAME export -tf tables.txt收起
互联网服务 · 2013-03-14
浏览912
itsbeginitsbegin软件开发工程师上海通联支付
不要用什么NOT LOGGED,数据量有点大,必须用分区表来进行管理维护。数据库版本要升级到9.7,此版本支持分区表的分区索引,而之前的版本是只有全局索引的。改造成分区表需要注意:1. 分区表改造需要确认好分区方式,范围分区确认先一次性创建好足够的分区,并定期进行分区信息添加。2....显示全部
不要用什么NOT LOGGED,数据量有点大,必须用分区表来进行管理维护。数据库版本要升级到9.7,此版本支持分区表的分区索引,而之前的版本是只有全局索引的。改造成分区表需要注意:

1. 分区表改造需要确认好分区方式,范围分区确认先一次性创建好足够的分区,并定期进行分区信息添加。
2. 应用方必须和DBA配合,针对所有对这个表的访问SQL进行分区表性能测试,避免分区改造的性能问题,并同时确认索引创建方式。
3. 分区表创建好后停止应用并通过导出/导入方式实现数据迁移到分区表,不要删除原始数据表避免误操作后无法恢复。
4. 分区表数据导入后检查导入日志和对表进行统计。

将来使用DETACH进行数据删除的效率和安全性,和一个大表不可同日而语,赶紧制定分区表改造计划吧!

祝顺利!收起
互联网服务 · 2013-03-14
浏览1131
lisp2009lisp2009数据库管理员浙商银行
强烈建议分区表,这么好用的东西为啥不用,对这个做过测试,很方便,可惜我们公司很多大数据量在清理的时候还是很老土,先export然后load,遇到归档日志的load都不行。我崩溃啊。显示全部
强烈建议分区表,这么好用的东西为啥不用,对这个做过测试,很方便,可惜我们公司很多大数据量在清理的时候还是很老土,先export然后load,遇到归档日志的load都不行。我崩溃啊。收起
互联网服务 · 2013-03-14
浏览1056
xu5762173xu5762173数据库管理员Ess
当然也可以自己编写export脚本:db2 "select 'export to ' ||tabname||'.ixf of ixf messages export.msg select * from '||rtrim(tabschema)||'.'||tabname||';' from syscat.tables where tabschema='DB2INST1'" > export.ddl   生产环境不建议用not logged,...显示全部
当然也可以自己编写export脚本:
db2 "select 'export to ' ||tabname||'.ixf of ixf messages export.msg select * from '||rtrim(tabschema)||'.'||tabname||';' from syscat.tables where tabschema='DB2INST1'" > export.ddl   
生产环境不建议用not logged,一旦失败,大表恢复起来也会慢
建议做成分区表的形式,三个月一个分区收起
证券 · 2013-03-14
浏览1057
weiruan85weiruan85数据库管理员ibm
回复 3# wangyax     alter table not logged 比较危险,一旦失败,表就只能删除重建,慎重 !!显示全部
回复 3# wangyax


    alter table not logged 比较危险,一旦失败,表就只能删除重建,慎重 !!收起
政府机关 · 2013-03-13
浏览1005
shlei6067shlei6067联盟成员数据库管理员NJ
可否考虑用一个脚本查出近三个月数据,然后用export 导出来,然后用脚本使用load删除整张表数据,再通过load将导出的数据加载进去。显示全部
可否考虑用一个脚本查出近三个月数据,然后用export 导出来,然后用脚本使用load删除整张表数据,再通过load将导出的数据加载进去。收起
互联网服务 · 2013-03-13
浏览1023
wangkai8wangkai8数据库管理员IBM
使用partitioned table,按照月份创建相关分区。不要的数据只需要detach->drop,就可以了显示全部
使用partitioned table,按照月份创建相关分区。不要的数据只需要detach->drop,就可以了收起
互联网服务 · 2013-03-13
浏览1033

提问者

somiss
系统工程师上海宝信软件南京分公司
擅长领域: 备份

问题状态

  • 发布时间:2013-03-12
  • 关注会员:1 人
  • 问题浏览:12663
  • 最近回答:2013-03-14
  • X社区推广