自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server 2000中的數(shù)據(jù)同步問(wèn)題

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維 SQL Server
在SQL Server 里設(shè)置和使用數(shù)據(jù)庫(kù)復(fù)制之前,應(yīng)先檢查相關(guān)的幾臺(tái)SQL Server服務(wù)器下面幾點(diǎn)是否滿(mǎn)足條件。

1.MS SQL Server和SQL Server agent服務(wù)是否是以域用戶(hù)身份啟動(dòng)并運(yùn)行的(.\administrator用戶(hù)也是可以的)如果登錄用的是本地系統(tǒng)帳戶(hù)local,將不具備網(wǎng)絡(luò)功能,會(huì)產(chǎn)生以下錯(cuò)誤: 進(jìn)程未能連接到Distributor '@Server name' (如果您的服務(wù)器已經(jīng)用了SQL Server全文檢索服務(wù), 請(qǐng)不要修改MSSQLserver和Sqlserveragent服務(wù)的local啟動(dòng)。會(huì)照成全文檢索服務(wù)不能用。請(qǐng)換另外一臺(tái)機(jī)器來(lái)做SQL Server 里復(fù)制中的分發(fā)服務(wù)器。)

修改服務(wù)啟動(dòng)的登錄用戶(hù),需要重新啟動(dòng)MSSQLserver和Sqlserveragent服務(wù)才能生效。

2、檢查相關(guān)的幾臺(tái)SQL Server服務(wù)器是否改過(guò)名稱(chēng)(需要srvid=0的本地機(jī)器上srvname和datasource一樣)

在查詢(xún)分析器里執(zhí)行: 

use master 
select srvid,srvname,datasource from sysservers

如果沒(méi)有srvid=0或者srvid=0(也就是本機(jī)器)但srvname和datasource不一樣, 需要按如下方法修改:

USE master 
GO
-- 設(shè)置兩個(gè)變量
DECLARE @serverproperty_servername varchar(100),
@servername varchar(100)
-- 取得Windows NT 服務(wù)器和與指定的 SQL Server 實(shí)例關(guān)聯(lián)的實(shí)例信息
SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
-- 返回運(yùn)行 Microsoft SQL Server 的本地服務(wù)器名稱(chēng)
SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
-- 顯示獲取的這兩個(gè)參數(shù)
select @serverproperty_servername,@servername
--如果@serverproperty_servername和@servername不同(因?yàn)槟愀倪^(guò)計(jì)算機(jī)名字),再運(yùn)行下面的
--刪除錯(cuò)誤的服務(wù)器名
EXEC sp_dropserver @server=@servername
--添加正確的服務(wù)器名
EXEC sp_addserver @server=@serverproperty_servername, @local='local'

修改這項(xiàng)參數(shù),需要重新啟動(dòng)MSSQLserver和Sqlserveragent服務(wù)才能生效。

這樣一來(lái)就不會(huì)在創(chuàng)建復(fù)制的過(guò)程中出現(xiàn)18482、18483錯(cuò)誤了。

3、檢查SQL Server企業(yè)管理器里面相關(guān)的幾臺(tái)SQL Server注冊(cè)名是否和上面第二點(diǎn)里介紹的srvname一樣

不能用IP地址的注冊(cè)名。(我們可以刪掉IP地址的注冊(cè),新建以SQL Server管理員級(jí)別的用戶(hù)注冊(cè)的服務(wù)器名)這樣一來(lái)就不會(huì)在創(chuàng)建復(fù)制的過(guò)程中出現(xiàn)14010、20084、18456、18482、18483錯(cuò)誤了。

4、檢查相關(guān)的幾臺(tái)SQL Server服務(wù)器網(wǎng)絡(luò)是否能夠正常訪(fǎng)問(wèn)

如果ping主機(jī)IP地址可以,但ping主機(jī)名不通的時(shí)候,需要在

winnt\system32\drivers\etc\hosts (WIN2000) 
windows\system32\drivers\etc\hosts (WIN2003)

文件里寫(xiě)入數(shù)據(jù)庫(kù)服務(wù)器IP地址和主機(jī)名的對(duì)應(yīng)關(guān)系。

例如:

127.0.0.1 localhost 
192.168.0.35 oracledb oracledb
192.168.0.65 fengyu02 fengyu02
202.84.10.193 bj_db bj_db

或者在SQL Server客戶(hù)端網(wǎng)絡(luò)實(shí)用工具里建立別名

5、系統(tǒng)需要的擴(kuò)展存儲(chǔ)過(guò)程是否存在(如果不存在,需要恢復(fù)):

sp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll' 
go
sp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'
go
sp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll'
go
sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

