SQL Server 同步複製測試
1. 測試環境:
操作系統 windows Server 2003 sp1 ,兩臺,獨立系統,不在一個信任域內(如果在同一信任域,權限操作就更簡單了)。
數據庫:SQL Server 2000 SP4 企業版
2. 條件準備:
1、安裝好兩臺windows 2003 server 和Sql server 2000企業版的服務器。
2、在兩臺windows 2003服務器添加windows 系統用戶SqlCopy ,密碼相同,屬於administrators 組。
3、在兩臺服務器的hosts文件中相互添加兩條記錄(參考“失敗可能的問題”部分)。
4、服務器名稱及及相關配置
Windows 主機名 |
Sql server 建庫 |
服務類型 |
Boco-server |
|
訂閱服務器 |
Boco2006 |
|
發佈服務器 |
5、在SQL server 上建立兩個sql 用戶:“fuzhi”,權限system administrators,具備管理髮布的數據庫的所有的權限(參看以下步驟)。
3. 配置發佈、訂閱服務步驟:
1、進入服務器的服務內,找到“SQLSERVERAGENT的”服務,雙擊,在彈出的屬性中,選“登錄”在登錄身份中輸入在準備條件中建立的帳號和密碼(本次用戶名爲“SqlCopy”),點“確定”,重啓“SQLSERVERAGENT的”服務,使之生效。
2、打開SQL Server 2000的企業管理器,對兩臺SQL server進行註冊,不要採用local 和ip地址來註冊,採用windows 2003的主機名來註冊。
3、將需要發佈的服務器(主服務器),展開sql serer 樹,如下圖,右點右邊的空白處,在彈出的菜單中點“配置發佈、訂閱服務器和發佈”
4、啓動向導,繼續
5、提示如下圖,“boco2006”服務器是發佈服務器,點“下一步”。
6、出現如下圖,按照缺省。
7、選擇發佈數據放置點,默認也可。
8、出現如下的提示,這說明我們在建立帳號的時候,需要管理員權限或者具有該目錄的管理權限。
9、默認配置繼續。
10、 發佈配置完成。
4. 新建發佈
1、在兩臺服務器上建立SQL Server 用戶,用於相互登錄,不用SQL Server的sa用戶,主要是sa用戶存在安全和其他用戶使用的情況,造成修改了sa密碼而複製無法順利進行。
2、修改該用戶的屬性,設置該用戶具有System Administrators 權限。
3、修改該用戶數據庫訪問權限
4、在發佈服務器上,展開目錄樹,點“發佈內容”,在右邊空白處有點,在彈出的菜單中,點“新建發佈”。
5、選擇要發佈的數據庫,這裏是“test ”。
6、選擇“合併發佈”,繼續,這樣主要是在備用數據庫啓用主數據庫的時候,主數據成爲備用數據庫,系統正常使用。
7、缺省繼續即可。
8、選擇要發佈的內容,選擇“全部發布”。
9、“項目問題”中,唯一標識中,提示如果不帶列表的語句的Insert可能會失敗,即類似“Insert table values( a,’b’)”,會失敗,“Insert table (aa,bb) values( a,’b’)”成功。
10、 缺省繼續即可。
11、 剩下步驟缺省繼續即可。
12、 在配置好的發佈屬性中,選擇“訂閱”,點“強制新建【P】”。
13、 選擇訂閱服務,這裏訂閱服務器爲“BOCO-SERVER”。
14、 數據,默認就可。
15、 默認配置,繼續即可,完成及訂閱完畢,沒有必要在訂閱服務器上配置訂閱,因爲訂閱已經在發佈服務器上強制。
5. 完成訂閱
1、進行測試,在準備階段,已經在訂閱服務器上建立了test 數據庫,在沒有複製同步是,可以看到“boco-server”服務器上沒有user1 表。
2、同步後,兩個數據庫一樣。
3、平時可以查看相關的日誌,發佈服務器上,展開發布數據庫的樹“代理服務器”->“合併代理程序”。
6. 失敗可能的問題
1、在同步過程中,出現“遠程服務器不是內容訂閱服務器”的問題,該問題有可能兩個原因引起。
A、 hosts 文件問題,在準備工作中,hosts文件中配置的IP地址和主機名,但是如果 SQL Server的實例名成爲類似 “wwwserver\remote” 那麼在 hosts文件中 的格式爲
192.168.1.2 wwwserver\remote #注意中間的“\”
然後在企業管理中以“wwwserver\remote”重新註冊遠程的服務器,重新配置複製即可。
B、 修改了機器名等出現問題,可以按照以下的步驟解決。
在查詢分析器裏執行:
use master
select srvid,srvname,datasource from sysservers
如果沒有srvid=0或者srvid=0(也就是本機器)但srvname和datasource不一樣, 需要按如下方法修改(如果 本機的srvid必須是“0” ,否則也必須執行如下腳本:
----------------------以下可以直接粘貼到 查詢分析器 中--------------------------
USE master
GO
-- 設置兩個變量
DECLARE @serverproperty_servername varchar(100), @servername varchar(100)
-- 取得Windows NT 服務器和與指定的 SQL Server 實例關聯的實例信息
SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
-- 返回運行 Microsoft SQL Server 的本地服務器名稱
SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
-- 顯示獲取的這兩個參數
select @serverproperty_servername,@servername
--如果@serverproperty_servername和@servername不同(因爲你改過計算機名字),再運行下面的
--刪除錯誤的服務器名
EXEC sp_dropserver @server=@servername
--添加正確的服務器名
EXEC sp_addserver @server=@serverproperty_servername, @local='local'
---------------------到此結束------------------------------------
修改這項參數,需要重新啓動MSSQLserver和Sqlserveragent服務才能生效
該問題還可參考:
【備註】本文經測試後,已經移植到生產環境中,效果良好!