zoukankan      html  css  js  c++  java
  • 事务复制中的分区表

    背景

      事务复制中发布表有分区表,如何配置发布项,使分区结构传播到订阅库?有何限制?

    测试环境

    Code

    加载测试数据之后的数据分布如下:

      image

    前置条件

    • 如果分区方案使用的不只是PRIMARY文件组,首先要保证分发和订阅具有同样的文件组。所以我的测试中订阅库会添加同样三个文件组。
    • 在添加分区表为发布项时,需要指定Copy table partitioning schemes和Copy index partitioning schemes为True,Copy file group associations也设定为True。三者的含义就是字面意思。

                  image

    使用分析

        1. 满足“前置条件”建立的事务复制,分区表(包括数据、分区函数和分区架构)成功发布并传播到订阅库。但是下列命令不会从发布库传播到订阅库:

             ALTER INDEX 的 ALTER PARTITION FUNCTION、ALTER PARTITION SCHEME 或 REBUILD WITH PARTITION。

           在订阅库执行如下语句,新增的数据可以传播到订阅库,但是Partition Function & Scheme的修改没有传播到订阅库:

    Code

          需要在订阅库执行上面的两个Alter,才能与发布库一致。如果使用是非PRIMARY文件组,则还需要在订阅库上先增加同样的文件组。

    分割分区后,发布和订阅的数据分布是一样,如下:

      image

    2. 对事务复制中的分区表启用PARTITION SWITCH,使得发布库PARTITION SWITCH传播到订阅库,需要满足如下条件

    • 在对订阅端执行Switch前,需要保证订阅端面也存在需要移入或者移出的表和数据。比如将分区表中的某个分区切到中间表,而两者需要存在同样结构的中间表。
    • 发布和订阅库的分区表,需要具有同样的分区表定义。因为订阅库的分区表可以与发布库的定义不一致,但如果需要发布库PARTITION SWITCH传播到订阅库,则要一致。
    • 发布属性中@allow_partition_switch和@replicate_partition_switch设定为TRUE。

          前者允许对已发布的数据库执行 ALTER TABLE…SWITCH 语句,后者使得对已发布的数据库执行的 ALTER TABLE…SWITCH 语句传播到订阅服务器。

      执行如下语句修改发布属性并将Partition 4切到临时表:

    Code

    执行后,订阅和发布的数据都成功切出。现在再尝试加载分区,也就是切回来,结果也是成功的:

    Code

    3. 对2.的一点小变通,也是我最想要的一个功能:发布可以利用Switch移出过时分区进行历史归档,而订阅不受影响仍然保留过时的历史数据用于查询或者备份,且事务复制正常。

       发布属性中@allow_partition_switch和@replicate_partition_switch,将前者设定为true,后者设定为false。这样允许对已发布的数据库执行 ALTER TABLE…SWITCH ,但传播到订阅库。

       现在我假设Partiton 4过期了,需要移出到临时表,然后再进行归档处理,但我希望订阅库的Partition 4不被切出,且事务复制不受影响。

    Code

    执行完后,一切都如预期

    发布的分区表结构: Partition 4成功切出去了

     image

    订阅的分区表结构:发布的Switch并为对它造成影响

      image

    新增的记录 '140714001074904686' 也成功的从发布端传播到了订阅端。事务复制运行也正常。

    总结

    1. 事务复制中的分区表,对发布和项目属性做几个小的更改,然后就可以把它当作普通分区表来管理了。

    2. 事务复制实现读写分离的架构中,发布库中的分区表需要将非活跃数据做归档用以提升性能,而某些应用又需要查询全部的数据,配置一下发布属性也能符合使用。

  • 相关阅读:
    selenium+java利用AutoIT实现文件上传
    java+selenium自动化遇到confirm弹窗,出现NoAlertPresentException: no alert open
    Appium遇到问题:
    selenium2+java切换窗口
    nodejs
    连续12天的加班工作总结-根据客户选择来生成后续表单页面
    最近三家公司面试的总结吐槽及一点点总结
    nodeJs-autoMerge
    nodeJs-autoBulid
    Angular 学习笔记——ng-Resource1
  • 原文地址:https://www.cnblogs.com/Joe-T/p/3848899.html
Copyright © 2011-2022 走看看