接下來(lái)就可以用SQL Server企業(yè)管理器里[復(fù)制]-> 右鍵選擇->[配置發(fā)布、訂閱服務(wù)器和分發(fā)]的圖形界面來(lái)配置數(shù)據(jù)庫(kù)復(fù)制了。

下面是按順序列出配置復(fù)制的步驟:

一、建立發(fā)布和分發(fā)服務(wù)器 [歡迎使用配置發(fā)布和分發(fā)向?qū)->[選擇分發(fā)服務(wù)器] ->[使"@servername"成為它自己的分發(fā)服務(wù)器,SQL Server將創(chuàng)建分發(fā)數(shù)據(jù)庫(kù)和日志] ->[制定快照文件夾]-> [自定義配置] -> [否,使用下列的默認(rèn)配置] -> [完成]

上述步驟完成后, 會(huì)在當(dāng)前"@servername" SQL Server數(shù)據(jù)庫(kù)里建立了一個(gè)distribion庫(kù)和一個(gè)distributor_admin管理員級(jí)別的用戶(hù)(我們可以任意修改密碼)

服務(wù)器上新增加了四個(gè)作業(yè):

[ 代理程序歷史記錄清除: distribution ]

[ 分發(fā)清除: distribution ]

[ 復(fù)制代理程序檢查 ]

[ 重新初始化存在數(shù)據(jù)驗(yàn)證失敗的訂閱 ]

SQL Server企業(yè)管理器里多了一個(gè)復(fù)制監(jiān)視器, 當(dāng)前的這臺(tái)機(jī)器就可以發(fā)布、分發(fā)、訂閱了。

我們?cè)俅卧赟QL Server企業(yè)管理器里[復(fù)制]-> 右鍵選擇 ->[配置發(fā)布、訂閱服務(wù)器和分發(fā)]

我們可以在 [發(fā)布服務(wù)器和分發(fā)服務(wù)器的屬性] 窗口-> [發(fā)布服務(wù)器] -> [新增] -> [確定]-> [發(fā)布數(shù)據(jù)庫(kù)] -> [事務(wù)]/[合并] -> [確定]-> [訂閱服務(wù)器] -> [新增] -> [確定] 把網(wǎng)絡(luò)上的其它SQL Server服務(wù)器添加成為發(fā)布或者訂閱服務(wù)器.

復(fù)制是將一組數(shù)據(jù)從一個(gè)數(shù)據(jù)源拷貝到多個(gè)數(shù)據(jù)源的技術(shù),是將一份數(shù)據(jù)發(fā)布到多個(gè)存儲(chǔ)站點(diǎn)上的有效方式。使用復(fù)制技術(shù),用戶(hù)可以將一份數(shù)據(jù)發(fā)布到多臺(tái)服務(wù)器上,從而使不同的服務(wù)器用戶(hù)都可以在權(quán)限的許可的范圍內(nèi)共享這份數(shù)據(jù)。復(fù)制技術(shù)可以確保分布在不同地點(diǎn)的數(shù)據(jù)自動(dòng)同步更新,從而保證數(shù)據(jù)的一致性。

SQL復(fù)制的基本元素包括

出版服務(wù)器、訂閱服務(wù)器、分發(fā)服務(wù)器、出版物、文章

SQL復(fù)制的工作原理

SQL SERVER 主要采用出版物、訂閱的方式來(lái)處理復(fù)制。源數(shù)據(jù)所在的服務(wù)器是出版服務(wù)器,負(fù)責(zé)發(fā)表數(shù)據(jù)。出版服務(wù)器把要發(fā)表的數(shù)據(jù)的所有改變情況的拷貝復(fù)制到分發(fā)服務(wù)器,分發(fā)服務(wù)器包含有一個(gè)分發(fā)數(shù)據(jù)庫(kù),可接收數(shù)據(jù)的所有改變,并保存這些改變,再把這些改變分發(fā)給訂閱服務(wù)器

SQL SERVER復(fù)制技術(shù)類(lèi)型

SQL SERVER提供了三種復(fù)制技術(shù),分別是:

1、快照復(fù)制(呆會(huì)我們就使用這個(gè))

2、事務(wù)復(fù)制

3、合并復(fù)制

只要把上面這些概念弄清楚了那么對(duì)復(fù)制也就有了一定的理解。接下來(lái)我們就一步一步來(lái)實(shí)現(xiàn)復(fù)制的步驟。

第一先來(lái)配置出版服務(wù)器

(1)選中指定[服務(wù)器]節(jié)點(diǎn)

(2)從[工具]下拉菜單的[復(fù)制]子菜單中選擇[發(fā)布、訂閱服務(wù)器和分發(fā)]命令

(3)系統(tǒng)彈出一個(gè)對(duì)話(huà)框點(diǎn)[下一步]然后看著提示一直操作到完成。

(4)當(dāng)完成了出版服務(wù)器的設(shè)置以后系統(tǒng)會(huì)為該服務(wù)器的樹(shù)形結(jié)構(gòu)中添加一個(gè)復(fù)制監(jiān)視器。同時(shí)也生成一個(gè)分發(fā)數(shù)據(jù)庫(kù)(distribution)

第二創(chuàng)建出版物

(1)選中指定的服務(wù)器

(2)從[工具]菜單的[復(fù)制]子菜單中選擇[創(chuàng)建和管理發(fā)布]命令。此時(shí)系統(tǒng)會(huì)彈出一個(gè)對(duì)話(huà)框

(3)選擇要?jiǎng)?chuàng)建出版物的數(shù)據(jù)庫(kù),然后單擊[創(chuàng)建發(fā)布]

(4)在[創(chuàng)建發(fā)布向?qū)的提示對(duì)話(huà)框中單擊[下一步]系統(tǒng)就會(huì)彈出一個(gè)對(duì)話(huà)框。對(duì)話(huà)框上的內(nèi)容是復(fù)制的三個(gè)類(lèi)型。我們現(xiàn)在選第一個(gè)也就是默認(rèn)的快照發(fā)布(其他兩個(gè)大家可以去看看幫助)

(5)單擊[下一步]系統(tǒng)要求指定可以訂閱該發(fā)布的數(shù)據(jù)庫(kù)服務(wù)器類(lèi)型,SQLSERVER允許在不同的數(shù)據(jù)庫(kù)如 ORACLE或ACCESS之間進(jìn)行數(shù)據(jù)復(fù)制。但是在這里我們選擇運(yùn)行"SQL SERVER 2000"的數(shù)據(jù)庫(kù)服務(wù)器

(6)單擊[下一步]系統(tǒng)就彈出一個(gè)定義文章的對(duì)話(huà)框也就是選擇要出版的表

(7)然后[下一步]直到操作完成。當(dāng)完成出版物的創(chuàng)建后創(chuàng)建出版物的數(shù)據(jù)庫(kù)也就變成了一個(gè)共享數(shù)據(jù)庫(kù)。

第三設(shè)計(jì)訂閱

(1)選中指定的訂閱服務(wù)器

(2)從[工具]下拉菜單中選擇[復(fù)制]子菜單的[請(qǐng)求訂閱]

(3)按照單擊[下一步]操作直到系統(tǒng)會(huì)提示檢查SQL SERVER代理服務(wù)的運(yùn)行狀態(tài),執(zhí)行復(fù)制操作的前提條件是SQL SERVER代理服務(wù)必須已經(jīng)啟動(dòng)。

(4)單擊[完成]。完成訂閱操作。

完成上面的步驟其實(shí)復(fù)制也就是成功了。但是如何來(lái)知道復(fù)制是否成功了呢?這里可以通過(guò)這種方法來(lái)快速看是否成功。展開(kāi)出版服務(wù)器下面的復(fù)制——發(fā)布內(nèi)容——右鍵發(fā)布內(nèi)容——屬性——擊活——狀態(tài)然后點(diǎn)立即運(yùn)行代理程序接著點(diǎn)代理程序?qū)傩該艋钫{(diào)度把調(diào)度設(shè)置為每一天發(fā)生,每一分鐘,在0:00:00和23:59:59之間。接下來(lái)就是判斷復(fù)制是否成功了打開(kāi)C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面看是不是有一些以時(shí)間做為文件名的文件夾差不多一分中就產(chǎn)生一個(gè)。要是你還不信的話(huà)就打開(kāi)你的數(shù)據(jù)庫(kù)看在訂閱的服務(wù)器的指定訂閱數(shù)據(jù)庫(kù)下看是不是看到了你剛才所發(fā)布的表— 一個(gè)手工

同步的方案

--定時(shí)同步服務(wù)器上的數(shù)據(jù)

--例子:

--測(cè)試環(huán)境,SQL Server,遠(yuǎn)程服務(wù)器名:xz,用戶(hù)名為:sa,無(wú)密碼,測(cè)試數(shù)據(jù)庫(kù):test

--服務(wù)器上的表(查詢(xún)分析器連接到服務(wù)器上創(chuàng)建)

create table [user](id int primary key,number varchar(4),name varchar(10))
go
--以下在局域網(wǎng)(本機(jī)操作)
--本機(jī)的表,state說(shuō)明:null 表示新增記錄,1 表示修改過(guò)的記錄,0 表示無(wú)變化的記錄
if exists (select * from dbo.sysobjects where id = object_id(N'[user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [user]
GO
create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit)
go
--創(chuàng)建觸發(fā)器,維護(hù)state字段的值
create trigger t_state on [user]
after update
as
update [user] set state=1
from [user] a join inserted b on a.id=b.id
where a.state is not null
go
--為了方便同步處理,創(chuàng)建鏈接服務(wù)器到要同步的服務(wù)器
--這里的遠(yuǎn)程服務(wù)器名為:xz,用戶(hù)名為:sa,無(wú)密碼
if exists(select 1 from master..sysservers where srvname='srv_lnk')
exec sp_dropserver 'srv_lnk','droplogins'
go
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','xz'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa'
go
--創(chuàng)建同步處理的存儲(chǔ)過(guò)程
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_synchro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_synchro]
GO
create proc p_synchro
as
--set XACT_ABORT on
--啟動(dòng)遠(yuǎn)程服務(wù)器的MSDTC服務(wù)
--exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output
--啟動(dòng)本機(jī)的MSDTC服務(wù)
--exec master..xp_cmdshell 'net start msdtc',no_output
--進(jìn)行分布事務(wù)處理,如果表用標(biāo)識(shí)列做主鍵,用下面的方法
--BEGIN DISTRIBUTED TRANSACTION
--同步刪除的數(shù)據(jù)
delete from srv_lnk.test.dbo.[user]
where id not in(select id from [user])
--同步新增的數(shù)據(jù)
insert into srv_lnk.test.dbo.[user]
select id,number,name from [user] where state is null
--同步修改的數(shù)據(jù)
update srv_lnk.test.dbo.[user] set
number=b.number,name=b.name
from srv_lnk.test.dbo.[user] a
join [user] b on a.id=b.id
where b.state=1
--同步后更新本機(jī)的標(biāo)志
update [user] set state=0 where isnull(state,1)=1
--COMMIT TRAN
go
--創(chuàng)建作業(yè),定時(shí)執(zhí)行數(shù)據(jù)同步的存儲(chǔ)過(guò)程
if exists(SELECT 1 from msdb..sysjobs where name='數(shù)據(jù)處理')
EXECUTE msdb.dbo.sp_delete_job @job_name='數(shù)據(jù)處理'
exec msdb..sp_add_job @job_name='數(shù)據(jù)處理'
--創(chuàng)建作業(yè)步驟
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec p_synchro' --數(shù)據(jù)處理的命令
,@dbname=db_name() --執(zhí)行數(shù)據(jù)處理的數(shù)據(jù)庫(kù)名
exec msdb..sp_add_jobstep @job_name='數(shù)據(jù)處理',
@step_name = '數(shù)據(jù)同步',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重試次數(shù)
@retry_interval = 5 --重試間隔
--創(chuàng)建調(diào)度
EXEC msdb..sp_add_jobschedule @job_name = '數(shù)據(jù)處理',
@name = '時(shí)間安排',
@freq_type = 4, --每天
@freq_interval = 1, --每天執(zhí)行一次
@active_start_time = 00000 --0點(diǎn)執(zhí)行
go

【編輯推薦】

  1. MS SQL Server和MySQL區(qū)別
  2. 小議SQL Server主鍵和自動(dòng)編號(hào)問(wèn)題
  3. SQL Server通過(guò)代碼執(zhí)行代理任務(wù)
責(zé)任編輯:彭凡 來(lái)源: cnblogs
相關(guān)推薦

2010-07-08 15:55:25

SQL Server

2010-11-10 15:23:55

SQL SERVER

2010-07-01 17:08:26

2010-07-05 14:11:07

SQL Server

2011-04-06 13:14:29

SQL Server 安裝

2010-07-23 09:15:08

安裝SQL Serve

2010-07-26 13:33:28

SQL Server

2011-04-06 17:30:41

SQL ServerSQL

2011-03-23 10:08:09

2010-07-23 14:11:18

SQL Server

2010-06-17 17:11:03

SQL Server

2017-05-25 08:52:08

SQL Server數(shù)據(jù)庫(kù)

2010-07-23 13:33:00

SQL Server

2010-06-18 13:14:26

SQL Server

2010-07-26 14:09:32

SQL Server

2010-07-15 10:48:48

SQL Server2

2011-04-02 16:20:21

SQL SERVER 同步復(fù)制

2010-07-16 13:14:39

SQL Server

2009-08-05 15:17:02

NTILE函數(shù)

2011-04-01 10:52:39

SQL Server XML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)