程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> sqlserver 2000數據庫同步 同步兩個SQLServer數據庫的內容

sqlserver 2000數據庫同步 同步兩個SQLServer數據庫的內容

編輯:MSSQL

sqlserver 2000數據庫同步 同步兩個SQLServer數據庫的內容。本站提示廣大學習愛好者:(sqlserver 2000數據庫同步 同步兩個SQLServer數據庫的內容)文章只能為提供參考,不一定能成為您想要的結果。以下是sqlserver 2000數據庫同步 同步兩個SQLServer數據庫的內容正文


復制前要做好的預備任務:

  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身份驗證"
  下一步  輸出用戶名和暗碼
  下一步  選擇SQL Server組,也能夠創立一個新組
  下一步  完成

  6.關於只能用IP,不克不及用盤算機名的,為其注冊辦事器別號
  (在銜接端設置裝備擺設,好比,在定閱辦事器上設置裝備擺設的話,辦事器稱號中輸出的是宣布辦事器的IP)
  開端  法式  Microsoft SQL Server  客戶端收集適用對象
  別號  添加
  收集庫選擇"tcp/ip"  辦事器別號輸出SQL辦事器名
  銜接參數  辦事器稱號中輸出SQL辦事器ip地址
  假如你修正了SQL的端口,撤消選擇"靜態決議端口",並輸出對應的端標語


  SQL數據庫同步復制

  1、樹立宣布和分發辦事器

[迎接應用設置裝備擺設宣布和分發領導]->[選擇分發辦事器]

->[使"@servername"成為它本身的分發辦事器,SQL Server將創立分發數據庫和日記]

->[制訂快照文件夾]-> [自界說設置裝備擺設] -> [否,應用以下的默許設置裝備擺設] -> [完成]

上述步調完成後, 會在以後"@servername" SQL Server數據庫裡樹立了一個distribion庫和

一個distributor_admin治理員級其余用戶(我們可以隨意率性修正暗碼)

辦事器上新增長了四個功課:
[ 署理法式汗青記載消除: distribution ]
[ 分發消除: distribution ]
[ 復制署理法式檢討 ]
[ 從新初始化存在數據驗證掉敗的定閱 ]

SQL Server企業治理器裡多了一個復制監督器, 以後的這台機械便可以宣布、分發、定閱了。

我們再次在SQL Server企業治理器裡[復制]-> 右鍵選擇
->[設置裝備擺設宣布、定閱辦事器和分發],可以看到相似下圖:



我們可以在 [宣布辦事器和分發辦事器的屬性] 窗口
-> [宣布辦事器] -> [新增] -> [肯定]
-> [宣布數據庫] -> [事務]/[歸並] -> [肯定]
-> [定閱辦事器] -> [新增] -> [肯定]
把收集上的其它SQL Server辦事器添加成為宣布或許定閱辦事器.
新增一台宣布辦事器的選項:

我這裡新樹立的JIN001宣布辦事器是用治理員級其余數據庫用戶test銜接的,
到宣布辦事器的治理鏈接要輸出暗碼的可選框, 默許的是選中的,
在新建的JIN001宣布辦事器上樹立和分發辦事器FENGYU/FENGYU的鏈接的時須要輸出distributor_admin用戶的暗碼
到宣布辦事器的治理鏈接要輸出暗碼的可選框,也能夠不選,
也就是不須要暗碼來樹立宣布到分發辦事器的鏈接(這固然完善平安,在測試情況下可使用)

2、新樹立的收集上另外一台宣布辦事器(例如JIN001)選擇分發辦事器

[迎接應用設置裝備擺設宣布和分發領導]->[選擇分發辦事器]

-> 應用以下辦事器(選定的辦事器必需已設置裝備擺設為分發辦事器) -> [選定辦事器](例如FENGYU/FENGYU)

-> [下一步] -> [輸出分發辦事器(例如FENGYU/FENGYU)的distributor_admin用戶的暗碼兩次]

-> [下一步] -> [自界說設置裝備擺設] -> [否,應用以下的默許設置裝備擺設]

-> [下一步] -> [完成] -> [肯定]

樹立一個數據庫復制宣布的進程:

[復制] -> [宣布內容] -> 右鍵選擇 -> [新建宣布]

-> [下一步] -> [選擇宣布數據庫] -> [選中一個待宣布的數據庫]

-> [下一步] -> [選擇宣布類型] -> [事務宣布]/[歸並宣布]
-> [下一步] -> [指定定閱辦事器的類型] -> [運轉SQL Server 2000的辦事器]

-> [下一步] -> [指定項目] -> [在事務宣布中只可以宣布帶主鍵的表] -> [選中一個有主鍵的待宣布的表]

