1. 程式人生 > >sql server replication遇到的一些問題

sql server replication遇到的一些問題

嘗試了一下sql server的複製功能

1. 修改SQL Server 2008資料庫伺服器名稱

最初設定的計算機名不符合公司規範,所以改了一下,新建“本地釋出”的時候會報錯,需要實際的伺服器名稱,修改資料庫伺服器名稱就可以了

select @@ServerName --檢視當前的伺服器名

sp_dropserver 'test' --將這個伺服器名刪除

sp_addserver 'test2','LOCAL' 將本地伺服器重新新增到伺服器表中,並且命名為test2

2. SQL Server 阻止了對元件 'Agent XPs' 的 過程'dbo.sp_set_sqlagent_properties' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'Agent XPs'。有關啟用 'Agent XPs' 的詳細資訊,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。  (Microsoft SQL Server,錯誤: 15281)

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE
GO

3.釋出中有主外來鍵關聯的表,僅釋出子表

經過使用Northwind資料庫做嘗試,僅釋出子表時,只保留主鍵,即使再增加一個父表的釋出,也不會恢復主外來鍵關聯。同時釋出父表和子表,會保留主外來鍵關聯。看來這是sql server複製解決外來鍵衝突的辦法


4. 訂閱型別和指定優先順序的合併衝突

若要了解根據指定優先順序值解決衝突的方法,以及一個訂閱是伺服器訂閱還是客戶端訂閱,請考慮以下示例,該示例描述了在幾項合併同步中對一行所作的一系列更新。

以下是一個基本合併複製拓撲中的四個站點的初始優先順序值(一個釋出伺服器、兩個具有伺服器訂閱的訂閱伺服器和一個具有客戶端訂閱的訂閱伺服器)。

站點

型別

優先順序值

A

Publisher

100.00

B

Server Subscription

75.00(分配值)

C

Server Subscription

50.00(分配值)

D

Client Subscription

0.00(預設值)

最初,站點 A(釋出伺服器)建立包含值等於 Nebraska 的行的第一版,該行在下一次的合併同步中複製到站點 B、C 和 D。 同步後該行的值如下。

站點

優先順序值

行值

A(釋出伺服器)

100.00

Nebraska

B(伺服器訂閱)

75.00

Nebraska

C(伺服器訂閱)

50.00

Nebraska

D(客戶端訂閱)

0.00

Nebraska

站點 A 把該行值更新為 Texas,而站點 B 把該行值更新為 New Jersey。 在下一次合併同步發生時,站點 A 和站點 B 之間發生衝突。站點 A 在衝突中入選。 衝突入選方站點 A 的值傳播到站點 B、C 和 D。

站點

優先順序值

行值

A(釋出伺服器)

100.00

Texas

B(伺服器訂閱)

75.00

Texas

C(伺服器訂閱)

50.00

Texas

D(客戶端訂閱)

0.00

Texas

假定站點 C 更新該行(更改為 North Carolina)並與釋出伺服器同步。 這不是衝突,因為 C 已經成功地合併了來自 A 的最新的更新(成功合併了行值 =“Texas”)。 然後假定站點 B 更新該行(更改為 Idaho)。

站點

優先順序值

行值

A(釋出伺服器)

100.00

North Carolina

B(伺服器訂閱)

75.00

Idaho

C(伺服器訂閱)

50.00

North Carolina

D(客戶端訂閱)

0.00

Texas

站點 B 與釋出伺服器同步時發生更新衝突。 因為站點 B 與站點 C 都是伺服器訂閱,而站點 B 的優先順序比站點 C 的高,所以站點 B 在衝突中入選。 當其他兩個站點也合併之後,站點 B 的值就傳播到其他訂閱伺服器上。

站點

優先順序值

行值

A(釋出伺服器)

100.00

Idaho

B(伺服器訂閱)

75.00

Idaho

C(伺服器訂閱)

50.00

Idaho

D(客戶端訂閱)

0.00

Idaho

假定站點 D 更新行(更改為 New Mexico)並與釋出伺服器同步。 然後假定站點 B 更新行(更改為 California)。

站點

優先順序值

行值

A(釋出伺服器)

100.00

New Mexico

B(伺服器訂閱)

75.00

California

C(伺服器訂閱)

50.00

Idaho

D(客戶端訂閱)

0.00

New Mexico

站點 B 與釋出伺服器同步時發生更新衝突。 與前一示例不同,因為站點 D 具有一個客戶端訂閱,所以它在同步時採用釋出伺服器(站點 A)的優先順序值。 因為站點 A 的優先順序高於站點 B,所以站點 B 在衝突中落選;最初輸入站點 D 的值入選。 (假如訂閱伺服器 B 先於訂閱伺服器 D 與站點 A 同步,則站點 B 當在衝突中入選。) 站點 D 在衝突中入選依靠的是釋出伺服器自在站點 D 上更新的行版本上次同步後尚未更改或接收另一更改。 如果任何具有伺服器訂閱的訂閱伺服器或者任何其他具有客戶端訂閱的訂閱伺服器先行同步,則遵循最高優先順序或“最先進入釋出伺服器者入選”的規則。

所有站點都同步之後的最終值所示如下。

站點

優先順序值

行值

A(釋出伺服器)

100.00

New Mexico

B(伺服器訂閱)

75.00

New Mexico

C(伺服器訂閱)

50.00

New Mexico

D(客戶端訂閱)

0.00

New Mexico

當伺服器訂閱和客戶端訂閱在拓撲中的同一級混用時,同步的順序和優先順序的值決定著衝突的結果。 這最後一組更新說明了為什麼必須慎重。 儘管該訂閱伺服器在三個訂閱伺服器中的優先順序值最低,但是由於它首先與釋出伺服器同步(從而採用釋出伺服器的優先順序值 100.00),所以在衝突中入選。 假如是站點 C(伺服器訂閱,優先順序值 50.00)而非站點 D 輸入了 New Mexico,則站點 B(伺服器訂閱,優先順序值 75.00)當在衝突中入選,那麼結果就會是 California。