数据库转储

项目中有些数据库表的数据由于相关业务的特殊性,不需要保留早期的数据,如一个月前的数据已经不需要了,放在那也没有意义,反而会影响到新数据的查询速度,这样就可以通过数据库转储来将以前的数据通过文件的方式来转储,或者直接删除掉。可以通过人工来做,但人工需要持续耗费人力,还会有失误的问题,系统转储最好还是在深夜做,业务空闲的时候做最好,给业务的冲击也最小,所以最好的办法还是通过系统功能来做。要实现系统转储要做如下几方面工作.
 1.定义如下数据维度:
   每次转储的最大数据条数: 最好小于50000条,因为有的文件csv对记录数是有限制的
   数据保存条数: 指那些临时保留的数据,可以直接删除掉
   转储表名:哪些数据库表需要转储
   转储表的时间字段: 按照表哪个字段来算时间
   转储条件: 可额外定义其他的需要满足的转储条件
   最大文件: 转储文件的最大空间,如果超过就要删除最老的文件
   文件存放路径: 转储文件的存放路径
   啥时候检查: 一般是每天晚上深夜检查
   触发条件: 某些 数据库表空间利用率 超过多少了,就需要转储等
 2.查询表空间利用率的函数
   mysql:
SELECT TRUNCATE((SUM(IFNULL(data_length,0)+IFNULL(index_length,0)) /SUM(IFNULL(data_free,0)+IFNULL(data_length,0)+IFNULL(index_length,0))) * 100, 7) AS used_percent
 FROM information_schema.tables
WHERE table_schema =:tableSpace
  oracle:
 select trunc((b.bytes-sum(nvl(a.bytes,0)))/(b.maxbytes)*100,5) as used_percent
 from dba_free_space a right outer join dba_data_files b
on a.tablespace_name=b.tablespace_name
 where b.tablespace_name=upper(:tableSpace)
group by b.tablespace_name,b.bytes,b.maxbytes
 3.oracle清除数据后还需要做如下操作才能达到效果
  Alter table <% :table %> enable row movement
  Alter table <% :table %> shrink space cascade

猜你喜欢

转载自xiaoyuwei.iteye.com/blog/1153966