SQL Server 可更新訂閱事務(wù)復(fù)制的identify列自動(dòng)分配取值范圍
前提:
1. 發(fā)布article為含identify列的表A。
2. 設(shè)置為自動(dòng)分配。
3. 設(shè)置發(fā)布的分配范圍 10000。
4. 設(shè)置訂閱的分配范圍 1000。
5. 設(shè)置最大百分比 80。
問題的提出:
1. 在訂閱端第一次插入700條數(shù)據(jù)(identify字段 10001-10700),正常,并且能同步到發(fā)布端。
2. 繼續(xù)一次性插入400條數(shù)據(jù),報(bào)錯(cuò),顯示identify列超出范圍。
原因分析:
1. 訂閱的identify范圍是由代理自動(dòng)分配的,每次分配1000,當(dāng)使用超過1000的80%時(shí)候,代理會(huì)重新分配范圍。
2. 既然是自動(dòng)分配,那位什么會(huì)出錯(cuò)呢?
3. 請注意,重新分配是由代理執(zhí)行的,所以代理首先要知道你需要重新分配,本例中當(dāng)?shù)诙螠?zhǔn)備插入400條數(shù)據(jù)時(shí),如果不重新分配范圍,就會(huì)發(fā)生插入值超出范圍的錯(cuò)誤。因?yàn)椴迦氩僮骱芸,?shù)據(jù)還沒來得及同步到發(fā)布端,也就是訂閱還沒來得及告訴代理自己需要重新分配范圍的時(shí)候,馬上就達(dá)到訂閱允許的范圍,錯(cuò)誤就發(fā)生了。
問題的解決:
1. 設(shè)置最大百分比,給插入操作的identify范圍一個(gè)緩存。例如本例設(shè)置的80%,意思就是說留有20%的緩存,只要超過80%而達(dá)到這20%的緩存區(qū)中,在同步的時(shí)候代理就會(huì)重新分配。
2. 緩存區(qū)要適當(dāng)?shù)拇笠恍,要不然緩存區(qū)也會(huì)在在瞬間超出而出錯(cuò)。就像本例中一樣,200的緩存區(qū)還沒來得及同步就達(dá)到極限了。
3. 獲得大的緩存區(qū),在百分比不變的情況下,可以通過加大分配范圍來達(dá)到, 如果把分配范圍設(shè)置成100000,那么20%也有20000條記錄的緩存區(qū)。這個(gè)可以根據(jù)具體項(xiàng)目需求進(jìn)行設(shè)置。
核心關(guān)注:銳祥ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。