關於我自己

I'm...


Microsoft MVP:Enterprise Security
Since 2010

我服務於

登豐數位科技 | 也可以宣傳你的粉絲專頁

部落格觀查

Locations of visitors to this page

我是廣告啦~

DotBlogs! Cogate!!!

最新回應

你不可不知的複寫常識
複寫用來複製資料和資料庫物件的一項強大的功能,是大型資料庫或資料庫同步維持資料一致性的功能
透過各種網路、撥接連線,將資料散佈到不同地點上,即然是複寫了顧名思義,就是將資料同步的寫到各個不同的資料庫伺服器上
當然在整個資料庫的複寫中,也有考量到效能處理及資料庫結構問題,又分為三種複寫架構:交易式、合併式、快照式。

快照式複寫:資料變更數量大,但次數不用太頻繁的同步複寫時,最適合使用快照式複寫。
在所有複寫功能中快照式在「發行者」端負擔較小,因為他不用追踨累加變更的資料,只需要將資料庫中的資料做快照即可。
例如,在整個整批交易中,每天共有三十萬筆資料,一天只需要傳回總部一次,那麼快照式複寫就可以較有效率的將資料複寫回去。
※此種複寫需要每一張表都有Identify欄位。

交易式複寫:當資料有任何改變時,會主動的傳遞到訂閱者,預設交易式複寫是唯讀存取,因此在訂閱者端有任何資料的改變
是不會傳遞回到發行者端的。不過交易式複寫是可以設定成訂閱者亦可更新資料。
這種複寫狀態會有較大的彈性並且於資料端有大量的更新或插入、刪除的動作,適合非MS SQL Server資料庫做同步的複寫方式。
※此種複寫在發行資料庫下會主動的配置交易記錄,透過交易記錄來執行複寫轉送,當使用這種複寫方式在資料尚未完全移動到散發資料庫前,記錄檔無法被截斷。
※所有交易式複寫的資料表上,必須包含主索引鍵,否則無法被利用來發送。

合併式複寫:與交易式複寫很類似,是在發行者上發佈後,訂閱者存資料時,之主動的交換最後一次同步處理所變更過的資料。
通常這種複寫是較適合在多個訂閱者可能會在不同時間之下更新相同的資料,較容易產生資料衝突,當資料產生衝突時,必須由DBA進行排解。
※此種複寫會自動建立一組GUID資料行,且支援Timestamp資料行,在訂閱者套用快照集時會重新產生timestamp,驗證timestamp是否為可用快照。

環境限制和需求
不論在那一種複寫狀況之下,建立快照集資料夾的安全問題都是需要被重視的,因此在資料庫複寫的過程中,快照夾實體目錄權限就必須考慮進來,
使用何種複寫則必須視你所貼近的環境來選用,若資料庫設計時,並無使用identify,或並無使用索引欄位,那麼於快照及交易複寫就不適用,除非改變資料庫內容。

實作注意事項
在實作時,必須先選擇何者為發行者、散發者、訂閱者…等等的角色定義。(總是要知道誰負責發資料、誰是來接受同步資料的角色吧)
多數的工作是著在發行者身上,其它的資料處理同步,就可以透過代理程式來決定運作在訂閱者發起同步令命,還是由訂閱者發起呢?
若是遠端的資料庫同步(跨WAN)則必須透過VPN達成複寫或是Web同步處理方式,畢竟複寫是必須透過網芳、或XML訊息傳遞來處理。
在實作的過程中,有一個問題產生了,因SQL是建置在WINDOWS之上,又有使用網芳傳遞,那麼如何確認每個資料庫的同步是沒有問題的呢?
因此在複寫的安全架構下,必須將SQL Server Agent的啟動帳戶設定為相同的實體本機帳號,另外網路上存取網芳亦必須開通由這幾台db可存取。

實作環境說明
目前Jason的測試環境是以兩台Windows 2008 Server作為平台安裝SQL Server 2008(分別為:WinSQLSvrA, WinSQLSvrB),並且兩台server兩網卡
一個是將兩台網卡串接在一起做為NLB的heartbeat,另一張網卡則是對外提供服務,並設定為NLB。示意圖如下:
DB NLB

建立本機使用者
分別於兩台Server上新增乙使用者,並命名為SQLReplace,並設定密碼永久有效,而密碼長度就依照各安全要求囉!
新增使用者1
接下來將兩台server服務中的SQL Server Agent(MSSQLSERVER)內容中的登入設定成為以SQLReplace帳號啟動
※完成後務必將服務重新啟動
1.找到SQL Server Agent(XXX)服務
設定服務1

2.於服務上按右鍵選擇內容。
設定服務2

3.於登入頁籤中輸入複寫共用帳號SQLReplace並登打密碼。
設定服務4設定服務5

4.並重新啟動服務,只要服務啟動沒有錯誤即可完成該設定。
設定服務6 

建立複寫集目錄
預設複寫集存放目錄為C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\repldata
設定複寫存放位置權限及開啟共享,設定SQLReplace帳號可以完全控制該目錄
設定目錄權限1

設定目錄權限2

設定目錄權限3

設定複寫發行集
接下來,我們將WIN-SQLSvrA主機設定為複寫的發行者
1.展開複寫功能,並於本機發行集上按右鍵,新增發行集。
設定發行0

2.指定以Win-SQLSvrA為散發者。
 設定發行2

3.必須於快照集指定為網路路徑
複寫進存放位址置放於\\Win-SQLSvrA\repldata
設定發行3

4. 設定發行複寫的資料庫Web_Jason
設定發行4

5.本例選擇以合併式複寫發行
設定發行5

6.核選所需要複寫的項目,可依照需求定義,亦可選擇發行的種類來複寫。
設定發行6

7.選擇可接受的訂閱者類型及其版本。
設定發行7 

8.此時會依照所選擇的複寫類型而告知必須加入的動作及後續的作業。
設定發行8

9.依照所需的內容可以以篩選的方式將資料同時處理到所需的發行集中。
設定發行9

10.快照建立時,可選擇多久的時間建立一次快照,因為合併式是即時複寫及快照複寫兩種,
因此下面定義的快照集代理程式是指拍快照的時間,而複寫是即時複寫的,
快照完成時間會再進行一次複寫,使有誤差的資料庫完全相同。
設定發行10

11.複寫集是透過SQL Agent來執行的,因此在代理程式中,必須設定相關安全性的需求(連入帳戶、處理帳戶…等等)
設定發行11

12.若是已將SQL Server Agent重新設定以帳號啟動,則可選擇以服務帳號執行,若無則亦可指定帳號執行
連接到發行者的部份,則可直接選由模擬處理帳號即可,不指定帳號登入。
設定發行12 
設定發行13

13.接下來選擇必須完成的動作(核選建立發行集)。
設定發行14

14.給發行集名稱一個唯一的名字吧!
設定發行15

15.接下來隨即進行發行集的產生及相關的設定。
設定發行16

16.複寫發行集設定成功…
設定發行17

 

複寫的訂閱模式
提取訂閱:提取訂閱是由發行者設定好發行集後,由訂閱者連線至發行者要求取得複寫集的方式。
發送訂閱:剛好與上者相反訂閱方式相反,是由發行者指定將發行集派送給何者做複寫的方式。

設定複寫安全性
因Jason一時不查造成有網友實作時發生權限問題,因此在本部份針對資料庫必須設定的安全性加以說明。
隨著訂閱的方式不同,發行集的內容不同,其安全性的設定也會有所差異
在此建議大家依照所需要的環境及安全設計到下面的連結中查詢(複寫方式不同和代理程式的訂閱不同會有不同設定喲!)
http://msdn.microsoft.com/zh-tw/library/ms151868.aspx

1.於Win-SQLSvrA上將SQLReplace帳號加入到登入中,於安全性上按右鍵->新增->登入。 
SQLA1  

2.將Win-SQLSvrA中的SQLReplace帳號點選進來,依照預設值即可。 
SQLA2

3.給予SQLReplace帳號具有Distribution及欲提供複寫的資料庫(Web_Jason)具有db_Owner的權限。 
SQLA3

4.接下來請切換至Win-SQLSvrB伺服器上,並且將SQLReplace帳號加入登入中
   並設定欲成為複寫目標的資料庫(Web_Jason)具有db_Owner權限。 
 sqlb1

sqlb2

sqlb3 

訂閱複寫
接下來再以Win-SQLSvrB設定為訂閱者,連接到了Win-SQLSvrB後,於複寫中展開本機訂閱
1.於本機訂閱上按下右鍵,選擇新增訂閱。

設定訂1 
設定訂2

2.新增訂閱時,必先指定發行者,因此於發行者下拉式方塊中選擇”尋找SQL Server發行者”
設定訂3
 

3.接下來直接連接至Win-SQLSvrA中
設定訂4 

4.當連線到發行者後,可在發行者發行的發行集中看到剛剛建立起的發行集Web_Jason_Replace。
設定訂5
 
5.若發行者主機較強,可選擇散發者上執行代理程式,若希望降低發行者的負擔可選擇在訂閱者端執行代理。
設定訂6 

6.接下來選擇要訂閱的資料庫名稱
※資料庫不需要是同名稱。
設定訂7

7.依據代理發行其連接設定
※若已設定SQL Server Agent執行身份,可不需指定連接至散發者帳號密碼。
設定訂8 
設定訂9 
設定訂10

8.接下來指定同步的排程可指定為連續執行
※意指,有任何變更隨即同步複寫,若選擇在有需要時執行,則是依照發行者設定的排程時間執行
若選擇定義排程,則可自我訂義排程時間。
設定訂11 
設定訂12

9.衝突發生時,以何者為何優先處理順序,預設值為依照先丟遞至發行者為優先。
設定訂13

10.接下來即可建立訂閱,並完成訂閱。
設定訂14
設定訂15

 

啟動初始化

在設定好訂閱後,於Win-SQLSvrA啟動初始化
1.於發行集中展開後,按右鍵檢視快照集代理程式狀態。


接下來點下代理程式的啟動按鈕即可。



檢視複寫監視器
複寫監視器是一個可以看到複寫的所有狀態及動作的監視器,在任何一台DB上都可以直接檢視,只需要做下列的設定即可。
1.於複寫功能上按右鍵,點選啟動複寫監視器。


2.點選我的發行者,並於右手邊的視窗中,選擇加入發行者。



3.在加入發行者處選擇加入SQL Server發行者÷並輸入發行者的帳號及密碼,即可完成加入發行。



接下來即可在複寫監視器中看到複寫的狀態及各項複寫過程所遇到的錯誤問題。

 

呼~~!好長一篇,有任何問題再跟大家一起討論,先休息喘一下吧!

如有看不懂的地方,可以大家一起討論。

可參考Microsoft Technet的SQL複寫http://technet.microsoft.com/zh-tw/library/ms151198.aspx


Anything keeps Availability.
Anywhere keeps Integrity.
Anytime keeps Confidentiality.
keep A.I.C. = Information Security




回應

  • Darren 2009/11/12 下午 05:04 回覆

    # re: SQL Server 2008 複寫實作

    作者您好;

    我照你的方式做了合併複寫,但結果失敗,請問啟用SQL Server Agent的本機帳號"SQLReplace"需不需要新增為SQL Server登入、並設定對distribution資料庫為owner?

    若可以的話,可否抽空回答,謝謝。

  • dotjason 2009/11/12 下午 11:10 回覆

    # re: SQL Server 2008 複寫實作

    to Darren :

    其實這個帳戶最重要的是兩台server的帳號密碼都必須相同,再來對於共同存取的那個網路路徑(repldata)也必須要能夠達到變更權限,此外,對於要不要新增為SQL的登入帳號及設定為資料庫的Owner則可以不必,因為它的重點是在於對這個共用的repldata目錄權限要夠大。

    而進行複寫前,電腦名稱和msdb下的名稱是否相同,也會造成複寫失敗的可能性,若您除錯的部份有困難的話,可以先將SQL Agent的啟動帳戶加入administrators後,再來除錯。

    因為複寫的相關設定相當的複雜,可以的話,是否將event log及複寫監視器中的錯誤內容傳遞給我或是直接在dotblogs上討論,比較方便偵錯。

  • darren 2009/11/13 下午 04:45 回覆

    # re: SQL Server 2008 複寫實作

    to dotjason :
    作者您好:

    我已經確認了兩台server的帳號密碼皆相同,對(repldata)之權限也確認過了。在建立複寫集的步驟12裡,連接到發行者的部份,我是選由模擬處理帳號。在訂閱複寫的步驟7裡,我也是選由模擬處理帳號。

    而我的狀態顯示如下

    在複寫監視器上的"所有訂閱"的狀態為--未初始化的訂閱;檢視server2(定閱端)上的本機訂閱的同步處理狀態,其狀態顯示為--該處理無法連接到Distributor"server1"。

    麻煩您協助偵錯了,謝謝。

  • dotjason 2009/11/14 上午 12:46 回覆

    # re: SQL Server 2008 複寫實作

    to darren :

    首先,您可以先以UNC路徑(\\SERVER1\repldata)來確認一下,兩台電腦在這個路徑上是否真的可以連接的到彼此,怕是有防火牆擋著了網芳的功能。

    而出現未出始化的訂閱,你可先在發行者上的發行集中點選右鍵,選擇重新初始化訂閱,選擇使用新的快照集,再點選標示為重新初始化。

    接下來,再於發行者建立的發行集上按右鍵檢示快照集代理程式的狀態,看看發行集發行的資料是否100%完成發行項的快照集,若是顯示ok的話

    再請您在訂閱者上展開本機訂閱,在訂閱集中點選右鍵檢視同步處理的狀態,您應該看到的就是最後的狀態訊息(該理無法連接到Distributor "server1"),請點選"檢視作業記錄"並將最後一個作業記錄展開,將最後一個良好的運作記錄展開,內容中有包含一個訊息的內容,類似下列的內容,請貼給我看一下好嗎?

    訊息
    2009-11-13 16:37:31.098 Copyright (c) 2008 Microsoft Corporation
    2009-11-13 16:37:31.098 Microsoft SQL Server 複寫代理程式: replmerg
    2009-11-13 16:37:31.098
    2009-11-13 16:37:31.098 輸出行開頭的時間戳記以 UTC 時間表示。

  • dotjason 2009/11/14 上午 02:02 回覆

    # re: SQL Server 2008 複寫實作

    to darren :

    剛剛翻閱了一下MSDN,因DB的安全存取控制模型是屬於Clark-Wilson Integrity Model 因此在於該帳號(SQLReplace)於電腦帳戶中雖然不是administrators權限,但若執行服務帳號應可於SQL中提升權限至SQL Agent的Owner,但是SQLReplace於複寫的目的帳號還是不具有資料結構變更的權限,因此應該要將SQLReplace加入複寫資料庫(web_jason)的dbowner中。

    下面是MSDN的連結,摘要如下:
    提取訂閱的散發代理程式
    在連接到訂閱者時,需使用執行代理程式的 Windows 帳戶。這個帳戶必須至少是訂閱資料庫中 db_owner 固定資料庫角色的成員。
    用於連接散發者的帳戶必須:
        * 為 PAL 的成員。
        * 擁有快照集共用上的讀取權限。
    http://msdn.microsoft.com/zh-tw/library/ms151868.aspx

    檢查了一下我的Lab,當初我在那置lab時,SQLReplace是複製administrator的帳號,而忘了將權限最小化,我會再把本篇文章重新修訂乙次。

    不好意思,讓您實作遇到這麼多的問題,只因為我的不小心,我會加強本章節以最小權限的方式來運作。

     

    已更新,新增了訂閱的類型說明及安全性設定的部份,希望您依照上述的方法可以順利成功。

  • Darren 2009/11/16 上午 11:36 回覆

    # re: SQL Server 2008 複寫實作

    作者您太客氣....您寫的SQL複寫已經很詳細了...對網友的問題又回答的快速....真的很謝謝。

    因為一直對於複寫裡初始化資料結構的問題很感冒,於是我後來選擇交易式複寫,並且沒有進行初始化(也就是沒建立快照集,反正我兩台server本來就是透過ghost方式建立的,並且確保servername沒問題)....現在複寫已經正常運行中....

    但仍有一點疑問想要請教作者:
    1.我在server1建立發行集的過程中,並沒有出現"指定散發者"的步驟?所以我也不清楚我的散發者是哪一台(我猜是server1,因為distribution在server1)。

    2.我在建立訂閱者(server2)時是選擇"提取訂閱",這樣一來,MSDN所述的"提取訂閱的散發代理程式"是在server1或是server2呢?(我是在server1將SQLReplace帳號加入登入,並具有distribution為owner的權限,我在server2並沒有將SQLReplace帳號加入登入)。

    3.資料庫複寫還真是複雜ㄚ。

    不好意思,又要麻煩您了。

  • Darren 2009/11/16 下午 12:15 回覆

    # re: SQL Server 2008 複寫實作

    對不起,更正。

    在詳細的看了一下MSDN後,我的"提取訂閱的散發代理程式"是在server2應該不會錯(http://msdn.microsoft.com/zh-tw/library/ms151706.aspx);而server1必須將SQLReplace帳號加入登入,並具有distribution為owner的權限,此是因為server1上的"記錄讀取器代理程式"所需的權限(http://msdn.microsoft.com/zh-tw/library/ms151868.aspx)。

    但....我在server2沒將SQLReplace加入登入並指定為訂閱資料庫中的owner成員,但目前我的複寫是正常運行的??

  • dotjason 2009/11/17 上午 02:57 回覆

    # re: SQL Server 2008 複寫實作

    to Darren :

    謝謝您的嘉許,畢竟在網路上公開的一些實作應該要讓每個人做都是可以運行的,才不會誤了大家的時間,針對您的第一個問題,在設定建立發行集前,你在設定複寫時,就已經指定了由Server1為發行者了,而這個部份有兩個概念,發行者是主要的發行主本,而散發者則是類似中介的Agent的概念。

    第二個問題,所謂的提取訂閱和發送訂閱是看你指定做複本的資料庫伺服器是由發行者上去指派還是由複本資料庫來做訂閱,若是由主要的發行者派發,那麼就是屬於派送訂閱,如果是由其它資料庫主機來向發行者訂閱,就是提取訂閱,而基本上來說,若SQL Agent服務的啟動帳號是Distribution的dbowner,而SQLReplace在server2上應該也要有相對的複寫資料庫的owner,那麼,要成為owner,沒有在登入清單中,好像也不太可能,除非你是透過群組的方法將SQLReplace加到指定群組下。

    而另外發問的問題,我個人測試是有發生問題的,您要不要確認看看,因為server2若相對應的資料庫沒有加入SQLReplace為db_owner應該是無法進行任何結構性變更的,有一個笨方法您試試看,把server2的訂閱先取消,然後在server2上複寫出來的資料庫的資料表全刪了,再重新做訂閱,這樣應該就可以知道ok不ok了。

    希望以上對您有幫助。

  • darren 2009/11/27 上午 10:57 回覆

    # re: SQL Server 2008 複寫實作

    to dotjason :
    抱歉,這麼久才上來回覆,你說的沒錯,SQLReplace必須在server2加入db_owner才正確。

    謝謝作者的教學文章,我現在兩台server做replication一切都很順利。

  • Sam18 2010/1/15 上午 09:02 回覆

    # re: SQL Server 2008 複寫實作

    1、請問一下,如果我是做合併式複寫的機制,如果發生二邊的table在同一時間,同時寫入時?SQL的判斷及處理衝突機制為何?
    2、完成複寫後,我觀察訂閱者的table名稱前面會自動增加[MSmerge_conflict_xxx_原table名],所以前端的AP程式必須要改寫嗎?

    感謝大大無私的提供經驗,感激不盡,謝謝~~

  • Sam18 2010/1/15 上午 10:37 回覆

    # re: SQL Server 2008 複寫實作

    Sorry!!第二個問題是因為複寫未完成所造成的。!!!當我複寫100%時,就正常了。!!
    但第一個問題,還是要請教您,謝謝~

  • Jason 2010/1/15 上午 11:42 回覆

    # re: SQL Server 2008 複寫實作

    to Sam18 :

    在複寫的技術中,合併式複寫是綜合了快照及交易複寫的優點,當有兩筆資料分別進入到兩台資料庫中時,在每一筆資料都會產生一組guid,經由這組guid加上時戳的比對,會將新增的資料列做比對,而給予前後插入的順序,您可以透過設定識別種子的方式來觀查這個差異,若有兩者同時對同一列資料修改造成衝突時,會在複寫的控制之下看到有衝突發生,此時就需要做仲裁,而這個部份可以透過Dead Lock的處理來執行,可以參考下面這篇。

    http://support.microsoft.com/default.aspx/kb/832524/zh-tw

  • Sam18 2010/1/17 下午 04:51 回覆

    # re: SQL Server 2008 複寫實作

    感謝大大的解答,還有一個複寫的選項疑問,我有爬了您說的複寫種類?但在SQL 2008的複寫多了一個「具有可更新訂閱的交易式發行集」:SQL Server 訂閱者接收到已發行資料的初始快照集之後,發行者就會將交易資料流傳送給 SQL Server 訂閱者。來自訂閱者端的交易會套用到發行者端。

    所以訂閱者的資料更新,也有發行出去給發行者跟其他訂閱者嗎? 這樣不就跟合併式相同? 我混亂了!!

  • Jason 2010/1/18 上午 09:04 回覆

    # re: SQL Server 2008 複寫實作

    to Sam18 :

    呵呵呵~~!您真的混亂了,這種方式與合併式最大的不同在於資料流動方式,合併式是會訂期合併,而具有可更新訂閱的交易式發行集是先以快照、再以交易來複寫,咋聽之下與合併式無異,但是,一開始快照完成後,所有的交易資料就都是以交易式複寫來丟遞了,不會再發行快照集。但是合併複寫可以指定多久間隔做一次快照的丟遞,且合併式複寫可以獨立的更新發行集。

    具有可更新訂閱的交易式發行集(SQL Server 訂閱者接收到已發行資料的初始快照集之後,發行者就會將交易資料流傳送給 SQL Server 訂閱者。來自訂閱者端的交易會套用到發行者端。)

    合併式發行集(訂閱者接收到已發行資料的初始快照集後,發行者和訂閱者即可獨立更新已發行資料。變更會定期合併。Microsoft SQL Server Compact Edition 僅能訂閱合併式發行集)

  • Ming 2010/1/20 下午 04:18 回覆

    # re: SQL Server 2008 複寫實作

    請問一下,我在SQL 2008上複寫已經設定成功了,是使用@sync_type = 'initialize with backup',的方式
    在第二台要設定exec sp_addsubscription @publication到第二台訂閱主上的時候會出現錯誤訊息,如下所表示,我測試過很多次的備份還原...還是不行,請幫忙看一下問題!! thanks ~
    Msg 21397, Level 16, State 1, Procedure sp_MSsetupnosyncsubwithlsnatdist, Line 248
    The transactions required for synchronizing the nosync subscription created from the specified backup are unavailable at the Distributor. Retry the operation again with a more up-to-date log, differential, or full database backup.
    The Subscriber was dropped.

  • Jason 2010/1/20 下午 06:25 回覆

    # re: SQL Server 2008 複寫實作

    to Ming :

    您做的複寫是何種呢?(交易、快照、合併?)

    看您的症狀應該是點對點的交易複寫出了問題,服用這份文件來解解看

    How to: Initialize a Transactional Subscription from a Backup

     

  • Ming 2010/1/21 下午 02:50 回覆

    # re: SQL Server 2008 複寫實作

    to Jason :
    感謝回覆!! 問題已經解了,我是用交易方式設定複寫,針對錯誤訊息no.21397用google大神查詢已經知道問題點在哪了,解決方式如下!! 請參考 ~
    If you get the Msg 21397 error mentioned in the link above, then you probably forgot to stop the Distribution cleanup agents and the server has thrown out some of the transactions that have occurred since the LSN (backup).

  • Jason 2010/1/21 下午 03:58 回覆

    # re: SQL Server 2008 複寫實作

    to Ming :

    感謝您無私的分享這個問題,也謝謝您分享這個解答,小弟受教了!

     

    這個世界需要多一些像您這樣的人!

  • Eric 2010/2/25 上午 11:45 回覆

    # re: SQL Server 2008 複寫實作

    大大,請問一下喔,
    照您上面所說的,因此發行者的每個資料表都自動增加了rowguid這個欄位是正常的嗎?但訂閱者無此狀況呢。

    第二個問題是,當複寫如果設定完成後,如果我是手動到發行者資料庫新增資料,這些手動的資料也能被發行嗎?

  • Jason 2010/2/25 下午 05:41 回覆

    # re: SQL Server 2008 複寫實作

    to Eric :

    因為發行者是單向的將資料佈出來,因此會必須要有這個欄位,這個是正常的。

    如果你是手動的在發行者上去新增有發行的資料表中的資料,是會被發行出來的。

  • Eric 2010/2/26 下午 12:21 回覆

    # re: SQL Server 2008 複寫實作

    所以我手動去更新了發行者的資料表欄位,這樣也可以發行囉?但是我去看第二台資料庫沒有跟著變動呢。
    且在監視器也沒看到任何動作><
    監視器裡的我的發行者狀態是ok的,但訂閱者的狀態卻是Uninitialized subscription。
    這樣算有架設成功嗎?

  • Jason 2010/2/26 下午 06:45 回覆

    # re: SQL Server 2008 複寫實作

    to Eric :

    您的複寫應該只有架設好,但是還沒有做發行的動作,您可以在發行集上點選重新初始化,並且再到監視器中去看是否有發行程序的動作,您所提到的訂閱者狀態是代表只有做訂閱,但是尚未有發行者將快照集做初始發行。

  • Wesley 2010/2/27 上午 11:50 回覆

    # re: SQL Server 2008 複寫實作

    你好!按照您的教學成功同步了,但是有兩台電腦出現在啟動SQL Server Agent的時候出現:「在本機電腦的SQL Server Agent (XXXX)服務已啟動又停止。有些服務如果無法執行操作的話會自動停止」

    啟動的帳號權限提升到Administrator也是一樣,最後沒辦法,SQL Server重灌,重灌完後同樣的帳號就可以成功啟動,並且同步。

    但是在另外一台電腦想說有無不要重灌的方法,重建系統資料庫一些重置方法均宣告無效,想問作者有無遇到這類問題,有無解決方案,謝謝。

  • Jason 2010/2/27 下午 08:25 回覆

    # re: SQL Server 2008 複寫實作

    to Wesley :

    這個部份,不知道您是否有檢查過在SQL的MSDB中註冊的電腦名稱為何?是否與您現在的電腦名稱相同呢?因為SQL Server中的電腦名稱是在安裝時就存入了,但是您如果有修改過電腦名稱是不會被更新進到SQL中的,即使您重置了系統資料庫,還是不會變更到這項記錄。

    解決方法,請看MS-SQL電腦名稱不符無法建立複寫

  • Eric 2010/3/1 上午 09:40 回覆

    # re: SQL Server 2008 複寫實作

    大大,初始化一開始就有做過了,而在你說完之後又去做了一次,當100%初始化完成後就停止了,並非一直在啟動(箭頭)的狀態這樣對嗎?訊息也都沒任何錯誤呢。但畫面每隔五秒有在跳動一次。

  • Eric 2010/3/1 上午 11:58 回覆

    # re: SQL Server 2008 複寫實作

    親愛的大大,
    後來我又把訂閱者刪除再重新建立,而監視器卻出現了錯誤訊息The schema script 'AccountProfile_2.sch' could not be propagated to the subscriber. (Source: MSSQL_REPL, Error number: MSSQL_REPL-2147201001),這是不是表示有要覆寫,但寫不進去?

  • Jason 2010/3/1 下午 05:00 回覆

    # re: SQL Server 2008 複寫實作

    to Eric :

    第一個問題,你已經完成了初始化的動作了,接下來你必須在訂閱端去做啟動的動作,如果您是採用發送訂閱,在Server做初始化,用戶端就會有動作了,如果您是採用提取訂閱,在server做初始化後,還要到訂閱端去做初始化以開始訂閱的內容。看你的症頭是提取訂閱,您可以在訂閱端去開複寫監視器看一下。

    第二個問題,是出現了無法將快照集傳遞的錯誤,您看一下這個連結: http://msdn.microsoft.com/zh-tw/library/dd581610.aspx

  • Eric 2010/3/1 下午 05:59 回覆

    # re: SQL Server 2008 複寫實作

    恩,我改成發送訂閱就可以了,至於第二個那問題由於時間緊迫之後再繼續研究了。
    感謝您細心指導內\~

  • Alley 2010/4/20 下午 04:59 回覆

    # re: SQL Server 2008 複寫實作

    請問複寫有大小的限制嗎?

    我的資料庫約2G,設定好快照式後執行60分鐘了還沒好,還是正在執行中..

    那請問交易式複寫只有在第一次是完整複寫,之後就只針對異動的資料吧,這樣執行時間是不是能大幅縮短?

    謝謝!

  • Jason 2010/4/20 下午 09:47 回覆

    # re: SQL Server 2008 複寫實作

    to Alley :

    複寫並沒有限制大小!你的狀況比較像是未發散出去,您可以查一下複寫監視器的內容有無顯示些什麼!

    而交易式複寫是透過比對GUID即時的散發,所以是只針對有異動的資料做複寫,各有優缺點看您怎麼應用了!


*標 題:

*姓 名:

 電子郵件: (將不會被顯示)

 個人網頁:

*回應

登入後使用進階評論

Please add 8 and 1 and type the answer here: