亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Replication的犄角旮旯(三)--聊聊@bitmap

2024-07-21 02:51:01
字體:
來源:轉載
供稿:網友
Replication的犄角旮旯(三)--聊聊@bitmap

《Replication的犄角旮旯》系列導讀

Replication的犄角旮旯(一)--變更訂閱端表名的應用場景

Replication的犄角旮旯(二)--尋找訂閱端丟失的記錄

Replication的犄角旮旯(三)--聊聊@bitmap

Replication的犄角旮旯(四)--關于事務復制的監控

Replication的犄角旮旯(五)--關于復制identity列

Replication的犄角旮旯(六)-- 一個DDL引發的血案(上)(如何近似估算DDL操作進度)

Replication的犄角旮旯(七)-- 一個DDL引發的血案(下)(聊聊logreader的延遲)

Replication的犄角旮旯(八)-- 訂閱與發布異構的問題

Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,賦予訂閱活力的工具

---------------------------------------華麗麗的分割線--------------------------------------------

關于replication中的bitmap,貌似介紹的文檔不多;本文將從對此參數做一初步的簡析,并介紹如何利用這個參數處理一些特定環境下的問題;

再次強調,本方法雖多次經受驗證無誤,但多次被MS supporter們建議不要嘗試使用此方法,還望各位DBA三思!

先來看看@bitmap在哪里出現

  我們先創建一個表的復制訂閱,表結構如下

 1 USE [test_aaa] 2 GO 3  4 /****** Object:  Table [dbo].[test_b]    Script Date: 2014/1/23 16:12:28 ******/ 5 SET ANSI_NULLS ON 6 GO 7  8 SET QUOTED_IDENTIFIER ON 9 GO10 11 SET ANSI_PADDING ON12 GO13 14 CREATE TABLE [dbo].[test_b](15     [id1] [int] NOT NULL,16     [id2] [int] NOT NULL,17     [id3] [int] NOT NULL,18     [id4] [int] NOT NULL,19     [name] [varchar](10) NULL,20     [remark1] [varchar](100) NULL,21     [remark2] [varchar](100) NULL,22     [remark3] [varchar](100) NULL,23     [remark4] [varchar](100) NULL,24  CONSTRAINT [pk_id1_id2_id3_id4] PRIMARY KEY CLUSTERED 25 (26     [id1] ASC,27     [id2] ASC,28     [id3] ASC,29     [id4] ASC30 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]31 ) ON [PRIMARY]32 33 GO34 35 SET ANSI_PADDING OFF36 GO
