複寫限制
當搭配 Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) 訂閱者使用合併式複寫時,對於發行集有幾項限制。本節主要說明這些限制。
訂閱者端的結構描述變更限制
您可以對訂閱者端執行某些結構描述變更,但不是所有的項目都能變更。下表說明可以和不可以對訂閱者端執行的結構描述變更。
動作 | 在複寫資料表上允許 | ||
---|---|---|---|
刪除資料表 |
否 |
||
重新命名資料表 |
否 |
||
新增/卸除/移除資料行 |
否 |
||
變更識別資料行的種子或遞增值 |
是 |
||
新增或卸除預設值 |
是 |
||
新增或卸除主索引鍵 |
否 |
||
新增或卸除外部索引鍵 |
否 |
||
新增或卸除索引
|
是 |
||
重新命名索引 |
是 |
重要事項: |
---|
不能對系統資料表進行結構描述變更。 |
其他要求
下列規則適用於 SQL Server Compact Edition 訂閱者︰
- 記憶體耗用量
在同步處理作業期間請求重新初始化之後,SQL Server Compact Edition 資料庫可能會暫時增加到實際資料庫的兩倍大小,但在同步處理完成之後會縮小 (根據自動壓縮原則)。 - 訂閱篩選驗證
篩選驗證讓發行者可以在同步處理資料前,驗證訂閱者的篩選值。如果訂閱者端的篩選值已經變更,發行者會要求對訂閱者端重新初始化。當與 SQL Server 2005 同步處理資料時,SQL Server Compact Edition 可以使用篩選驗證。附註: HostName 屬性指定訂閱的動態篩選值。如果您要透過指定新的 HostName 屬性來變更「訂閱者」的動態篩選值,則必須在同步處理前呼叫 Reinitialize 方法。 - 區分大小寫
SQL Server Compact Edition 資料庫不區分大小寫。在 SQL Server Compact Edition 資料庫中看待物件和資料的方式和在 SQL Server 資料庫中不同。例如,MYTABLE 和 mytable 這兩個資料表在區分大小寫的 SQL Server 資料庫中會被視為不同的物件,但在 SQL Server Compact Edition 資料庫中,相同的資料表名稱卻會造成命名衝突。同樣的,MYVALUE 和 myvalue 這兩個值在 SQL Server Compact Edition 中會造成主索引鍵違規,因為它們被視為是相同的值,但在區分大小寫的 SQL Server 資料庫中,這兩個值卻不會造成違規。 - 資料表的資料行數
SQL Server Compact Edition 會配置七個系統資料行,以供追蹤之用。但是,這些系統資料表不計入資料行數的限制中。 - NOT FOR REPLICATION 條件約束
SQL Server Compact Edition 不支援 NOT FOR REPLICATION 選項。請勿使用此選項建立條件約束。如果資料表中的條件約束有 NOT FOR REPLICATION 選項,請移除該條件約束,然後再重新建立它。如果未指定 NOT FOR REPLICATION 選項,該條件約束仍會在 SQL Server Compact Edition 訂閱者上建立,但不會包含 NOT FOR REPLICATION 語法。 - 連接逾時
只要在使用者可設定的逾時期間內還原連線,您就可以從上次成功傳送的資料區塊重新啟動,藉此復原通訊失敗的 SQL Server Compact Edition 訂閱。這可讓您在基礎傳輸不穩定或暫時無法使用的情況下,仍然能夠進行同步處理。 - 快照集
SQL Server Compact Edition 支援預設和其他快照集位置選項。若要指定其他快照集位置,您可以使用 sp_addmergepublication 預存程序或使用 SQL Server Management Studio,藉此變更現有發行集的屬性。- 使用 sp_addmergepublication 預存程序
將 @snapshot\_in\_defaultfolder 選項設為 FALSE,以及設定 @alt\_snapshot\_folder= 快照集其他資料夾的位置。 - 變更現有發行集的發行集屬性
在發行集之 [屬性] 對話方塊的 [快照集] 區段上,清除 [將檔案放在預設資料夾] 核取方塊,選取 [將檔案放在下列資料夾中] 核取方塊,然後指定新的位置。
附註: SQL Server Compact Edition 不支援壓縮的快照集選項。 - 使用 sp_addmergepublication 預存程序
如需快照集的詳細資訊,請參閱<設定快照集資料夾>。
不會傳播至 SQL Server Compact Edition 訂閱者的資訊
您可以在 SQL Server 發行集中包括下列項目,但它們不會傳播至 SQL Server Compact Edition 訂閱者︰
- CHECK 條件約束
- 擴充屬性
- 預存程序
- 檢視
- 使用者自訂函數
- 觸發程序
因為 SQL Server Compact Edition 複寫不能傳播這些項目,您必須在以 SQL Server Compact Edition 為基礎的應用程式中實作相等的邏輯。如此可以確保 SQL Server Compact Edition 資料庫與 SQL Server 資料庫維持一致。例如,如果 SQL Server 資料庫包括 CHECK 條件約束,以 SQL Server Compact Edition 為基礎的應用程式應該在應用程式程式碼中實作對應的檢查。
在本機 SQL Server Compact Edition 資料庫建立索引
您可以在本機 SQL Server Compact Edition 資料庫建立唯一的索引,即使該資料庫是發行集的訂閱者。這是很有用的,但如果發行者沒有對資料行有唯一的約束條件,傳送非唯一的資料到訂閱者時,可能會造成問題。例如,您可能擁有一個包括資料行 C1 和 C2 的資料表 T,且主要索引鍵是存在於 C1。
C1 |
C2 |
A |
1 |
B |
2 |
C |
3 |
初始的同步處理會發生在 SQL Server Compact Edition 資料庫。在同步處理後,唯一的索引會被加入訂閱資料庫的 C2 中。發行集資料庫不會有變更。
在下一次同步處理期間,SQL Server 會插入下列資料列︰
D |
3 |
E |
3 |
在此狀況中,同步處理會失敗,因為發行者嘗試插入對 C2 而言非唯一的值。同步處理就會一直失敗,直到訂閱資料庫移除此唯一約束條件為止。