天天看點

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. 訂閱類型和指定優先級的合并沖突

http://technet.microsoft.com/zh-cn/library/ms152513.aspx

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

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

站點 類型 優先級值
A Publisher 100.00
B Server Subscription 75.00(配置設定值)
C Server Subscription 50.00(配置設定值)
D Client Subscription 0.00(預設值)
sql server replication遇到的一些問題

階段 1: 初始值

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

站點 優先級值 行值
A(釋出伺服器) 100.00 Nebraska
B(伺服器訂閱) 75.00 Nebraska
C(伺服器訂閱) 50.00 Nebraska
D(用戶端訂閱) 0.00 Nebraska
sql server replication遇到的一些問題

階段 2: 釋出伺服器和具有伺服器訂閱的訂閱伺服器都更新行

站點 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
sql server replication遇到的一些問題

階段 3: 對同一行進行多次更改

假定站點 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
sql server replication遇到的一些問題

階段 4: 具有伺服器訂閱和具有用戶端訂閱的訂閱伺服器都更新行

假定站點 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。