文章編號: 308266 - 上次校閱: 2003年10月16日 - 版次: 3.2

PRB: 非-交集當 SQL Server 處理不同的層代批次中的子系和父層代

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

徵狀

INSERT 命令至 「 訂閱者子資料表的損失,可能就會發生在下列情況下:
  • 合併複寫拓樸是階層發行者、 一或多個重新發行者與一或多個 「 訂閱者 」。

  • 一或多個父和子發行項存在於合併式複寫發行集有定義它們之間的聯結篩選。

  • NOT FOR 複寫外部索引鍵條件約束有重新發行者和訂閱者之間這些兩個發行項關聯性。

  • 插入到子文件中產生與它關聯的父代分開發生由一個以上的值中指定 -DownloadGenerationsPerBatch 合併代理程式參數。所以,合併代理程式處理子產生與它關聯的父代分開的層代的批次中。

  • 沒有處理發行者和重新發行者之間,以及之間的子系和父代批次處理合併的中斷。

其他可行方案

合併複寫架構並不提供機制來保持父和子變更一起跨層代批次界限。若要解決這個問題,您可以:
  • 增加-UploadGenerationsPerBatchDownloadGenerationsPerBatch 合併代理程式 」 的參數,其最大值為 2000,它幾乎可消除可能的處理分開父發行項的層代的批次中的子文件產生。 -或者-

  • 移除外部索引鍵條件約束,在重新發行者上的 [NOT FOR 複寫] 屬性。在這種情況下 「 合併代理程式 」 是不能夠資料列插入子文件上,因為沒有任何關聯的父發行項資料列。請記住,但是,那里可能效能降低的情況與相關聯這項變更。如果 「 合併代理程式 」 無法插入這些子資料列,這些變更必須重"試"。合併代理程式重試處理會很少有效率於其標準模式的批次處理。

其他相關資訊

以下是更詳細的一連串的事件,就在其下會發生這個問題。請注意預設值 (經常在這個問題上的哪些熊) 是 100-UploadGenerationsPerBatchDownloadGenerationsPerBatch 合併代理程式參數。在下列範例中假設-UploadGenerationsPerBatchDownloadGenerationsPerBatch 參數已不被竄改。
  • 插入到子系和父發行項會在最上層的發行者發生。子文件是在具有稱為父發行項的另一個資料表的外部索引鍵條件約束的出版物中的任何發行項。 這些兩個文件由合併複寫聯結篩選器相關並在實際伺服器端外部索引鍵條件約束在重新發行者和訂閱者均標有 NOT FOR 複寫屬性。您可以執行 sp_help 預存程序來判斷條件約束是否不複寫,是否您不確定資料表上。

  • 插入到子資料表 (例如) 發生在層代 110。插入至父資料表 (例如) 發生在層代 250。請注意這些層代之間分隔大於-DownloadGenerationsPerBatch 參數。

  • 發行者重新發行者合併代理程式處理包含層代 101 到 200 的層代的批次。成功處理此批次及相關的變更的下載,以重新發行者那些層代中之後, 中斷發行者重新發行者合併代理程式 」。在 「 合併代理程式 」 可以處理層代 201 到 300,(包含父發行項變更) 之前,就會發生中斷。中斷可能是因為網路連線能力、 查詢逾時等的遺失。請注意 「 合併代理程式 」 可以認可沒有父資料列的 [子文件] 列,因為伺服器端外部索引鍵條件約束標示為 NOT FOR 複寫,藉此 「 擱置 」 條件約束的核取。

  • 發行者重新發行者合併代理程式 」 開始重新處理之前重新發行者訂閱者合併代理程式 」 開始合併工作階段。它就會開始重新發行者從下載的變更程的序。

  • 當重新發行者訂閱者合併代理程式 」 處理產生 110 (子系文章 INSERT) 評估存在子發行項和父發行項之間的聯結篩選。因為父發行項的變更有不尚未抵達重新發行者,「 合併代理程式 」 會決定這些子 INSERT 做不"限定"聯結篩選。「 合併代理程式 」 下載 MSmerge_genhistory 資料列 (代表該層代中的層代 110,但不變更。這個合併代理程式 」 成功完成其工作階段。

  • 「 合併代理程式 」 的發行者和重新發行者之間的後續執行成功地處理包含父發行項插入 (層代 201 到 300) 的層代的批次,並認可這些變更,在重新發行者。

  • 最後,後續的 「 合併代理程式工作階段重新發行者和訂閱者之間會視為層代 250,並下載父發行項插入至訂閱者。不過,因為訂閱者也知道產生 110 (子文件產生),「 合併代理程式 」 並不重新評估子發行項的磁碟分割。

    這會產生正確的父發行項資料列被存在於 「 訂閱者與孤兒 」 子資料列,在重新發行者。


這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
關鍵字:?
kbmt kbpending kbprb KB308266 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:308266? (http://support.microsoft.com/kb/308266/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。