->[在歸並宣布中會給表增長獨一性索引和 ROWGUIDCOL 屬性的獨一標識符字段[rowguid],默許值是newid()]

(添加新列將: 招致不帶列列表的 INSERT 語句掉敗,增長表的年夜小,增長生成第一個快照所請求的時光)

->[選中一個待宣布的表]

-> [下一步] -> [選擇宣布稱號和描寫] ->

-> [下一步] -> [自界說宣布的屬性] -> [否,依據指定方法創立宣布]

-> [下一步] -> [完成] -> [封閉]

宣布屬性裡有許多有效的選項:設定定閱到期(例如24小時)

設定宣布表的項目屬性:

慣例窗口可以指定宣布目標表的稱號,可以跟本來的表稱號紛歧樣。

下圖是敕令和快照窗口的欄目

( SQL Server 數據庫復制技巧現實上是用insert,update,delete操作在定閱辦事器上重做宣布辦事器上的事務操作

看文檔材料須要把宣布數據庫設成完整恢復形式,事務才不會喪失

但我本身在測試中發明宣布數據庫是簡略恢復形式下,每10秒生成一些年夜事務,10分鐘後再壓縮數據庫日記,
這時代宣布和定閱辦事器上的功課都暫停,暫停恢復後並沒有喪失任何事務更改 )

宣布表可以做數據挑選,例如只選擇內外面的部門列:

例如只選擇內外某些相符前提的記載, 我們可以手工編寫挑選的SQL語句:

宣布表的定閱選項,並可以樹立強迫定閱:


勝利樹立了宣布今後,宣布辦事器上新增長了一個功課: [ 掉效定閱消除 ]

分發辦事器上新增長了兩個功課:
[ JIN001-dack-dack-5 ] 類型[ REPL快照 ]
[ JIN001-dack-3 ] 類型[ REPL日記讀取器 ]

下面藍色字的稱號會依據宣布辦事器名,宣布名落第幾回宣布而應用分歧的編號

REPL快照功課是SQL Server復制的條件前提,它會先把宣布的表構造,數據,索引,束縛等生成到宣布辦事器的OS目次下文件
(當有定閱的時刻才會生成, 當定閱要求初始化或許依照某個時光表調劑生成)

REPL日記讀取器在事務復制的時刻是一向處於運轉狀況。(在歸並復制的時刻可以依據調劑的時光表來運轉)

樹立一個數據庫復制定閱的進程:

[復制] -> [定閱] -> 右鍵選擇 -> [新建要求定閱]

-> [下一步] -> [查找宣布] -> [檢查已注冊辦事器所做的宣布]

-> [下一步] -> [選擇宣布] -> [選中曾經樹立宣布辦事器上的數據庫宣布名]

-> [下一步] -> [指定同步署理法式登錄] -> [現代理法式銜接到署理辦事器時:應用SQL Server身份驗證]
(輸出宣布辦事器上distributor_admin用戶名和暗碼)

-> [下一步] -> [選擇目標數據庫] -> [選擇在個中創立定閱的數據庫名]/[也能夠新建一個庫名]

-> [下一步] -> [許可匿名定閱] -> [是,生成匿名定閱]

-> [下一步] -> [初始化定閱] -> [是,初始化架構和數據]

-> [下一步] -> [快照傳送] -> [應用該宣布的默許快照文件夾中的快照文件]
(定閱辦事器要能拜訪宣布辦事器的REPLDATA文件夾,假如有成績,可以手工設置收集同享及同享權限)

-> [下一步] -> [快照傳送] -> [應用該宣布的默許快照文件夾中的快照文件]

-> [下一步] -> [設置分發署理法式調劑] -> [應用以下調劑] -> [更改] -> [例如每五分鐘調劑一次]

-> [下一步] -> [啟動請求的辦事] -> [該定閱請求在宣布辦事器上運轉SQLServerAgent辦事]

-> [下一步] -> [完成] -> [肯定]

勝利樹立了定閱後,定閱辦事器上新增長了一個種別是[REPL-分發]功課(歸並復制的時刻種別是[REPL-歸並])
它會依照我們給的時光調劑表運轉數據庫同步復制的功課

3、SQL Server復制設置裝備擺設好後, 能夠湧現異常情形的試驗日記:

1.宣布辦事器斷網,sql server辦事封閉,重啟動,關機的時刻,對曾經設置好的復制沒有多年夜影響

中止時代,分發和定閱都吸收到沒有復制的事務信息

2.分發辦事器斷網,sql server辦事封閉,重啟動,關機的時刻,對曾經設置好的復制有一些影響

中止時代,宣布辦事器的事務列隊聚積起來
(假如設置了較長時光才刪除過時定閱的選項, 忙碌宣布數據庫的事務日記能夠會較疾速收縮),