View Code

  到訂閱庫的存儲過程中,找到sp_MSupd_dbotest_b,生成腳本

 1 USE [test_byxl1] 2 GO 3 /****** Object:  StoredProcedure [dbo].[sp_MSupd_dbotest_b]    Script Date: 2014/1/23 14:28:46 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 ALTER procedure [dbo].[sp_MSupd_dbotest_b]      9     @c1 int = NULL,     10     @c2 int = NULL,     11     @c3 int = NULL,     12     @c4 int = NULL,     13     @c5 varchar(10) = NULL,     14     @c6 varchar(100) = NULL,     15     @c7 varchar(100) = NULL,     16     @c8 varchar(100) = NULL,     17     @c9 varchar(100) = NULL,     18     @pkc1 int = NULL,     19     @pkc2 int = NULL,     20     @pkc3 int = NULL,     21     @pkc4 int = NULL,     22     @bitmap binary(2)23 as24 begin   25     if (substring(@bitmap,1,1) & 1 = 1) or26        (substring(@bitmap,1,1) & 2 = 2) or27        (substring(@bitmap,1,1) & 4 = 4) or28        (substring(@bitmap,1,1) & 8 = 8)29     begin  30         update [dbo].[test_b] 31         set  [id1] = case substring(@bitmap,1,1) & 1 when 1 then @c1 else [id1] end,32              [id2] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [id2] end,     33              [id3] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [id3] end,     34              [id4] = case substring(@bitmap,1,1) & 8 when 8 then @c4 else [id4] end,     35              [name] = case substring(@bitmap,1,1) & 16 when 16 then @c5 else [name] end,36              [remark1] = case substring(@bitmap,1,1) & 32 when 32 then @c6 else [remark1] end,     37              [remark2] = case substring(@bitmap,1,1) & 64 when 64 then @c7 else [remark2] end,     38              [remark3] = case substring(@bitmap,1,1) & 128 when 128 then @c8 else [remark3] end,     39              [remark4] = case substring(@bitmap,2,1) & 1 when 1 then @c9 else [remark4] end40         where [id1] = @pkc1   and [id2] = @pkc2   and [id3] = @pkc3   and [id4] = @pkc4 41         if @@rowcount = 042             if @@microsoftversion>0x0732000043                 exec sp_MSreplraiserror 20598 44     end   45     else46     begin  47         update [dbo].[test_b] 48         set [name] = case substring(@bitmap,1,1) & 16 when 16 then @c5 else [name] end,     49             [remark1] = case substring(@bitmap,1,1) & 32 when 32 then @c6 else [remark1] end,     50             [remark2] = case substring(@bitmap,1,1) & 64 when 64 then @c7 else [remark2] end,     51             [remark3] = case substring(@bitmap,1,1) & 128 when 128 then @c8 else [remark3] end,     52             [remark4] = case substring(@bitmap,2,1) & 1 when 1 then @c9 else [remark4] end53         where [id1] = @pkc1   and [id2] = @pkc2   and [id3] = @pkc3   and [id4] = @pkc4 54         if @@rowcount = 055             if @@microsoftversion>0x0732000056                 exec sp_MSreplraiserror 20598 57     end  58 end   
View Code

  看到這么多@bitmap,是不是有種升仙的感覺?

  @bitmap 是binary類型,即二進制串;簡單來說,它是用來表示所操作的字段位置的參數,通過@bitmap,分發代理從distribution.dbo.msrepl_commands中讀取命令時(update操作),才會知道哪些列進行了更新;

  我們先來解析一下這個存儲過程;

1、根據表結構的code,我們知道這個表共有9個字段,其中id1~id4被定義為聯合主鍵;

由于binary(1)表示1個字節(8位的2進制),因此我們表示9個字段的@bitmap就只能用binary(2)來容納了;

  其次,有的童鞋說,他們看到的update存儲過程只有一個程序段,而我的例子中有兩部分(29行~44行、46行~57行)。這個是由于存在聯合主鍵造成的;即當被訂閱的表中含有聯合主鍵(2個或以上的字段一同作為主鍵)的時候才會出現兩段代碼,前者是更新主鍵列,后者則是更新非主鍵列;

2、根據更新列的位置不同,@bitmap中的對應的值也不同;

  substring(@bitmap,1,1) & 1 = 1 表示第一列有更新;

 substring(@bitmap,1,1) & 2 = 2 表示第二列有更新;

  substring(@bitmap,1,1) & 4 = 4 表示第三列有更新;

以此類推

  substring(@bitmap,1,1) & 128 = 128 表示第八列有更新;

那第九位呢? =256么? 由于1個字節只有8位,而128=2^7,當第九位出現時就要進位了

  substring(@bitmap,2,1) & 1 = 1

怎么樣,不難理解吧?

定義4個字段的聯合主鍵只是為了舉例說明的時候方便一些,實際的生產環境中可能不太經常能遇到;

再來看一下@bitmap在哪里可以獲取到呢?我先更新一條記錄,更新之前先關閉相應的分發代理(此處不需要分發命令應用到訂閱端)

我們去distribution里看看具體的分發命令(具體做法請見《Replication的犄角旮旯(二)--尋找訂閱端丟失的記錄》)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品稀缺呦系列在线| 久久久免费高清电视剧观看| 国产精品一区二区久久精品| 成人黄色网免费| 亚洲欧美日韩天堂一区二区| 一区二区三区四区精品| 色婷婷综合成人av| 国产精品欧美日韩久久| 日韩电影大全免费观看2023年上| 国产精品日韩在线| 亚洲在线一区二区| 91精品国产91久久久久福利| 中文字幕av一区| 亚洲男人的天堂在线| 久久电影一区二区| 日韩精品免费看| 亚洲欧美激情四射在线日| 亚洲国产精品va| 亚洲精品久久久久久久久久久久久| 精品久久久久久| 亚洲欧美制服丝袜| 成人精品一区二区三区电影免费| 亚洲男人天天操| 午夜精品一区二区三区在线视| 亚洲自拍偷拍一区| 精品偷拍各种wc美女嘘嘘| 亚洲成人教育av| 日韩欧美aaa| 亚洲视频专区在线| 91精品视频观看| 一本大道亚洲视频| 国产精品成人观看视频国产奇米| 国产精品免费视频久久久| 97在线视频免费播放| 青青草原成人在线视频| 欧美国产日产韩国视频| 亚洲电影天堂av| 色视频www在线播放国产成人| 国产成人精品在线观看| 国产免费一区二区三区香蕉精| 久久的精品视频| 亚洲的天堂在线中文字幕| 麻豆乱码国产一区二区三区| 精品久久久av| 日本精品一区二区三区在线| 中文字幕亚洲字幕| 91免费精品国偷自产在线| 久久影视三级福利片| 国产亚洲视频中文字幕视频| 国产精品久久久久久搜索| 国产91av在线| 亚洲香蕉av在线一区二区三区| 国产视频久久久久久久| 精品色蜜蜜精品视频在线观看| 96精品久久久久中文字幕| 国产91色在线|免| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美麻豆久久久久久中文| 69国产精品成人在线播放| 国产午夜精品一区理论片飘花| 欧美小视频在线| 日韩精品视频免费| 欧美激情在线有限公司| 日本精品久久中文字幕佐佐木| 久久在精品线影院精品国产| 久久精品久久久久电影| 国产亚洲精品va在线观看| 国产噜噜噜噜久久久久久久久| 日韩中文字幕在线| 91精品国产亚洲| 欧美高清理论片| 国产裸体写真av一区二区| 精品国产一区二区三区久久久狼| 国产乱肥老妇国产一区二| 国产在线播放91| 中文字幕日本欧美| 久久精品亚洲一区| 久久99久久久久久久噜噜| 亚洲国产精品99久久| 国产午夜精品美女视频明星a级| 蜜臀久久99精品久久久无需会员| 日韩精品免费观看| 最近2019中文免费高清视频观看www99| 久久91精品国产91久久久| 欧美专区国产专区| 久久久在线视频| 国自在线精品视频| 久久久久久久久久久免费精品| 久久久亚洲网站| 激情亚洲一区二区三区四区| 亚洲毛片在线免费观看| 欧美日韩亚洲精品一区二区三区| 亚洲网址你懂得| 欧美日韩在线视频首页| 久久69精品久久久久久久电影好| 国产欧美精品在线| 国产精品爽黄69天堂a| 91久久国产精品| 欲色天天网综合久久| 午夜精品视频网站| 亚洲国产精品悠悠久久琪琪| 这里只有精品在线观看| 国产suv精品一区二区| 亚洲国产精品va在看黑人| 国产偷亚洲偷欧美偷精品| 国产在线拍揄自揄视频不卡99| 97热在线精品视频在线观看| 久久国产精品久久久久久久久久| 欧美日韩成人免费| 亚洲午夜精品视频| 日韩av在线网址| 久久在线精品视频| xxx成人少妇69| 精品亚洲夜色av98在线观看| 成人在线国产精品| 日韩在线免费视频| 欧美国产在线电影| 日韩最新免费不卡| 高跟丝袜欧美一区| 一区二区在线视频| 欧美大片在线看免费观看| 亚洲男人天堂2019| 亚洲精品视频久久| 国产精品久久久久久久久影视| 久久精彩免费视频| 国产+人+亚洲| 影音先锋欧美在线资源| 日韩国产欧美区| 狠狠操狠狠色综合网| 国产一区二区三区四区福利| 日本国产高清不卡| 日本精品va在线观看| 日韩黄色在线免费观看| 亚洲韩国日本中文字幕| 成人淫片在线看| 精品久久久999| 亚洲一区二区久久| 亚洲欧洲美洲在线综合| 秋霞av国产精品一区| 国产一区二区三区在线| 久久韩国免费视频| 庆余年2免费日韩剧观看大牛| 高清欧美一区二区三区| 中文字幕欧美视频在线| 国产精品吴梦梦| 欧美成人一区在线| 亚洲欧美制服第一页| 欧美成人四级hd版| 国产精品狠色婷| 国产视频一区在线| 中文字幕亚洲图片| 精品久久久久久久大神国产| 久久精彩免费视频| 亚洲成人精品在线| 国产精品免费一区二区三区都可以| 国产精品久久一区主播| 亚洲成色999久久网站| 欧美成人精品不卡视频在线观看| 久久免费视频网站| 国产成人精品在线播放| 成人日韩av在线| 国产精品入口福利| 97视频在线观看视频免费视频| 国产v综合ⅴ日韩v欧美大片|