管理識別欄位

適用於:SQL ServerAzure SQL 受控執行個體

此主題說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中管理識別欄位。 當訂閱者插入複寫回發行者時,必須管理識別欄位,以免在訂閱者和發行者上指派相同的識別值。 複寫可以自動管理識別範圍,或者您可以選擇手動處理識別範圍管理。 如需複寫提供之識別範圍管理選項的詳細資訊,請參閱複寫識別欄位

本主題內容

開始之前

建議

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

  • 若要建立可用於多個資料表中或可在不參考任何資料表的情況下從應用程式進行呼叫的自動遞增數字,請參閱 序號

使用 SQL Server Management Studio

在 [新增發行集精靈] 的 [發行項屬性 - <發行項>] 對話方塊的 [屬性] 索引標籤上,指定識別欄位管理選項。 如需使用此精靈的詳細資訊,請參閱建立發行集。 在「新增發行集精靈」中:

  • 如果在 [發行集類型] 頁面中選取 [合併式發行集][具更新訂閱的交易式發行集] ,請選取自動或手動識別範圍管理 (依預設為自動,建議使用)。 發行資料表後,將無法修改其屬性,但是可以修改其他相關屬性。

  • 如果選取其他發行集類型,應將識別範圍管理設定為手動。

在 [發行項屬性 - <發行項>] 對話方塊的 [屬性] 索引標籤上修改識別範圍和閾值,其可於 [發行集屬性 - <發行集>] 對話方塊中提供。 如需有關存取這個對話方塊的詳細資訊,請參閱< View and Modify Publication Properties>。

若要指定識別欄位管理選項

  1. 如果「發行者」在 SQL Server 2005 (9.x) 之前的 SQL Server 版本上執行,請在 [新增發行集精靈] 的 [發行集類型] 頁面中,選取 [合併發行集] 或 [具更新訂閱的交易式發行集]。

  2. [發行項] 頁面中,選取具有識別欄位的資料表。

  3. 按一下 [發行項屬性] ,然後按一下 [設定反白顯示資料表發行項的屬性]

  4. 在 [發行項屬性 - <發行項>] 對話方塊的 [屬性] 索引標籤上,於 [識別範圍管理] 區段中,將 [自動管理識別範圍] 屬性設定為 [自動][手動] (針對執行 SQL Server 2005 (9.x) 或更新版本的發行者) 或是 [True][False] (針對執行 SQL Server 2005 (9.x) 之前的 SQL Server 版本的發行者)。

  5. 如果在步驟 4 中選取了 [自動][True] ,請在下表中輸入選項的值。 如需如何使用這些設定的詳細資訊,請參閱複寫識別欄位中的<指派識別範圍>一節。

    選項 描述
    發行者範圍大小 範圍大小的整數值 (例如 20000)。 請參閱複寫識別欄位中的<指派識別範圍>一節。
    訂閱者範圍大小 範圍大小的整數值 (例如 10000)。 請參閱複寫識別欄位中的<指派識別範圍>一節。
    範圍臨界值百分比 臨界值百分比的整數值 (例如 90 相當於 90%)。 指派新的識別範圍之前,節點處所用的識別值總計百分比。



    注意:必須指定這個值,但只能由下列人員使用:使用佇列更新訂閱的訂閱者;以及執行 SQL Server Compact 或其他舊版 SQL Server 編輯之合併發行集的訂閱者。 如需詳細資訊,請參閱複寫識別欄位中的<指派識別範圍>一節。
    [下一個範圍起始值] 整數值。 唯讀。 下一個範圍的開始值。 例如,如果目前範圍是 5001-6000,則該值為 6001。
    [最大識別值] 整數值。 唯讀。 識別欄位的最大值。 由資料行的基底資料型別決定。
    [遞增] 整數值。 唯讀。 每次插入時,應增加或是減少的識別欄位的值數量:通常設定為 1。
  6. 選取 [確定]。

若要在發行資料表後修改識別範圍和臨界值

  1. 在 [發行集屬性 - <發行集>] 對話方塊的 [發行項] 頁面上,選取具有識別欄位的資料表。

  2. 按一下 [發行項屬性] ,然後按一下 [設定反白顯示資料表發行項的屬性]

  3. 在 [發行項屬性 - <發行項>] 對話方塊的[屬性] 索引標籤上,於 [識別範圍管理] 區段中輸入下列其中一或多個屬性的值:[發行者範圍大小][訂閱者範圍大小][範圍閾值百分比]

  4. 選取 [確定]。

  5. 在 [發行集屬性 - <發行集>] 對話方塊上,按一下 [確定]。

使用 TRANSACT-SQL

您可以在建立發行項時,使用複寫預存程序來指定識別範圍管理選項。

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

  1. 在發行集資料庫的發行者上,執行 sp_addarticle。 如果發行的來源資料表有識別欄位,請針對 @identityrangemanagementoption 指定 auto的值、針對 @pub_identity_range指定指派給發行者的識別值範圍、針對 @identity_range指定指派給每一個訂閱者的識別值範圍,以及針對 @threshold指定在指派新的識別範圍之前所使用的總識別值百分比。 如需定義發行項的詳細資訊,請參閱定義發行項

    注意

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

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

  1. 在發行集資料庫的發行者上,執行 sp_addarticle。 針對 @identityrangemanagementoption 指定 manual的值。 如需定義發行項的詳細資訊,請參閱定義發行項

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

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

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

    注意

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

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

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

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

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

    如需定義發行項的詳細資訊,請參閱定義發行項

  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的值。

另請參閱

@loopback_detection
Replication System Stored Procedures Concepts
複寫識別資料行