和开发讨论的一个数据变更需求

    最近在评估一个开发同事的需求时,发现随着需求的变化,DBA相关的评估工作也会随之变化,同时反射到开发同事那边,通过这个案例也可以看到很多的需求变化,可以从中看出很多的不足和改进之处。
    首先开发提出的一个数据需求,删除数据库中的几张表数据,然后把剩下的数据都备份,把备份集拷贝到一个异机环境。其实这个需求在之前也很他们沟通过,这是他们业务迁移的一个步骤,同时做一些业务梳理,DB这边需要配合做一些数据的清理的工作。
    这种工作其实对我来说是一件好事,如果有一天我发现我在维护一个T级的数据库,但是数据库里的数据从来用不到,垃圾成山,我会有一种很深的负罪感,至于为什么这么说,我后面再解释。
    我们在很早之前沟通的结论,开发同事提供一个列表清单,删除这些清单中的表数据,这样能够完成一些业务的梳理和数据清理,然后提供一个初始的备份交给他们,后期如果需要做一些特殊的数据恢复有据可依,然后在这个基础上他们会把另外几个业务线的数据迁移过来,提供资源的利用率。
    所以看到这个需求之后就好像我们之前的暗号一样,我开始按照计划来做一个详细的评估,但是评估发现原来的方案有一些硬伤。
当前所在的环境是一主一备,数据量在1.7T左右。磁盘空间的利用率达到了95%以上,意味着系统中已经没有多少的剩余空间。根据我查看dba_segements的分析,发现需要删除的数据大概在300G左右,这对于1.7T的数据量来说不是多大的提升,所以我的初步评估就是做数据备份还是有难度的,一来备份集太大,恢复起来难度很大,二来本地磁盘空间不足,想导出数据绝非易事。
当然我提出难处,还得有解,我的一个建议就是直接把备库的数据文件都拷贝过去,顺带控制文件,参数文件,这样两个难点看起来都能够解决,一来恢复起来非常容易,只需要启用数据库即可,二来磁盘空间不足的问题可以缓解,可以直接通过rsync或者ftp,scp的方式传输过去。这种方案对于开发同事来说,虽然听起来要复杂一些,但是他们实际想来发现也是受益的,所以也能够理解我的想法。他们评估了一下,认为还是可行的。
    但是这个时候我突然想到了一个问题,那就是主备库的磁盘空间问题,如果我要导出备份,1.7T的数据,如果直接拷贝数据文件,得花费半天左右,而在这半天的时间里,如果产生大量的归档,在备库无法应用就会一直挤压下来,到时候还是会撑爆磁盘空间,主备库都有一定的风险,我在使用脚本查看了主库的归档频率情况之后,更加坚定了我的担心,主库每天的归档在早上大概会有60g左右,也就意味着在半天的时间范围内,主库的空间很可能被撑爆。而备库是计划是停库直接拷贝数据文件,这个时间持续太长,潜在风险还不少。所以虽然我建议了传输数据文件,突然发现有些事情结合具体环境来看还是有一定的风险,需要综合评估来看。
    当然我不能一会一个主意,这也会给开发的同事造成很多不专业的影响,所以我简单的描述了现在的情况,决定还是在数据清理之后再来看看实际的数据使用率再来决定。删除的工作也是反复确认,最后直接动用了truncate,删除数据冗余,创建数据艰难,删除的工作总共持续了不到一分钟,查看磁盘空间使用情况,让我大吃一惊,空间剩余1.5T左右,也就意味着删除了近1T多的数据。
    这些数据都是和开发同学反复确认之后操作的,所以在这一点上我也就心安理得了。空间清理的幅度如此之大,让我有些招架不住,如此一来,还拷贝数据文件干什么,直接导出数据,大概会在100G左右,直接推送到目标端,也真心不是什么难事。所以这样一来留给开发的任务看起来就更加明朗了,我可以主动推送文件给他们或者他们来抓取。
    而我在这个基础上还有一些工作要做,其中重要的一环就是收缩数据库空间,这个操作可以使用resize datafile的方式来实现,可以使用如下的SQL语句来实现。