定閱辦事器會由於拜訪不到宣布辦事器,重復重試
我們可以設置重試次數和重試的時光距離(最年夜的重試次數是9999, 假如每分鐘重試一次,可以支撐約6.9天不失足)

分發辦事器sql server辦事啟動,收集接通今後,宣布辦事器上的聚積功課將按時光次序感化到定閱機械上:

會須要一個比擬長的時光(現實上是生成一切事務的insert,update,delete語句,在定閱辦事器上去履行)
我們在通俗的PC機上試驗的58個事務100228個敕令履行花了7分28秒.

3.定閱辦事器斷網,sql server辦事封閉,重啟動,關機的時刻,對曾經設置好的復制影響比擬年夜,能夠須要從新初試化

我們試驗情況(定閱辦事器)從18:46分不測停機以, 第二天8:40分重啟動後,
曾經設好的復制在8:40分今後又開端正常運轉了, 宣布辦事器上的聚積功課將按時光次序感化到定閱機械上
但復制治理器裡湧現快照的毛病提醒, 快照能夠須要從新初試化,復制能夠須要從新啟動.
(我們試驗情況的機械並沒有停止快照初試化,復制依然是勝利運轉的)

4、刪除曾經建好的宣布和訂閱可以直接用delete刪除按鈕

我們最好老是按先刪訂閱,再刪宣布,最初禁用宣布的次序來操作。

假如要完全刪去SQL Server下面的復制設置, 可以如許操作:

[復制] -> 右鍵選擇 [禁用宣布] -> [迎接應用禁用宣布和分發領導]

-> [下一步] -> [禁用宣布] -> [要在"@servername"上禁用宣布]

-> [下一步] -> [完成禁用宣布和分發領導] -> [完成]

我們也能夠用T-SQL敕令來完成復制中宣布及定閱的創立和刪除, 選中曾經設好的宣布和定閱, 按屬標右鍵
可以[生成SQL劇本]。(這裡就不具體講了, 前面推舉的網站內有比擬具體的內容)

當你試圖刪除或許變革一個table時,湧現以下毛病
Server: Msg 3724, Level 16, State 2, Line 1
Cannot drop the table object_name because it is being used for replication.

比擬典范的情形是該table已經用於復制,然則後來又刪除復制

處置方法:

select * from sysobjects where replinfo >0
sp_configure allow updates, 1
go
reconfigure with override
go
begin transaction
update sysobjects set replinfo = 0 where replinfo >0
commit transaction
go
rollback transaction
go
sp_configure allow updates, 0
go
reconfigure with override
go




疑問:
在歸並復制設置裝備擺設完整後,假如同步署理停滯了。我要在法式中去從新啟動歸並復制的同步署理。請問應用甚麼敕令或存儲進程呢?
處理方法:
sp_start_job
指導 SQL Server 署理法式立刻履行功課。

示例
下例啟動名為 Nightly Backup 的功課。

USE msdb
EXEC sp_start_job @job_name = Nightly Backup


2、日記復原功效、、、


解釋:
上面的代碼演示了若何應用日記復原功效,將主數據庫中的數據變更實時反應到備用數據庫中
備用數據庫的數據可以隨時用於查詢,但不克不及被更新(備用數據庫只讀)。

起首,創立一個演示用的數據庫(主數據庫)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
FILENAME = c:\Db_test.mdf )
LOG ON
( NAME = Db_test_LOG,
FILENAME = c:\Db_test.ldf)
GO

對數據庫停止備份
BACKUP DATABASE Db_test TO DISK=c:\test_data.bak WITH FORMAT
GO

把數據庫復原成備用數據庫(演示主數據庫與這個備用數據庫之間的同步)
RESTORE DATABASE Db_test_bak FROM DISK=c:\test_data.bak
WITH REPLACE,STANDBY=c:\db_test_bak.ldf
,MOVE Db_test_DATA TO c:\Db_test_data.mdf
,MOVE Db_test_LOG TO c:\Db_test_log.ldf
GO

啟動 SQL Agent 辦事
EXEC master..xp_cmdshell net start sqlserveragent,no_output
GO

創立主辦事器數據訓與備用辦事器數據庫之間同步的功課
DECLARE @jogid uniqueidentifier
EXEC msdb..sp_add_job
@job_id = @jogid OUTPUT,
@job_name = N數據同步處置

創立同步處置步調
EXEC msdb..sp_add_jobstep
@job_id = @jogid,
@step_name = N數據同步,
@subsystem = TSQL,
@command = N
主數據庫中停止日記備份
BACKUP LOG Db_test TO DISK=c:\test_log.bak WITH FORMAT

