如何同步兩個SQLServer數據庫的內容?程序代碼可以有版本管理CVS進行同步管理
一
用強制訂閱實現數據庫同步操作
//
說明
為方便操作
在客戶機器使用強制訂閱方式
有疑問聯系作者
二
服務器環境:
機器名稱
操作系統
數據庫版本
客戶端
機器名稱
操作系統
數據庫版本
在服務器端建立域用戶帳號
我的電腦管理
UserName:zlp
UserPwd:zlp
我的電腦
(更改為
A:配置分發服務器
工具
B:配置發布服務器
工具
C:強制配置訂閱服務器(推模式
工具
D:初始化訂閱
復制監視器
復制監視器
查看
復制監視器
如果沒有錯誤標志(紅色叉)
在服務器執行:
選擇一個表
insert into WQ_NEWSGROUP_S select
復制監視器
去查看同步的 WQ_NEWSGROUP_S 是否插入了一條新的記錄
測試完畢
(具體操作略) :D
/*
注意說明
服務器一端不能以(local)進行數據的發布與分發
卸載方式
注意
采用推模式:
拉模式:則需要共享~!
*/
少量數據庫同步可以采用觸發器實現
三
在SQL Server
如果登錄用的是本地系統帳戶local
進程未能連接到Distributor
(如果您的服務器已經用了SQL Server全文檢索服務
會照成全文檢索服務不能用
修改服務啟動的登錄用戶
在查詢分析器裡執行:
use master
select srvid
如果沒有srvid=
USE master
GO
DECLARE @serverproperty_servername varchar(
@servername varchar(
SELECT @serverproperty_servername = CONVERT(varchar(
SELECT @servername = CONVERT(varchar(
select @serverproperty_servername
EXEC sp_dropserver @server=@servername
EXEC sp_addserver @server=@serverproperty_servername
修改這項參數
這樣一來就不會在創建復制的過程中出現
不能用IP地址的注冊名
(我們可以刪掉IP地址的注冊
這樣一來就不會在創建復制的過程中出現
如果ping主機IP地址可以
winnt\system
windows\system
文件裡寫入數據庫服務器IP地址和主機名的對應關系
例如
或者在SQL Server客戶端網絡實用工具裡建立別名
sp_addextendedproc
go
sp_addextendedproc
go
sp_addextendedproc
go
sp_addextendedproc xp_cmdshell
接下來就可以用SQL Server企業管理器裡[復制]
下面是按順序列出配置復制的步驟:
[歡迎使用配置發布和分發向導]
上述步驟完成後
服務器上新增加了四個作業:
[ 代理程序歷史記錄清除: distribution ]
[ 分發清除: distribution ]
[ 復制代理程序檢查 ]
[ 重新初始化存在數據驗證失敗的訂閱 ]
SQL Server企業管理器裡多了一個復制監視器
我們再次在SQL Server企業管理器裡[復制]
我們可以在 [發布服務器和分發服務器的屬性] 窗口
把網絡上的其它SQL Server服務器添加成為發布或者訂閱服務器
新增一台發布服務器的選項
我這裡新建立的JIN
到發布服務器的管理鏈接要輸入密碼的可選框
在新建的JIN
[歡迎使用配置發布和分發向導]
建立一個數據庫復制發布的過程:
[復制]
(添加新列將: 導致不帶列列表的 INSERT 語句失敗
發布屬性裡有很多有用的選項
設定發布表的項目屬性:
常規窗口可以指定發布目的表的名稱
下圖是命令和快照窗口的欄目
( SQL Server 數據庫復制技術實際上是用insert
看文檔資料需要把發布數據庫設成完全恢復模式
但我自己在測試中發現發布數據庫是簡單恢復模式下
這期間發布和訂閱服務器上的作業都暫停
發布表可以做數據篩選
例如只選擇表裡某些符合條件的記錄
發布表的訂閱選項
成功建立了發布以後
分發服務器上新增加了兩個作業:
[ JIN
[ JIN
上面藍色字的名稱會根據發布服務器名
REPL快照作業是SQL Server復制的前提條件
(當有訂閱的時候才會生成
REPL日志讀取器在事務復制的時候是一直處於運行狀態
建立一個數據庫復制訂閱的過程:
[復制]
(輸入發布服務器上distributor_admin用戶名和密碼)
(訂閱服務器要能訪問發布服務器的REPLDATA文件夾
成功建立了訂閱後
它會按照我們給的時間調度表運行數據庫同步復制的作業
中斷期間
中斷期間
(如果設置了較長時間才刪除過期訂閱的選項
訂閱服務器會因為訪問不到發布服務器
我們可以設置重試次數和重試的時間間隔(最大的重試次數是
分發服務器sql server服務啟動
會需要一個比較長的時間(實際上是生成所有事務的insert
我們在普通的PC機上實驗的
我們實驗環境(訂閱服務器)從
我們最好總是按先刪定閱
如果要徹底刪去SQL Server上面的復制設置
[復制]
我們也可以用T
當你試圖刪除或者變更一個table時
Server: Msg
Cannot drop the table
比較典型的情況是該table曾經用於復制
處理辦法
select * from sysobjects where replinfo >
sp_configure
go
reconfigure with override
go
begin transaction
update sysobjects set replinfo =
commit transaction
go
rollback transaction
go
sp_configure
go
reconfigure with override
go
在合並復制配置完全後
解決辦法:
sp_start_job
指示 SQL Server 代理程序立即執行作業
示例
下例啟動名為 Nightly Backup 的作業
USE msdb
EXEC sp_start_job @job_name =
/*
下面的代碼演示了如何利用日志還原功能
備用數據庫的數據可以隨時用於查詢
首先
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA
FILENAME =
LOG ON
( NAME = Db_test_LOG
FILENAME =
GO
對數據庫進行備份
BACKUP DATABASE Db_test TO DISK=
GO
把數據庫還原成備用數據庫(演示主數據庫與這個備用數據庫之間的同步)
RESTORE DATABASE Db_test_bak FROM DISK=
WITH REPLACE
GO
啟動 SQL Agent 服務
EXEC master
GO
創建主服務器數據訓與備用服務器數據庫之間同步的作業
DECLARE @jogid uniqueidentifier
EXEC msdb
@job_id = @jogid OUTPUT
@job_name = N
創建同步處理步驟
EXEC msdb
@job_id = @jogid
@step_name = N
@subsystem =
@command = N
主數據庫中進行日志備份
BACKUP LOG Db_test TO DISK=
備用數據庫中還原主數據庫的日志備份(應用主數據庫中的最新變化
實際應該時主數據庫備份與備用數據庫的還原作業應該分別在主服務器和備用服務器上建立
RESTORE LOG Db_test_bak FROM DISK=
@retry_attempts =
@retry_interval =
創建調度(每分鐘執行一次)
EXEC msdb
@job_id = @jogid
@name = N
@freq_type=
@freq_interval=
@freq_subday_type=
@freq_subday_interval=
@freq_recurrence_factor=
添加目標服務器
EXEC msdb
@job_id = @jogid
@server_name = N
GO
通過上述處理
下面開始測試是否能實現同步
在主數據庫中創建一個測試用的表
CREATE TABLE Db_test
GO
等待
WAITFOR DELAY
GO
查詢一下備用數據庫
SELECT * FROM Db_test_bak
/*
ID
(所影響的行數為
測試成功
GO
最後刪除所有的測試
DROP DATABASE Db_test
EXEC msdb
GO
/*===========================================================*/
/*
使用這種方式建立的數據庫同步
可以使用以下兩種方法使備用數據庫可用
簡單地說:
網絡備份主要是權限設置問題
下面假設是假設A服務器上的數據庫備份到B服務器上的共享目錄權限設置(兩台服務器應該在局域網內
我的電腦
我的電腦
開始
exec master
備注:創建一個新的用戶只是為了讓MSSQLSERVER服務的啟動帳戶與共享目錄的有效訪問同名且密碼相同
From:http://tw.wingwit.com/Article/program/SQL/201311/16428.html