select a.file#,a.name,a.bytes/1024/1024 CurrentMB,
          ceil(HWM * a.block_size)/1024/1024 ResizeTo,
          (a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB,
          'alter database datafile '''||a.name||''' resize '||
          ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD
   from v$datafile a,
        (select file_id,max(block_id+blocks-1) HWM
          from dba_extents
          group by file_id) b
  where a.file# = b.file_id(+)
   and (a.bytes - HWM *block_size)>0
我可以根据删除的收益(能够释放的空间情况)来决定是否需要运行相应的SQL语句,一番折腾之后,物理磁盘空间马上又释放了几百G。
在这个基础上,其实我们还是可以进一步分析数据文件的高水位线,1T多的数据文件,实际的数据使用率才200G左右,肯定有些数据库对象占用了高水线的位置,导致很多数据文件无法收缩。当然这个工作也是个细活,需要分析dba_extents,结合dba_segements,目前还没有想好怎么自动化分析这个问题,最近有时间了可以搞搞,目前还是手工来做的。

时间: 2024-07-31 16:31:51

和开发讨论的一个数据变更需求的相关文章

一次数据变更的审核过程

   今天正在做一个数据变更操作,突然一个开发的同学找到我,看起来比较着急的样子,说想让我做一个数据变更.    当然在这种时候,我正在做的数据变更操作已经被打断了,已经有一些不愿意了,而且还要紧急变更,在没有得到脚本,没有环境,没有脚本说明,对于这种三无要求我一向都是比较排斥的.所以我静下来,让他提供这些信息,这些是数据变更的必备条件,哪怕再紧急,这些信息也需要有基本的流程规范.    所以这位同学就这样无功而返,当然换谁都一样.很快他就确认了环境,是一个使用率不高的在线业务库,当我得到他提供

诺丁汉为满足当地需求新建一个数据中心

日前,在英国诺丁汉新建的一个数据中心开通运营,该数据中心可以部署约2500台服务器. 据诺丁汉邮报报道,SpaceDataCenters公司表示在诺丁汉的贝斯福德投资建设了一个数据中心,这是因为当地缺乏高质量的数据中心,因此,该公司认为在此建设数据中心是一个很好的长期投资.该数据中心设施将提供云存储服务,InPhase公司和Retroscents公司在其办公室办公. 诺丁汉 构建数据投资案例 该公司表示,该数据中心经过两年的建设工作.开发和测试,并已与数百家客户签署了租赁协议. InPhase公

现在项目中有一个这样的需求需要实现这样的窗口,选择多种数据,请问谁有这样的源码。

问题描述 现在项目中有一个这样的需求需要实现这样的窗口,选择多种数据,请问谁有这样的源码. 解决方案 直接用cfiledialog(C++)或者openfiledialog(C#)等. 也可以用toolbar listview combobox button等组合.

记一次数据同步需求的改进(一)

最近有个需求,开发的同事找到我,提出了下面的需求 由于平台业务发展需要,需要将test_account_log 和test_protect_log 表前一天的增量同步到新增的两张表上 对于这个需求看起来还是蛮简单的.自己结合这两张报的设计方式发现没那么简单. 首先对这两个表做了分库分表,从图中可以看到,其实分成了4个库,16个用户,每个用户按照业务逻辑保存了一部分的明细数据,从目前的数据量来看,累计数据还不算大. 如果按照开发的需求,需要抽取保留前一天的增量数据,这个需求还是需要好好斟酌的. 因

一个数据科学家的新年计划

简介 新年并非仅仅是更换日历或是清晨起床后揉开双眼.新年是充满喜悦的一个崭新开始.它给我们一个完美的理由养成一个新习惯,它意味着新"希望"的到来. 如果你正在阅读这篇文章,我确信数据科学会让你兴奋!你要在2016年做出改变,难道不是吗?如果你从今天开始致力于实现这些目标,这是完全可能的.你必须明白,成为一个数据科学家需要一个过程,它不是一朝一夕的成功.因此,你必须耐心地朝着目标而努力. 提示: 原文中涉及了大量链接,值得收藏!在大数据文摘后台,回复"计划",可下载d

记一次数据同步需求的改进(三)

在之前的博文中分享过两篇关于数据同步的问题,链接如下: http://blog.itpub.net/23718752/viewspace-1817817/ http://blog.itpub.net/23718752/viewspace-1819981/ 最开始开发的同事也是提出想让我做一个数据的增量同步,起初他们是希望能够根据时间戳来得到增量的数据,这种方案有一个缺点就是对于update,delete的操作,这种数据变更就很难从源库中去甄别.所以最后我还是建议他们通过物化视图的增量刷新来实现这

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 数据关系映射ORM

      上一遍我介绍了AgileEAS.NET中统计的数据访问,本文我将来介绍AgileEAS.NET中的ORM实现思路.关于ORM的概念和介绍,我在此就不在重复介绍了,我相信大家都很熟悉这个概念了.       AgileEAS.NETORM并没有采用如NHibernate中映射文件的文件的模式,而是采用了直接硬编码的模式实现,ORM体系设计采用了属性/列>数据对象>数据集合(表)的结构:         最基本的思路是一个记录/实体(IEntity)映射一条记录,一个实体包括若干属性/

Scott Mitchell的ASP.NET 2.0数据教程之一 创建一个数据访问层

返回"ASP.NET 2.0数据教程目录" 导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库 来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研 究在ASP.NET 2.0中实现这些常见的数据访问模式之技术的长篇系列教程的第一篇 .我们将从创建一个软件框架开始,这个框架的组成部分包括一个使用强类型的 DataSet的数据访问层(DAL),一个实施用户定义的业务规则的业务逻辑层(BLL), 以及一个由共享页面布局的ASP.NET网页组成的表现层.在打

如何在SSIS 2012中使用数据变更捕获

最新项目稍有空隙,开始研究SQL Server 2012和2014的一些BI特性,参照(Matt)的一个示例,我们开始体验SSIS中的CDC(Change Data Capture,变更数据捕获). 注:如果需要了解关于SQL Server 2008中的CDC,请看这里http://www.cnblogs.com/downmoon/archive/2012/04/10/2439462.html),本文假定读者对CDC的工作方式已有所了解.^_^. 我们分三步完成实例: 1.准备基础数据: 2.设