Share via


如何:管理識別欄位 (複寫 Transact-SQL 程式設計)

當訂閱者插入複寫回發行者時,必須管理識別欄位,以免在訂閱者和發行者上指派相同的識別值。複寫可以自動管理識別範圍,或者您可以選擇手動處理識別範圍管理。您可以在建立發行項時,使用複寫預存程序來指定識別範圍管理選項。如需有關複寫提供之識別範圍管理選項的詳細資訊,請參閱<複寫識別欄位>。

[!附註]

在一個以上發行集中發行資料表時,您必須針對兩個發行集指定相同的識別範圍管理選項。如需詳細資訊,請參閱<發行資料和資料庫物件>中的「在多個發行集中發行資料表」。

在針對交易式發行集定義發行項時,啟用自動識別範圍管理

  • 在發行集資料庫的發行者上,執行 sp_addarticle。如果發行的來源資料表有識別欄位,請針對 @identityrangemanagementoption 指定 auto 的值、針對 @pub_identity_range 指定指派給發行者的識別值範圍、針對 @identity_range 指定指派給每一個訂閱者的識別值範圍,以及針對 @threshold 指定在指派新的識別範圍之前所使用的總識別值百分比。如需有關定義發行項的詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。

    [!附註]

    請確定識別欄位的資料類型夠大,足以支援指派給所有訂閱者的識別總範圍。

在針對交易式發行集定義發行項時,停用自動識別範圍管理

  1. 在發行集資料庫的發行者上,執行 sp_addarticle。針對 @identityrangemanagementoption 指定 manual 的值。如需有關定義發行項的詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。

  2. 在訂閱者上指派識別發行項欄位的範圍,以免產生更新訂閱者的衝突。如需詳細資訊,請參閱<複寫識別欄位>主題中的<為手動識別範圍管理指派範圍>一節。

在針對合併式發行集定義發行項時,啟用自動識別範圍管理

  • 在發行集資料庫的發行者上,執行 sp_addmergearticle。如果發行的來源資料表有識別欄位,請針對 @identityrangemanagementoption 指定 auto 的值、針對 @pub_identity_range 指定指派給伺服器訂閱的識別值範圍、針對 @identity_range 指定指派給發行者和每一個用戶端訂閱的識別值範圍,以及針對 @threshold 指定在指派新的識別範圍之前所使用的總識別值百分比。如需有關要指派哪些新識別範圍的詳細資訊,請參閱<複寫識別欄位>主題中的「指派識別範圍」。如需有關定義發行項的詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。

    [!附註]

    請確定識別欄位的資料類型夠大,足以支援指派給所有訂閱者的識別總範圍,特別是具有伺服器訂閱的訂閱者

在針對合併式發行集定義發行項時,停用自動識別範圍管理

  1. 在發行集資料庫的發行者上,執行 sp_addmergearticle。針對 @identityrangemanagementoption 指定下列其中一個值:

    • manual - 必須手動指派識別範圍來更新訂閱者。

    • none - 發行者上的識別欄位將不會定義為訂閱者上的識別欄位。

    如需有關定義發行項的詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。

  2. 在訂閱者上指派識別發行項欄位的範圍,以免產生更新訂閱者的衝突。

針對快照式或交易式發行集中的現有發行項,變更自動識別範圍管理設定

  1. 在發行集資料庫的發行者上,執行 sp_helparticle,並記下結果集中 identityrangemanagementoption 的值。如果此值為 0,不會啟用自動識別範圍管理。

  2. 如果結果集中 identityrangemanagementoption 的值為 1,請依照以下方式變更設定:

    • 若要變更指派的識別範圍,請在發行集資料庫的發行者上,執行 sp_changearticle。針對 @property 指定 identity_rangepub_identity_range 的值,以及針對 @value 指定新的範圍值。

    • 若要變更指派新範圍的臨界值,請在發行集資料庫的發行者上,執行 sp_changearticle。針對 @property 指定 threshold 的值,並針對 @value 指定新的臨界值。

針對合併式發行集中的現有發行項,變更自動識別範圍管理設定

  1. 在發行集資料庫的發行者上,執行 sp_helpmergearticle,並記下結果集中 identity_support 的值。如果此值為 0,不會啟用自動識別範圍管理。

  2. 如果結果集中 identity_support 的值為 1,請依照以下方式變更設定:

    • 若要變更指派的識別範圍,請在發行集資料庫的發行者上,執行 sp_changemergearticle。針對 @property 指定 identity_rangepub_identity_range 的值,以及針對 @value 指定新的範圍值。

    • 若要變更指派新範圍的臨界值,請在發行集資料庫的發行者上,執行 sp_changemergearticle。針對 @property 指定 threshold 的值,並針對 @value 指定新的臨界值。如需有關要指派哪些新識別範圍的詳細資訊,請參閱<複寫識別欄位>主題中的「指派識別範圍」。

    • 若要停用自動識別範圍管理,請在發行集資料庫的發行者上,執行 sp_changemergearticle。針對 @property 指定 identityrangemanagementoption 的值,以及針對 @value 指定 manualnone 的值。