热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[新年好]新年第一贴,关于新增分区过程中遇到的问题

大家新年好,新的一年又到了,对于DBA来讲,跨月和跨年最需要关注的就是和年月日相关的一些规则规范了.果不其然,新年上班第一天发现有个数据库的分区方案设置错误,虽然没有影响正常使用,但是差点出大事(

大家新年好,新的一年又到了,对于DBA来讲,跨月和跨年最需要关注的就是和年月日相关的一些规则规范了.

果不其然,新年上班第一天发现有个数据库的分区方案设置错误,虽然没有影响正常使用,但是差点出大事(原因后附).

事件起因:

  由于某些业务需求,有一个库建立了分区,按照CreateDate分区,每天一个分区文件,每个文件大约存放20GB的数据.

  新建时间为15年4月,当时直接把分区方案建到了年底(12月31日).然而没有做记录(这部分特别注意,很多不该发生的小问题都是由于没有记录导致遗漏的)

  上班第一天,出于习惯,撸了一遍所有有分区的库.   果然发现了问题.

处理过程:

  第一时间判断业务系统是否出问题,但应该没有太大影响,否则元旦肯定不安生.

  着手添加相关分区方案(代码如下)

  第一步,新增分区文件组及对应分区文件

declare @fg nvarchar(10);
declare @sd datetime;
declare @ed datetime;
declare @fd datetime;
declare @sql nvarchar(2000);
set @sd = '2016-01-05';
set @ed = '2016-05-01';
set @fd = @sd;
while @fd < @ed
    begin
    set @fg = CONVERT(nvarchar(10),@fd,120)
    print @fg;
    set @sql = N'ALTER DATABASE [PartitionDB] ADD FILEGROUP [PartitionDB_FG-' + @fg + N'];';
    print @sql;
    exec(@sql);
    set @sql = 'ALTER DATABASE [PartitionDB] ADD FILE ( NAME = N''PartitionDB_FG-' + @fg + N''', FILENAME = N''D:\Microsoft SQL Server\MSSQL10_50.SQL\MSSQL\DATA\PartitionDB-' + @fg + N'.ndf'' , SIZE = 3072KB , FILEGROWTH = 102400KB ) TO FILEGROUP [PartitionDB_FG-' + @fg + N']';
    print @sql;
    exec(@sql);
    set @fd = DATEADD(d,1,@fd);
    end
View Code

  第二步,调整分区方案和分区函数

declare @fg nvarchar(10);
declare @sd datetime;
declare @ed datetime;
declare @fd datetime;
declare @sql nvarchar(2000);
set @sd = '2016-01-05';
set @ed = '2016-05-01';
set @fd = @sd;
while @fd < @ed
    begin
    set @fg = CONVERT(nvarchar(10),@fd,120)
    --print @fg;
    SET @sql = 'ALTER PARTITION SCHEME [PartitionDB_SCHEME]
    NEXT USED [PartitionDB_FG-' + @fg + '];'+
    'ALTER PARTITION FUNCTION [parfunDay]()
    SPLIT RANGE ('''+ @fg +''')'; 
    print @sql;
    exec (@sql);
    set @fd = DATEADD(d,1,@fd);
    end
View Code

执行完成后原先存在错误分区文件中的数据会开始重新应用分区方案,所以磁盘的IO会占用很高,需要特别注意.

 

特别注意:

  大家可以看到上面两步的循环逻辑完全一致,理论上是可以放到一段代码中去执行,但我建议仍然分两步去运行.

  原因是第一步至新增文件组和文件,不影响业务系统的正常使用,所以很快就能执行完毕.

  第二步执行过程中由于业务系统仍然在往数据库中写数据,同时分区方案的修改将影响数据写入的位置,因此在执行过程中会产生较多的阻塞.所以第二步建议放到业务低峰期去执行.

PS:

  虽然1月1日的分区方案没有了,但是新的数据是不会丢失的,因为分区方案指定的是左边界(当然也可以指定右边界,这都是看你自己分区方案怎么写的了)

  调整分区方案后符合分区方案的数据会逐渐移动到对应的分区文件上,因此初开始分区数据是不准确的,待分区方案应用完毕后才能正式使用.

  所以,这种坑爹的事情还是设置定期JOB来执行吧.相关的分区方案设置记录也不能少~~

 

补:

  最开始说差点出大事,这个事情就是,由于业务需求,会有定期归档(滑动分区后truncate),而旧的分区方案最晚一个是左边界到2015-12-31的,所以所有新的数据都存在最后一个分区文件中,如果再晚一段时间,那么最后一个分区文件将被滑动后删除.然后就粗大事了!!!

 

补个代码:

  删除分区的代码,执行后分区方案和分区函数中对应的分区都没有了.

  如果分区中有数据会按照分区方案去进行合并(左边界或者右边界)如果不符合则存放到primary文件组中

ALTER PARTITION FUNCTION [parfunDay]()
    MERGE RANGE ('2016-01-04')

 


推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有