设为首页 收藏本站
查看: 684|回复: 0

[经验分享] SQL Server 2005中的分区表(四):删除(合并)一个分区

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-13 09:21:56 | 显示全部楼层 |阅读模式
在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里。具体的分区方式为:
    第1个小表:2010-1-1以前的数据(不包含2010-1-1)。
    第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据。
    第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。
    第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。
    第5个小表:2013-1-1(包含2013-1-1)之后的数据。
    分区函数的代码如下所示:

  • CREATE PARTITION FUNCTION partfunSale (datetime)  AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')




    假设我们在创建分区表之后发现,2010年以前的数据并不多,完全可以将它们与2010年的数据进行合并,放在同一个分区里,也就是说,具体的分区方式改为:

    第1个小表:2011-1-1以前的数据(不包含2011-1-1)。
    第2个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。
    第3个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。
    第4个小表:2013-1-1(包含2013-1-1)之后的数据。


    由于上面的需求更改了数据分区的条件,因此,我们必须要修改分区函数,因为分区函数的作用就是要来告诉SQL Server怎么存放数据的。只要分区函数修改了,SQL Server会自动将数据重新分配,按照新的分区函数指定的方式来存储数据。
    先假设我们还没有创建过分区表,要满足上面的条件,我们必须要写出如下代码的创建分区函数的SQL语句

  • CREATE PARTITION FUNCTION partfunSale (datetime)
  • AS RANGE RIGHT FOR VALUES ('20110101','20120101','20130101')



    比较一个新的分区函数和老的分区函数,看看他们有什么区别?
    的确,我们很容易就可以发现,老的分区函数里多了一个分界值——也就是'20100101'。那么,修改老的分区函数,事实上就是将这分界值删除。简单一点说,删除(合并)一个分区,事实上就是在分区函数中将多余的分界值删除。

    删除分区函数中的分界值,也就是修改分区函数的方法如下所示:

  • ALTER PARTITION FUNCTION partfunSale()
  •     MERGE RANGE ('20100101')



    其中:
    1、ALTER PARTITION FUNCTION 意思是修改分区函数
    2、partfunSale()为分区函数名
    3、MERGE RANGE意思是合并界限。事实上,合并界限和删除分界值是一个意思。

    我们可以在修改分区函数时先统计一下各物理分区中的记录总数,在修改分区之后,再统计一下各物理分区中的记录总数,看一下修改分区函数后的数据变化情况,代码如下所示:

  • --统计所有分区表中的记录总数
  • select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)
  • --原来的分区函数是将2010-1-1之前的数据放在第1个分区表中,将2010-1-1至2011-1-1之间的数据放在第2个分区表中
  • --现在需要将2011-1-1之前的数据都放在第1个分区表中,也就是将第1个分区表和第2个分区表中的数据合并
  • --修改分区函数
  • ALTER PARTITION FUNCTION partfunSale()
  •     MERGE RANGE ('20100101')
  • --统计所有分区表中的记录总数
  • select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)



    运行结果如下图所示:
1.jpg

    现在还有一个问题,就是通过修改分区函数合并数据之后,数据都存放在哪里了?在修改之前,数据分别存放在文件组Sale2009和Sale2010中,修改之后,数据放到哪里去了呢?
    事实上,在修改分区函数之后,SQL Server也会自动修改分区方案,将处于两个物理分区中的数据放在同一个物理分区里了。可以通过查看分区方案的方式来查看数据具体的存放位置。
    查看分区方案的方式为:在SQL Server Management Studio中,选择数据库-->存储-->分区方案,右击分区方案名,在弹出的菜单中选择“编写分区方案脚本为”-->CREATE到-->新查询编辑器窗口
    然后在新查询编辑器窗口可以看到下图代码。
2.jpg
    从上图中可以看出,分区方案将原来Sale2010文件组中的数据合并到了Sale2009文件组中。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23627-1-1.html 上篇帖子: SQL Server 2005中的分区表(三):将普通表转换成分区表 下篇帖子: SQL Server 2005中的分区表(五):添加一个分区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表