项目中有些数据库表的数据由于相关业务的特殊性,不需要保留早期的数据,如一个月前的数据已经不需要了,放在那也没有意义,反而会影响到新数据的查询速度,这样就可以通过数据库转储来将以前的数据通过文件的方式来转储,或者直接删除掉。可以通过人工来做,但人工需要持续耗费人力,还会有失误的问题,系统转储最好还是在深夜做,业务空闲的时候做最好,给业务的冲击也最小,所以最好的办法还是通过系统功能来做。要实现系统转储要做如下几方面工作.
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
数据库转储
最新推荐文章于 2024-09-20 11:49:13 发布