備用數據庫中復原主數據庫的日記備份(運用主數據庫中的最新變更
現實應當時主數據庫備份與備用數據庫的復原功課應當分離在主辦事器和備用辦事器上樹立,而且備份文件應當放在主辦事器和備用都能拜訪的同享目次中
RESTORE LOG Db_test_bak FROM DISK=c:\test_log.bak WITH STANDBY=c:\test_log.ldf,
@retry_attempts = 5,
@retry_interval = 5

創立調劑(每分鐘履行一次)
EXEC msdb..sp_add_jobschedule
@job_id = @jogid,
@name = N時光支配,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x4,
@freq_subday_interval=1,
@freq_recurrence_factor=1

添加目的辦事器
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jogid,
@server_name = N(local)
GO

經由過程上述處置,主數據庫與備用數據庫之間的同步關系曾經設置完成
上面開端測試能否能完成同步

在主數據庫中創立一個測試用的表
CREATE TABLE Db_test.dbo.TB_test(ID int)
GO

期待1分鐘30秒(因為同步的時光距離設置為1分鐘,所以要延時能力看到後果)
WAITFOR DELAY 00:01:30
GO

查詢一下備用數據庫,看看同步能否勝利
SELECT * FROM Db_test_bak.dbo.TB_test

成果:
ID
-

(所影響的行數為 0 行)


測試勝利
GO

最初刪除一切的測試
DROP DATABASE Db_test,Db_test_bak
EXEC msdb..sp_delete_job @job_name=N數據同步處置
GO


===========================================================

辦事器檔機處置解釋
應用這類方法樹立的數據庫同步,當主數據庫弗成用時(例如,主數據庫破壞或許停機檢驗)
可使用以下兩種辦法使備用數據庫可用。



1. 假如主數據庫破壞,沒法備份出最新的日記,可以直接應用上面的語句使備用數據庫可讀寫(喪失比來一第二天志復原後的一切數據)。
RESTORE LOG Db_test_bak WITH RECOVERY


2. 假如主數據庫可以備份出最新日記,則可使用上面的語句。
先備份主數據庫的最新的事務日記
BACKUP LOG Db_test TO DISK=c:\test_log.bak WITH FORMAT
再在備用數據庫中恢復最新的事務日記,而且使備用數據庫可讀寫(進級為主數據庫)
RESTORE LOG Db_test_bak FROM DISK=c:\test_log.bak

簡略地說:
1. 你的sql辦事要應用指定的windows用戶上岸, 而不克不及應用"當地體系帳戶"
2. 用於上岸sql辦事的用戶請求對同享目次具有一切權限
3. 假如你的電腦沒有參加到域, 還必需包管源和目的辦事器的sql辦事設置的上岸用戶是一樣的(用戶名和暗碼都一樣)

收集備份重要是權限設置成績, 參考上面的備份文件同享目次權限設置辦法去處理目次的同享權限便可以了

上面假定是假定A辦事器上的數據庫備份到B辦事器上的同享目次權限設置(兩台辦事器應當在局域網內,許可目次同享拜訪)::

1.機械A,B創立一個同名的windows用戶,用戶組設置為administrators,並設置雷同的暗碼,做為備份文件夾文件夾的有用拜訪用戶,操作:
我的電腦
掌握面板
治理對象
盤算機治理
用戶和組
右鍵用戶
新建用戶
樹立一個附屬於administrator組的上岸windows的用戶

2.在B機械器上,新建一個同享目次,做為備份文件的寄存目次,操作:
我的電腦D:\ 新建一個目次,名為: BAK
右鍵這個新建的目次
屬性同享
選擇"同享該文件夾"
經由過程"權限"按紐來設置詳細的用戶權限,包管第一步中創立的用戶具有對該文件夾的一切權限
肯定


3.設置 MSSQLSERVER 及 SQLSERVERAGENT 辦事的啟動用戶
開端法式治理對象辦事
右鍵 MSSQLSERVER
屬性上岸選擇"此賬戶"
輸出或許選擇第一步中創立的windows登錄用戶名
"暗碼"中輸出該用戶的暗碼
肯定
異樣的辦法設置 SQLSERVERAGENT

4.在A機械上完成對B機械BAK目次的映照

5.查詢剖析器中履行上面的語句,磨練能否勝利:
exec master..xp_cmdshell dir 映照的盤符

6.A辦事器上做備份籌劃

備注:創立一個新的用戶只是為了讓MSSQLSERVER辦事的啟動帳戶與同享目次的有用拜訪同名且暗碼雷同,如許能力經由過程驗證(所以你也能夠用其他有用的用戶來取代,只須要知足用戶名和暗碼雷同,而且具有足夠的權限)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved