復制的概念
Microsoft? SQL Server? 2000 的復制是在數據庫之間對數據和數據庫對象進行復制
和分發並進行同步以確保其一致性的一組技術。
使用復制可以將數據分發到不同位置,通過局域網、使用撥號連接、通過 Internet 分
發給遠程或移動用戶。復制還能夠使用戶提高應用程序性能,根據數據的使用方式物理
分隔數據(例如,將聯機事務處理 (OLTP) 和決策支持系統分開),或者跨越多個服務
器分布數據庫處理。
---------------------------------------------------------------------------
SQL復制的基本元素包括
發布服務器、訂閱服務器、分發服務器、發布、項目
發布服務器
發布服務器是提供數據以便復制到其它服務器的服務器。發布服務器可以具有一個或多個
發布,每個發布代表一組邏輯相關的數據。除了指定其中哪些數據需要復制之外,發布服
務器還檢測事務復制期間發生更改的數據並維護有關此站點上所有發布的信息。
分發服務器
分發服務器是作為分發數據庫宿主並存儲歷史數據和/或事務以及元數據的服務器。分發
服務器的角色根據執行的復制類型而不同。有關更多信息,請參見復制類型。
遠程分發服務器是獨立於發布服務器並配置為復制的分發服務器的服務器。本地分發服務
器是既配置為復制的發布服務器又配置為復制的分發服務器的服務器。
訂閱服務器
訂閱服務器是接收復制數據的服務器。訂閱服務器訂閱的是發布而不是發布中分離的項目;
並且訂閱服務器只訂閱其需要的發布,而不是發布服務器上所有可用的發布。根據復制的類
型和所選擇的復制選項,訂閱服務器還可以將數據更改傳播回發布服務器或將數據重新發布
到其它訂閱服務器。
發布
發布是一個數據庫中的一個或多個項目的集合。這種多個項目的分組使得指定邏輯相關的一
組數據和數據庫對象以一起復制變得更容易。
項目
項目是指定要復制的數據表、數據分區或數據庫對象。項目可以是完整的表、某幾列(使用垂
直篩選)、某幾行(使用水平篩選)、存儲過程或視圖定義、存儲過程的執行、視圖、索引視圖
或用戶定義函數。
訂閱
訂閱是對數據或數據庫對象的復本的請求。訂閱定義將接收的發布和接收的時間、地點。訂閱的
同步或數據分發可以由發布服務器(強制訂閱)或訂閱服務器(請求訂閱)請求。發布可以支持
強制訂閱和請求訂閱的混合。
---------------------------------------------------------------------------
SQL復制的工作原理
SQL SERVER 主要采用出版物、訂閱的方式來處理復制。源數據所在的服務器是出版服務
器,負責發表數據。出版服務器把要發表的數據的所有改變情況的拷貝復制到分發服務器
分發服務器包含有一個分發數據庫,可接收數據的所有改變,並保存這些改變,再把這些
改變分發給訂閱服務器
SQL SERVER復制技術類型,三種復制技術,分別是(詳細的說明參考SQL聯機幫助):
1、快照復制
2、事務復制
3、合並復制
下介紹實現復制的步驟。(以快照復制為例)
准備工作:
1.發布服務器,訂閱服務器都創建一個同名的windows用戶,並設置相同的密碼,做為發布快照文件夾的有效訪問用戶
我的電腦
--控制面板
--管理工具
--計算機管理
--用戶和組
--右鍵用戶
--新建用戶
--建立一個隸屬於administrator組的登陸windows的用戶
2.在發布服務器上,新建一個共享目錄,做為發布的快照文件的存放目錄,操作:
我的電腦--D:\ 新建一個目錄,名為: PUB
--右鍵這個新建的目錄
--屬性--共享
--選擇"共享該文件夾"
--通過"權限"按紐來設置具體的用戶權限,保證第一步中創建的用戶具有對該文件夾的所有權限
--確定
3.設置SQL代理(SQLSERVERAGENT)服務的啟動用戶(發布/訂閱服務器均做此設置)
開始--程序--管理工具--服務
--右鍵SQLSERVERAGENT
--屬性--登陸--選擇"此賬戶"
--輸入或者選擇第一步中創建的windows登錄用戶名
--"密碼"中輸入該用戶的密碼
4.設置SQL Server身份驗證模式,解決連接時的權限問題(發布/訂閱服務器均做此設置)
企業管理器
--右鍵SQL實例--屬性
--安全性--身份驗證
--選擇"SQL Server 和 Windows"
--確定
5.在發布服務器和訂閱服務器上互相注冊
企業管理器
--右鍵SQL Server組
--新建SQL Server注冊...
--下一步--可用的服務器中,輸入你要注冊的遠程服務器名 --添加
--下一步--連接使用,選擇第二個"SQL Server身份驗證"
--下一步--輸入用戶名和密碼(一般是sa,密碼最好設置一下非常復雜的)
--下一步--選擇SQL Server組,也可以創建一個新組
--下一步--完成
6.對於只能用IP,不能用計算機名的,為其注冊服務器別名
(在連接端配置,比如,在訂閱服務器上配置的話,服務器名稱中輸入的是發布服務器的IP)
開始--程序--Microsoft SQL Server--客戶端網絡實用工具
--別名--添加
--網絡庫選擇"tcp/ip"--服務器別名輸入SQL服務器名
--連接參數--服務器名稱中輸入SQL服務器ip地址
--如果你修改了SQL的端口,取消選擇"動態決定端口",並輸入對應的端口號
==============================================================================
正式開始:
1.配置發布服務器
a. 選中指定 [服務器] 節點
b. 從 [工具] 下拉菜單的 [復制] 子菜單中選擇 [發布、訂閱服務器和分發] 命令
c. 系統彈出一個對話框點 [下一步] 然後看著提示操作
--直到"指定快照文件夾"
--在"快照文件夾"中輸入准備工作中創建的目錄: \\<服務器名>\pub
一[下一步] 直操作到完成。
d. 當完成了出版服務器的設置以後系統會為該服務器的樹形結構中添加一個復制監視器
同時也生成一個分發數據庫(distribution)
---------------------------------------------------------------------------
2.創建發布
a. 選中指定的服務器
b. 從 [工具] 菜單的 [復制] 子菜單中選擇 [創建和管理發布] 命令。此時系統會彈出
一個對話框
c. 選擇要創建發布的數據庫,然後單擊 [創建發布]
d. 在 [創建發布向導] 的提示對話框中單擊 [下一步] 系統就會彈出一個對話框。對話
框上的內容是復制的三個類型。我們現在選第一個也就是默認的快照發布(其他兩個
大家可以去看看幫助)
e. 單擊 [下一步] 系統要求指定可以訂閱該發布的數據庫服務器類型,SQLSERVER允許在
不同的數據庫如 ORACLE或ACCESS之間進行數據復制。但是在這裡我們選擇運行
"SQL SERVER 2000"的數據庫服務器
f. 單擊 [下一步] ,選擇要發布的對象(如表,視圖,存儲過程,一般是表)
g. 然後 [下一步] 直到操作完成。當完成出版物的創建後創建出版物的數據庫也就變成了
一個共享數據庫。
---------------------------------------------------------------------------
3.設計訂閱
a. 選中指定的訂閱服務器
b. 從 [工具] 下拉菜單中選擇 [復制] 子菜單的 [請求訂閱]
c. 按照提示單擊 [下一步] 操作直到系統會提示檢查SQL SERVER代理服務的運行狀態,執行
復制操作的前提條件是SQL SERVER代理服務必須已經啟動。(選擇一發布服務器,然後選擇你要的一個發布,一次只能添加一下,然後新建一個同名的數據庫,一路下一步就可以了,其它數據庫也這樣來。操作過程中可能會出現說服務器不支持匿名什麼來著,需要在發布服務器上右擊一個發布,訂閱選項,允許匿名請求訂閱選中就可以了。)
d. 單擊 [完成] 完成訂閱操作。
----------------------------------------------------------------------------
完成上面的步驟其實復制也就是成功了。但是如何來知道復制是否成功了呢?
這裡可以通過這種方法來快速看是否成功。
展開出版服務器下面的復制——發布內容——右鍵發布內容——屬性——擊活——狀態然後點立即運行代理程序接著點代理程序屬性擊活調度
把調度設置為每一天發生,每一分鐘,在0:00:00和23:59:59之間。
接下來就是判斷復制是否成功了打
開C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面
看是不是有一些以時間做為文件名的文件夾差不多一分中就產生一個。
要是你還不信的話就打開你的數據庫看在訂閱的服務器的指定訂閱數據庫下看是不是看到了你剛才所發布的表
首先,一般情況下數據庫安裝好後,在企業管理器裡看到的sql注冊是(local)(Windows NT),
SQL Server 復制不支持昵稱,例如使用“.”或“(local)”作為服務器名。
刪除該服務器的 SQL Server 注冊並使用實際的服務器名對它進行注冊。
我把先把這個刪除,右擊他,選擇刪除sql server 注冊 。。然後新建注冊,右擊Sql server組,新建Sql server 注冊 下一步--》可用的服務器裡有你的計算機名,點中間的添加,添加到“添加的服務器裡”--下一步--》下一步--》下一步--》完成
單擊剛剛以計算機名建好的sql server 注冊,以選中它--》工具--》復制--》配置發布、訂閱服務器和分發。。。--》下一步--》下一步--》出現“SEOGIRL”上的 SQL Server 代理當前在使用系統帳戶,它會導致服務器之間的復制失敗。在下列對話框中,為服務啟動帳戶另外指定一個帳戶。--》確定,選擇“本帳戶”(這時進入系統新建一個帳戶比如SQL120),用戶名輸入"SEOGIRL\SQL120",輸入密碼,確定,出現:所做的一個或多個更改只有在 SQL Server 代理重新啟動後才會生效。現在要停止並重新啟動 SQL Server 代理嗎?,確定,確定,--》下一步--》下一步--》快照文件夾路徑“\\SEOGIRL\D$\Program Files\Microsoft SQL Server\MSSQL\ReplData”使用特殊的共享名稱,該名稱通常只能由在計算機“SEOGIRL”上有管理權限的登錄訪問。此共享可能不能由在其它計算機上運行的代理程序訪問,例如請求訂閱的代理程序。
確實要使用此快照文件夾路徑嗎?
--》否,因為這個路徑是沒辦法請求訂閱的代理程序,咱們建一個文件夾D:\ReplData,在這個文件夾的屬性裡設置“共享此文件夾”,點擊“權限”設置everyone為完全。--》確定後退出--》返回咱們剛才的“快照文件夾”,在裡邊 輸入“\\SEOGIRL\ReplData”--》下一步--》下一步--》完成--》關閉
打開企業管理器--》選中發布服務器--》工具--》復制--》配置發布、訂閱服務器和分發。。。--》下一步--》下一步--》下一步--》否,選擇一個快照文件夾位置,\\seogirl\ReplData--》下一步--》--》--》--》--》--》--》--》
“SEOGIRL”上的 SQL Server 代理當前在使用系統帳戶,它會導致服務器之間的復制失敗。在下列對話框中,為服務啟動帳戶另外指定一個帳戶。
“SEOGIRL”上的 SQL Server 代理使用系統帳戶,所以服務器之間的 SQL Server 復制將會失敗。若要在服務器之間使用復制,請選擇另一個服務器器作為“SEOGIRL”的分發服務器。
“SQL120”不是有效的 Windows NT 名稱。請給出完整名稱: <域\用戶名>。
輸入"administrator"時提示以下錯誤:
錯誤 15407: 'administrator' 不是有效的 Windows NT 名稱。請給出完整名稱: <域\用戶名>。
系統出現兩個選擇 一個是 是,將SQL server代理服務配置為自動啟動
另一個是 否,我將手工啟動 SQL server 代理服務器
然後選那個呢?
我兩個都試過了 然後出現快照文件夾
\\XXLJD\F$\Program Files\Microsoft SQL Server\MSSQL\ReplData
系統提示 不是有效的文件名或路徑
接下去就弄不了 哪位大哥幫幫忙啊
1。 一個是 是,將SQL server代理服務配置為自動啟動
另一個是 否,我將手工啟動 SQL server 代理服務器
說明:這個選擇是或者否都可以。是:則系統自己啟動代理服務器
否:你自己手工的啟動代理服務器
這就是區別。
2。
\\XXLJD\F$\Program Files\Microsoft SQL Server\MSSQL\ReplData
系統提示 不是有效的文件名或路徑
這樣修改:1。創建一個文件夾在ntfs分區上,如:D:\ReplData
2.共享這個文件夾 --右擊文件夾-屬性-共享
3。同時在相同的界面-有權限-設置為everyone-完全控制的權限
這樣就可以了。
4.路徑裡輸入\\計算機名\ReplData
問題:SQL Server 復制不支持昵稱,例如使用“.”或“(local)”作為服務器名。
回答:刪除該服務器的 SQL Server 注冊並使用計算機名進行注冊。
問題:“SEOGIRL”上的 SQL Server 代理當前在使用系統帳戶,它會導致服務器之間的復制失敗。在下列對話框中,為服務啟動帳戶另外指定一個帳戶。
回答:應該先建一個有管理員組權限的帳戶,然後用在這。
問題:快照文件夾路徑“\\SEOGIRL\D$\Program Files\Microsoft SQL Server\MSSQL\ReplData”使用特殊的共享名稱,該名稱通常只能由在計算機“SEOGIRL”上有管理權限的登錄訪問。此共享可能不能由在其它計算機上運行的代理程序訪問,例如請求訂閱的代理程序。確實要使用此快照文件夾路徑嗎?
回答:在D盤或你別的盤建一個文件夾如:D:\pub,設為共享,並把上面那個新建 的用戶加到這裡面設為完全控制,快照路徑裡寫\\計算機名\pub
問題:“SQL120”不是有效的 Windows NT 名稱。請給出完整名稱: <域\用戶名>。
解決:使用:計算機名\用戶名。
另一種配置方法
******************************************************************************
我是如何設置的:
1。准備工作
設置一個公用目錄並保證2台服務器有權限。
2。右鍵發布服務器——屬性——復制——配置——創建分發服務器,並設定發布服務器和發布數據庫,
然後給予訂閱服務器權限。
3。依次展開:發布服務器——將要發布的數據庫——右鍵發布內容——新建發布。
4。右鍵剛剛建立的發布——屬性——狀態——立即運行代理程序——代理程序屬性中設置調度並啟動。
4。右鍵剛剛建立的發布——屬性——訂閱——強制新建。
有時候會看不到新建立的項目,重新進就可以了。
--------------------------------------------------------------------------------
經過測試,可以順利實現數據庫結構的初始化和數據的單向同步(也就是訂閱服務器的數據可以及時更新為發布服務器的數據)。
准備工作:
>>數據的同步中主要考慮的三部分,可以理解成三台主機。發布服務器,分發服務器和訂閱服務器;可以從字面的意思理解,要實現的功能實際就是讓訂閱服務器通過分發服務器保持數據及時地和發布服務器上的數據一致。整個執行過程是這樣一來的:
a.訂閱服務器應該有個初始化,一般來說我們開始做這個同步任務的時候,發布服務器已經有了相當的數據量了,而我們的訂閱服務器應該是新建的服務。即使發布中沒有數據,也需要把他的數據庫結構初始化到訂閱服務器上。
b. 我采用的是事物復制,發布服務器的數據發生變化後,相當於觸發了一個更新操作,而事物復制可以在設定的時間把數據更新的操作更新到訂閱服務器中去。當然, 這個操作需要經過分發服務器。在我的測試中,我是把發布服務器和分發服務器設置為同一台主機,可以順利實現數據在數分鐘內同步。
> >在操作的起始,需要考慮訂閱服務器是否有和發布服務器相同結構的數據庫,如果有,需要做的就是使用代理把發布服務器現有的數據初始化過去;如果沒 有對應的相同結構的數據庫,就需要要把發布服務器當前的數據庫結構和當前的數據都初始化到訂閱服務器中。當然這裡所說的操作都是在下面的實施步驟中實現, 不需要單獨處理。
>>如果說對Windows系統有所要求的話,就應該保證這三個服務器(發布,分發,訂閱)在同個域中,以同一個域管理員帳號身份運行,操作如下:
a.進入相應的服務器,控制面板->服務->SQLSERVERAGENT,設置登錄,三台服務器同樣設置。
b.操作前,也不允許這三台服務器對應的別名使用呢稱,比如"LOCAL",這樣的別名要刪除重建,可以采用主機名,比如:server02.
下面開始執行數據庫同步的操作:
>>配置發布服務器和分發服務器:
a.選中對應服務器的注冊名->工具->復制->配置發布、訂閱和分發,直接按照默認設置向下執行,直到完成。關閉。
b. 再一次選中這個服務器服務器的注冊名->工具->復制->配置發布、訂閱和分發,可以看到這次界面和步驟a中的界面有所不同,我們只需 要配置一下 發布服務器,發布數據庫,訂閱服務器。(我的發布數據庫采用的是事物性的)。點“確定”完成操作。<標記P>
> >創建發布,可以選中相應的注冊,用工具->復制->創建和管理發布或者在該注冊下面的 復制->發布內容 選中後,在右邊空白處,右鍵,新建發布,來創建你的發布。我選擇的是事物發布,按照默認設置,選擇你要發布的表或其他對象,其他地方不需要修改,直到完成 操作。
>>修改發布屬性:選擇“狀態”->立即運行代理程序;代理程序屬性->設置你的調度,比如一分鐘一次。(調度->編輯->更改;通知->寫入windows應用程序事件日志),"確定"完成操作。
>>創建訂閱:選擇發布服務器對應的注冊,復制->發布內容->在這個內容上右鍵,強制新訂閱,->"下一步",選擇訂閱服務器(在標記P那一步選擇的訂閱服務器)->“下一步”->選擇你有的數據庫,或者新建一個數據庫
->"下一步"-> 修改你需要的調度->按照默認設置,直到完成。
到 這裡就可以完成了,修改發布服務器數據庫中的內容,等一兩分鐘,數據就同步到訂閱服務器中了。不過由於第一次執行需要快照,如果發布庫中有一定的內容,第 一次執行可能需要幾分鐘時間。如果數據不能同步過去,大家是調度設置時間太短(比如1分鐘)使快照不能完成,所以後面的步驟無法執行,遇到這樣的情況的 話,
選中你發布的內容,設置屬性,在“狀態”中“立即運行代理程序”,這樣的話,數據會馬上同步過去的。
--------------------------------------------------------------------------------
http://www.itpub.net/showthread.php?threadid=558706
--------------------------------------------------------------------------------
http://blog.csdn.net/renzhe2008/relatedarticles/1717005.aspx
經測試上面的文章確實可以正常使用,不過前提是服務器沒有做變態的安全設置,很多的細節需要解決。具體的可以參考發布的sqlserver的相關文章。有問題可以留言。