溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

sqlserver關(guān)于發(fā)布訂閱replication_subscription的知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-11-09 14:49:42 來(lái)源:億速云 閱讀:192 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

本篇內(nèi)容主要講解“sqlserver關(guān)于發(fā)布訂閱replication_subscription的知識(shí)點(diǎn)有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“sqlserver關(guān)于發(fā)布訂閱replication_subscription的知識(shí)點(diǎn)有哪些”吧!

事務(wù)復(fù)制的工作機(jī)制

事務(wù)復(fù)制是由 SQL Server 快照代理、日志讀取器代理和分發(fā)代理實(shí)現(xiàn)的。
快照代理準(zhǔn)備快照文件(其中包含了已發(fā)布表和數(shù)據(jù)庫(kù)對(duì)象的架構(gòu)和數(shù)據(jù)),然后將這些文件存儲(chǔ)在快照文件夾中,并在分發(fā)服務(wù)器中的分發(fā)數(shù)據(jù)庫(kù)中記錄同步作業(yè)。
日志讀取器代理監(jiān)視為事務(wù)復(fù)制配置的每個(gè)數(shù)據(jù)庫(kù)的事務(wù)日志,并將標(biāo)記為要復(fù)制的事務(wù)從事務(wù)日志復(fù)制到分發(fā)數(shù)據(jù)庫(kù)中,分發(fā)數(shù)據(jù)庫(kù)的作用相當(dāng)于一個(gè)可靠的存儲(chǔ)-轉(zhuǎn)發(fā)隊(duì)列。
分發(fā)代理將快照文件夾中的初始快照文件和分發(fā)數(shù)據(jù)庫(kù)表中的事務(wù)復(fù)制到訂閱服務(wù)器中。
在發(fā)布服務(wù)器中所做的增量更改根據(jù)分發(fā)代理的計(jì)劃流向訂閱服務(wù)器,分發(fā)代理可以連續(xù)運(yùn)行以盡量減少滯后時(shí)間,也可以按預(yù)定的時(shí)間間隔運(yùn)行。

因?yàn)槿罩咀x取器代理(對(duì)應(yīng)如下3的TESTDB1-replicate2-2)會(huì)把發(fā)布數(shù)據(jù)庫(kù)的事務(wù)日志復(fù)制一份到分發(fā)數(shù)據(jù)庫(kù)中,所以發(fā)布數(shù)據(jù)庫(kù)并不需要在完整恢復(fù)模式下,如果日志讀取器沒(méi)能完成復(fù)制就發(fā)生發(fā)布數(shù)據(jù)庫(kù)的事務(wù)日志又將要截?cái)鄷r(shí),則發(fā)布數(shù)據(jù)庫(kù)的事務(wù)日志狀態(tài)sys.databases.log_reuse_wait_desc會(huì)顯示為Replication以阻止發(fā)布數(shù)據(jù)庫(kù)的事務(wù)日志發(fā)生截?cái)?/p>

1、如果操作發(fā)布訂閱的客戶端SSMS版本比服務(wù)器端版本低,會(huì)報(bào)錯(cuò),比如service是sqlserver2016,ssms使用sqlserver2014會(huì)報(bào)錯(cuò)

2、只建立分發(fā)時(shí),會(huì)新增7個(gè)相關(guān)job;初次建立發(fā)布的同時(shí)建立分發(fā),會(huì)新增9個(gè)相關(guān)job

3、后面每新增一個(gè)發(fā)布名,發(fā)布服務(wù)器上會(huì)新增兩個(gè)發(fā)布的job如下,前一個(gè)是不停的生成發(fā)布數(shù)據(jù),該job不停運(yùn)行,后一個(gè)是初始化發(fā)布數(shù)據(jù)(生成unc目錄下的文件和文件),運(yùn)行一次就可以了

TESTDB1-replicate2-2

TESTDB1-replicate2-pub_replicate2-2

發(fā)布實(shí)例名--數(shù)據(jù)庫(kù)名--發(fā)布名的序號(hào)

發(fā)布實(shí)例名--數(shù)據(jù)庫(kù)名--發(fā)布名--發(fā)布名的序號(hào)

4、發(fā)布服務(wù)器-復(fù)制-本地發(fā)布-發(fā)布名-右鍵-屬性-snapshot,選擇put files in the following folder,可以把文件放到共享路徑

5、訂閱,可以在訂閱服務(wù)器建立,也可以在發(fā)布服務(wù)器建立,發(fā)布服務(wù)器-復(fù)制-本地發(fā)布-發(fā)布名,右鍵選擇new subscriptions

6、后面每新增一個(gè)訂閱,如果是推送訂閱,主庫(kù)增加一個(gè)job,如果是請(qǐng)求訂閱,從庫(kù)增加一個(gè)job

TESTDB1-replicate2-replicate2-TESTDB2-6(推送訂閱,發(fā)布實(shí)例名-發(fā)布數(shù)據(jù)庫(kù)名-發(fā)布名-訂閱實(shí)例名-編號(hào))

TESTDB1-replicate1-pub_replicate1-TESTDB2-replicate_01-CD7A365E-2DE7-47A3-B31E-70F785FA71F2(請(qǐng)求訂閱)

7、發(fā)布job或訂閱job,都可以根據(jù)需要修改scheduler

8、本地發(fā)布或本地訂閱下面的訂閱圖標(biāo)有小圈圈,表示在當(dāng)前實(shí)例下,是對(duì)方主動(dòng)而不是當(dāng)前實(shí)例主動(dòng),訂閱的job在對(duì)方那邊

推送訂閱,在主庫(kù)發(fā)布下面的訂閱圖標(biāo)沒(méi)有藍(lán)色小圈圈,在從庫(kù)訂閱下面的訂閱圖標(biāo)有藍(lán)色小圈圈

請(qǐng)求訂閱,在主庫(kù)發(fā)布下面的訂閱圖標(biāo)有藍(lán)色小圈圈,在從庫(kù)訂閱下面的訂閱圖標(biāo)沒(méi)有藍(lán)色小圈圈

--也適用于本地發(fā)布又是本地訂閱的情況,比如本地一個(gè)庫(kù)信息傳輸?shù)奖镜亓硪粋€(gè)庫(kù),則本地發(fā)布或本地訂閱下面都有訂閱,如果是推送訂閱,則發(fā)布下面的訂閱圖標(biāo)沒(méi)有藍(lán)色小圈圈,訂閱下面的訂閱圖標(biāo)有藍(lán)色小圈圈,如果是請(qǐng)求訂閱,則發(fā)布下面的訂閱圖標(biāo)有藍(lán)色小圈圈,訂閱下面的訂閱圖標(biāo)沒(méi)有藍(lán)色小圈圈

9、訂閱的刪除,根據(jù)推送訂閱和請(qǐng)求訂閱的不同,有不同操作方式,統(tǒng)一的操作方法就是直接刪除主庫(kù)發(fā)布下面的訂閱。

推送訂閱的情況下,如果只在從庫(kù)刪除訂閱,則主庫(kù)的發(fā)布下面的訂閱信息還在,主庫(kù)上的訂閱job也還在(但是信息不會(huì)同步到訂閱庫(kù)了),還需要在主庫(kù)再刪除一遍

推送訂閱的情況下,在主庫(kù)刪除訂閱的話,主庫(kù)上的訂閱job也不在了,從庫(kù)的訂閱信息也自動(dòng)刪除了

請(qǐng)求訂閱的情況下,在主庫(kù)刪除訂閱的話,從庫(kù)上的訂閱job也不在了,從庫(kù)的訂閱信息也自動(dòng)刪除了

請(qǐng)求訂閱的情況下,在從庫(kù)刪除訂閱的話,從庫(kù)上的訂閱job不在了,主庫(kù)上的發(fā)布下面的訂閱信息也不在了

--也適用于本地發(fā)布又是本地訂閱的情況,比如本地一個(gè)庫(kù)信息傳輸?shù)奖镜亓硪粋€(gè)庫(kù),則本地發(fā)布或本地訂閱下面都有訂閱

10、發(fā)布的job在msdb.dbo.sysjobs正常記錄,但是這些job運(yùn)行時(shí)在sysprocesses.program_name都是顯示Microsoft SQL Server,不顯示為具體的job名稱(chēng),如下語(yǔ)句查詢(xún)job,不適用于訂閱復(fù)制

select * from msdb.dbo.sysjobs where name='jobname'

select a.program_name,a.* from master..sysprocesses a where a.program_name like '%0D1CE57E8AC5%'

11、訂閱的job在msdb.dbo.sysjobs正常記錄,但是這些job運(yùn)行時(shí)在sysprocesses.program_name都是顯示為空

12、刪除訂閱數(shù)據(jù)庫(kù)時(shí),出現(xiàn)如下,解決方法是把訂閱的job停掉再把訂閱數(shù)據(jù)庫(kù)offline,再刪除

Cannot drop the database ‘XXX’because it is being used for replication

13、刪除發(fā)布,如果發(fā)布下面有訂閱,則刪除發(fā)布的時(shí)候,訂閱就失效了

請(qǐng)求訂閱的情況下,從庫(kù)的本地訂閱下面還有訂閱和job,但是失效了,還需要手工刪除一下訂閱,此時(shí)會(huì)自動(dòng)刪除job

推送訂閱的情況下,主庫(kù)的發(fā)布和job都刪除了,從庫(kù)的本地訂閱下面還有訂閱,但是失效了,還需要手工刪除一下

--也適用于本地發(fā)布又是本地訂閱的情況,比如本地一個(gè)庫(kù)信息傳輸?shù)奖镜亓硪粋€(gè)庫(kù),則本地發(fā)布或本地訂閱下面都有訂閱

14、訂閱庫(kù),可以執(zhí)行DML,執(zhí)行delete不會(huì)有什么后遺癥,執(zhí)行update或insert的話,如果后面收到發(fā)布庫(kù)傳過(guò)來(lái)的數(shù)據(jù),可能會(huì)產(chǎn)生沖突

15、發(fā)布訂閱相關(guān)的存儲(chǔ)過(guò)程

EXEC distribution.dbo.sp_replmonitorhelppublisher --發(fā)布庫(kù)上執(zhí)行,檢查發(fā)布服務(wù)器上的本地發(fā)布的情況

16、發(fā)布建立好后,發(fā)布服務(wù)器上有一個(gè)linked sever指向分發(fā)服務(wù)器,名稱(chēng)一般為repl_distributor,disable publishing and distribution后,該linked server會(huì)自動(dòng)刪除

訂閱建立后(不管是請(qǐng)求訂閱還是推送訂閱),會(huì)在發(fā)布服務(wù)器上自動(dòng)建立一個(gè)linked server指向訂閱服務(wù)器。刪除發(fā)布或disable publishing and distribution,該linked server都不會(huì)自動(dòng)刪除

17、如果訂閱的job的schedules沒(méi)有明確指定,只是start automaticaly when SQL Server Agent starts,那么一旦把這個(gè)job停止,后面不會(huì)再同步了,在Replication Monitor里面的Subscription Watch List看到這個(gè)訂閱的status就是not running

18、推送訂閱:到發(fā)布服務(wù)器下面的本地發(fā)布-發(fā)布名稱(chēng)-訂閱名,右鍵選擇view Synchronization Status可以看到訂閱狀態(tài)

請(qǐng)求訂閱:到訂閱服務(wù)器下面的本地訂閱-訂閱名,右鍵訂閱,選擇view Synchronization Status可以看到訂閱狀態(tài),并可以看到訂閱job的運(yùn)行情況

19、復(fù)制-本地訂閱-訂閱名,右鍵選擇view Synchronization Status查看到狀態(tài)是No replicated transactions are available,則到發(fā)布端,復(fù)制-本地發(fā)布-發(fā)布名,右鍵發(fā)布,選擇如下兩者,查看job狀態(tài)是否start運(yùn)行中,如果是,再count(*)主從表數(shù)據(jù)是否一致,如果一致,說(shuō)明此時(shí)確實(shí)沒(méi)有DML事務(wù)產(chǎn)生新的數(shù)據(jù)

View Snapshot Agent Status查看快照代理狀態(tài),對(duì)應(yīng)的job其實(shí)是"實(shí)例名-發(fā)布數(shù)據(jù)庫(kù)名-發(fā)布名稱(chēng)-發(fā)布序號(hào)",一般只運(yùn)行一次,生成存放在unc中的初始化數(shù)據(jù)

View Log Reader Agent Status查看日志讀取器代理狀態(tài),對(duì)應(yīng)的job其實(shí)是"實(shí)例名-發(fā)布數(shù)據(jù)庫(kù)名-發(fā)布序號(hào)",一般一直運(yùn)行

20、所謂的分發(fā)服務(wù),就是創(chuàng)建一個(gè)分發(fā)數(shù)據(jù)庫(kù)默認(rèn)是distribution,并創(chuàng)建snapshot目錄,如果沒(méi)有創(chuàng)建分發(fā),初次建立發(fā)布的時(shí)候,會(huì)自動(dòng)建立分發(fā)服務(wù),第二次建立發(fā)布的時(shí)候,會(huì)使用原來(lái)的分發(fā)服務(wù)。創(chuàng)建發(fā)布時(shí),必須要先有分發(fā),要不發(fā)布的數(shù)據(jù)存放在哪呢?分發(fā)就是存放這些要發(fā)布的數(shù)據(jù)的地方

21、分發(fā)服務(wù)器是發(fā)布服務(wù)器與訂閱服務(wù)器之間的橋梁,起著存儲(chǔ)區(qū)的作用,負(fù)責(zé)復(fù)制與一個(gè)或多個(gè)發(fā)布服務(wù)器相關(guān)聯(lián)的特定數(shù)據(jù)。每個(gè)發(fā)布服務(wù)器都與分發(fā)服務(wù)器上的單個(gè)數(shù)據(jù)庫(kù)(稱(chēng)作分發(fā)數(shù)據(jù)庫(kù))相關(guān)聯(lián)。分發(fā)數(shù)據(jù)庫(kù)從發(fā)布服務(wù)器獲得要發(fā)布的數(shù)據(jù)后將存儲(chǔ)復(fù)制狀態(tài)數(shù)據(jù)和有關(guān)發(fā)布的元數(shù)據(jù),并且在某些情況下為從發(fā)布服務(wù)器向訂閱服務(wù)器移動(dòng)的數(shù)據(jù)起著排隊(duì)的作用。在大多數(shù)情況下,一個(gè)數(shù)據(jù)庫(kù)服務(wù)器實(shí)例充當(dāng)發(fā)布服務(wù)器和分發(fā)服務(wù)器兩個(gè)角色。當(dāng)發(fā)布服務(wù)器和分發(fā)服務(wù)器在同一個(gè)數(shù)據(jù)庫(kù)實(shí)例中時(shí),稱(chēng)為“本地分發(fā)服務(wù)器”。當(dāng)發(fā)布服務(wù)器和分發(fā)服務(wù)器按各自的數(shù)據(jù)庫(kù)服務(wù)器實(shí)例配置時(shí),把分發(fā)服務(wù)器稱(chēng)為“遠(yuǎn)程分發(fā)服務(wù)器”

22、沒(méi)有建立過(guò)分發(fā)時(shí),右鍵replication時(shí),有configure distribution,選擇configure distribution表示只配置分發(fā),不做其他動(dòng)作,在此過(guò)程中如果在Publishers頁(yè)面勾選了publisher和distribution database,則右鍵replication時(shí),沒(méi)有了configure distribution,取而代之的是publisher properties、distributor properties、disable publishing and distribution;如果在Publishers頁(yè)面沒(méi)有勾選publisher和distribution database,則右鍵replication時(shí),沒(méi)有了configure distribution,取而代之的是Distributor Properties、Disabled Publishing and Distribution Wizard。其實(shí)右鍵replication選擇configure distribution時(shí)勾選了publisher和distribution database,就是選擇哪些發(fā)布服務(wù)器可以使用這個(gè)分發(fā)服務(wù)器(enable servers to use this distributor when they become publishers),其中distribution database沒(méi)得選,就是分發(fā)的數(shù)據(jù)庫(kù),默認(rèn)是distribution

23、右鍵Replicattion選擇Disabled Publishing and Distribution Wizard,禁用訂閱發(fā)布,所有的訂閱發(fā)布信息都丟失了包括system databases里的distribution數(shù)據(jù)庫(kù)也包括unc目錄下的所有目錄和文件,所以執(zhí)行之前需要對(duì)訂閱發(fā)布信息進(jìn)行備份或截圖

24、要初始化訂閱,即重新把發(fā)布端的數(shù)據(jù)推送到訂閱端,可以選擇推送到這個(gè)發(fā)布的單個(gè)訂閱(發(fā)布端--發(fā)布名稱(chēng)--訂閱名稱(chēng)--右鍵--reinitialize),也可以選擇推送到這個(gè)發(fā)布的所有訂閱(發(fā)布端--發(fā)布名稱(chēng)--右鍵--reinitialize all subscriptions)。再在發(fā)布服務(wù)器-復(fù)制-本地發(fā)布-發(fā)布名,右鍵選擇View Snapshot Agent Status選擇start,或運(yùn)行job"實(shí)例名-發(fā)布數(shù)據(jù)庫(kù)名-發(fā)布名稱(chēng)-發(fā)布序號(hào)"

25、在訂閱端的表里手工先insert一條語(yǔ)句,后面發(fā)布端同步一條一樣數(shù)據(jù)過(guò)來(lái)的時(shí)候,訂閱端會(huì)報(bào)錯(cuò)

Violation of PRIMARY KEY constraint 'PK_XX'. Cannot insert duplicate key in object 'dbo.TXX'. The duplicate key value is (33583).

26、bug問(wèn)題:右鍵Replicattion選擇Disabled Publishing and Distribution Wizard后,最后一步會(huì)報(bào)錯(cuò),但是確實(shí)把發(fā)布和分發(fā)都刪除了

27、導(dǎo)出訂閱復(fù)制的腳本的方法:右鍵Replication選擇Generate Scripts(導(dǎo)出腳本里面有注釋?zhuān)诎l(fā)布端執(zhí)行還是訂閱端執(zhí)行)
以上會(huì)導(dǎo)出當(dāng)前服務(wù)器下的分發(fā)、發(fā)布、訂閱,如果在Generate Scripts跳出的界面勾選了distributor properties則會(huì)導(dǎo)出分發(fā);勾選了publications in the following data sources則會(huì)導(dǎo)出發(fā)布;如果勾選了subscriptions in the following data sources則會(huì)導(dǎo)出訂閱。

28、監(jiān)控發(fā)布訂閱是否有異常,在發(fā)布端執(zhí)行以下5條語(yǔ)句即可

select * from [distribution].[dbo].[MSlogreader_history] WHERE error_id != 0 AND [time] >= DATEADD(HOUR, -1, GETDATE())
select * from [distribution].[dbo].[MSdistribution_history] WHERE error_id != 0 AND [time] >= DATEADD(HOUR, -1, GETDATE())
select * from [distribution].[dbo].[MSsnapshot_history] WHERE error_id != 0 AND [time] >= DATEADD(HOUR, -1, GETDATE())
select * from [distribution].[dbo].MSrepl_errors order by 2 desc

select * from msdb.dbo.sysreplicationalerts order by 7 desc

29、查詢(xún)某個(gè)發(fā)布XX,發(fā)布的數(shù)據(jù)庫(kù)對(duì)象的2種方法

29.1、發(fā)布數(shù)據(jù)庫(kù)上執(zhí)行(數(shù)據(jù)來(lái)源這三張表,distribution.dbo.MSpublications視圖查詢(xún)發(fā)布名、

distribution.dbo.MSarticles視圖查詢(xún)發(fā)布的對(duì)象比如表、sysarticlecolumns視圖查詢(xún)發(fā)布的表發(fā)布了哪些字段) 

select a.article,a.source_object,a.destination_object,b.colid from 

(select article,article_id,source_object,destination_object 

from [distribution].[dbo].MSarticles where publication_id in 

( select publication_id from 

[distribution].[dbo].MSpublications where publication='XX' 

) a 

inner join 

(select * from dbo.sysarticlecolumns) b 

on a.article_id=b.artid order by a.article 

29.2、訂閱數(shù)據(jù)庫(kù)上執(zhí)行 

select distinct article  from MSreplication_objects where publication='XX'

30、某個(gè)發(fā)布XX丟失了,但是請(qǐng)求訂閱還在的處理方法

訂閱端執(zhí)行如下,找到發(fā)布的數(shù)據(jù)庫(kù)對(duì)象,再在發(fā)布端創(chuàng)建發(fā)布,再重建訂閱,方法2可行

select distinct article  from MSreplication_objects where publication='XX'

如下方法不行

把發(fā)布數(shù)據(jù)庫(kù)恢復(fù)到丟失以前看能不能找回發(fā)布信息,發(fā)現(xiàn)發(fā)布數(shù)據(jù)庫(kù)執(zhí)行如下報(bào)錯(cuò)

select * from sysarticlecolumns

Invalid object name 'sysarticlecolumns'.

31、發(fā)布訂閱需要新增一張表時(shí),只需要右鍵發(fā)布名稱(chēng)選擇articles項(xiàng)目在里面勾選需要新增的表即可,再右鍵發(fā)布名稱(chēng)--view snapshot agent status--start即可,在發(fā)布端的日志讀取job(右鍵發(fā)布名稱(chēng)--view log reader agent status)正常運(yùn)行的情況下,訂閱job(右鍵訂閱名稱(chēng)--view sysnchronization status)也正常運(yùn)行的情況,訂閱數(shù)據(jù)庫(kù)上可以馬上看到新增的表

32、SSMS圖形界面,新建發(fā)布到第四步articles項(xiàng)目時(shí)或已經(jīng)存在的發(fā)布右鍵選擇articles項(xiàng)目時(shí),界面很慢一直無(wú)法正常顯示數(shù)據(jù)庫(kù)對(duì)象比如表視圖存儲(chǔ)過(guò)程等,說(shuō)明有堵塞,SSMS點(diǎn)開(kāi)一些界面其實(shí)就是一個(gè)select的動(dòng)作,找到堵塞源殺掉后,就可以正常顯示了

33、實(shí)例--replication--Local Subscriptions--訂閱名稱(chēng)--右鍵--View Synchronization Status報(bào)錯(cuò):An error occurred connecting to server 'XX'.SQL Server repliaction requires the actual server name to nake a connection to the server.
原因:可能修改了計(jì)算機(jī)名,SSMS連接的是新的計(jì)算機(jī)名,但是數(shù)據(jù)庫(kù)沒(méi)有修改Servername,導(dǎo)致這個(gè)報(bào)錯(cuò),SSMS連接使用老的計(jì)算機(jī)名或修改數(shù)據(jù)庫(kù)修改Servername為新的計(jì)算機(jī)名即可

34、A服務(wù)器ADB1庫(kù)的數(shù)據(jù)做了replication到B服務(wù)器的ADB1數(shù)據(jù)庫(kù),A服務(wù)器和A1服務(wù)器搭建了AG,并把ADB1加入了AG,但是A1上的AG對(duì)應(yīng)的數(shù)據(jù)庫(kù)ADB1不正常,右鍵A服務(wù)器ADB1對(duì)應(yīng)的發(fā)布名稱(chēng)--View Log Reader Agent Status發(fā)現(xiàn)ADB1的發(fā)布報(bào)錯(cuò):Replicated transaction are waiting for next log backup or for mirror partner to catch up(復(fù)制的事務(wù)正等待下一次日志備份或等待鏡像伙伴更新)
解決方法
    方法1、確保A1的AG中ADB1正常(首選方法)
    方法2、在A服務(wù)器上把該數(shù)據(jù)庫(kù)ADB1從AG中移除
    方法3、在A服務(wù)器上執(zhí)行
DBCC TRACEON (1448, -1)     --不希望replication受到alwayson 其他node的影響
原因:
    我們知道always on的輔助副本secondary是獲取了primary的日志信息而進(jìn)行的redo動(dòng)作實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的同步工作。當(dāng)secondary異常宕機(jī)后,為了保證secondary起來(lái)時(shí)能夠繼續(xù)上次讀取日志的地方做redo動(dòng)作,db的transaction log就不會(huì)進(jìn)行備份,而一直增大,最壞的情況導(dǎo)致磁盤(pán)爆滿,無(wú)法使用。如當(dāng)前01為primary,02為secondary,為了避免failover后,02切換為主副本,而此節(jié)點(diǎn)卻沒(méi)有獲取到和01一樣新的replication信息,導(dǎo)致異常。所以所有的always on node都要知道同步的情況,否則不繼續(xù)進(jìn)行同步。即所有node都獲取replication信息后,才允許replication繼續(xù)進(jìn)行

35、SSMS對(duì)DB1創(chuàng)建發(fā)布時(shí)報(bào)錯(cuò):this database is not enabled for publication不允許此數(shù)據(jù)庫(kù)用于發(fā)布。 (Microsoft SQL Server,錯(cuò)誤: 14013)

       手工執(zhí)行對(duì)DB1創(chuàng)建發(fā)布
USE master
EXEC sp_replicationdboption @dbname = 'DB1',@optname = 'publish',@value = 'true'
GO
報(bào)錯(cuò)
鏈接服務(wù)器"repl_distributor"的 OLE DB 訪問(wèn)接口 "SQLNCLI" 返回了消息 "Login timeout expired"。
鏈接服務(wù)器"repl_distributor"的 OLE DB 訪問(wèn)接口 "SQLNCLI" 返回了消息 "An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections."。
    該實(shí)例是Enterprise企業(yè)版,不是Express開(kāi)發(fā)版,可以創(chuàng)建發(fā)布,所以不是版本問(wèn)題

     原因: 發(fā)現(xiàn)存在一個(gè)名為repl_distributor的linked server,且無(wú)法刪除該linked server,查詢(xún)?cè)搇inked server發(fā)現(xiàn)它已經(jīng)用于發(fā)布,即master.sys.servers.is_distributor=1

     解決方法:USE master;  
                       EXEC sp_serveroption 'repl_distributor', 'dist', 'false'; 

36、錯(cuò)誤號(hào):18483
could not connect to server "XX" because 'distributor_admin' is not defined as a remote login at the server
未能連接到'XX'服務(wù)器,因?yàn)閐istributor_admin未在該服務(wù)器上定義為遠(yuǎn)程登錄
Could not connect to server 'XX' because 'YY' is not defined as a remote server.
未能連接到'XX'服務(wù)器,因?yàn)?#39;YY'沒(méi)有定義為遠(yuǎn)程服務(wù)器
原因:hostname和servername不一致導(dǎo)致,hostname是XX,但是servername是YY,這時(shí)候不能通過(guò)圖形界面來(lái)完成創(chuàng)建分發(fā)服務(wù)器的操作
解決方法:使用圖形界面向?qū)В詈筮x擇不配置分發(fā),而是生成腳本,使用腳本的代碼,修改腳本中代碼,把XX修改為YY即可

37、replication到不同的schema,比如A庫(kù)的dbo.table1可以復(fù)制到B庫(kù)的repl.table1,不過(guò)無(wú)法使用圖形界面來(lái)操作,需要使用腳本來(lái)操作,當(dāng)然也可以使用圖形界面來(lái)操作但是最后不點(diǎn)確定,而是從圖形界面導(dǎo)出腳本,再修改腳本中的schema信息,如下案例把dbo這個(gè)schema的表base復(fù)制到repl這個(gè)schema下:

use [PatternRecDB]
exec sp_addarticle @publication = N'PatternRecDB_Base', @article = N'Base', @source_owner = N'dbo', @source_object = N'Base', @type = N'logbased', @description = N'', @creation_script = N'', @pre_creation_cmd = N'truncate', @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'manual', @destination_table = N'Base', @destination_owner = N'repl', @status = 24, @vertical_partition = N'false', @ins_cmd = N'CALL [sp_MSins_dboBase]', @del_cmd = N'CALL [sp_MSdel_dboBase]', @upd_cmd = N'SCALL [sp_MSupd_dboBase]'
GO

38、修改數(shù)據(jù)庫(kù)名報(bào)錯(cuò)can not rename the database name because it is published or it is a distribution database,解決方法:sp_removedbreplication @dbname=XXX
39、修改servername報(bào)錯(cuò)There are still remote logins or linked logins for the server 'DBMASTER'
解決思路
39.1、查看哪些用戶遠(yuǎn)程連接了DBMASTER服務(wù)器
sp_helpremotelogin 'DBMASTER'
server    local_user_name    remote_user_name    options
DBMASTER    distributor_admin    distributor_admin
39.2、刪除遠(yuǎn)程連接,繼續(xù)出現(xiàn)的錯(cuò)誤表示該服務(wù)器是訂閱復(fù)制的發(fā)布服務(wù)器
exec sp_dropserver 'DBMASTER', @droplogins = 'droplogins'
繼續(xù)報(bào)錯(cuò)Cannot drop server 'DBMASTER' because it is used as a Publisher in replication.
39.3、刪除訂閱復(fù)制的發(fā)布信息
sp_dropdistpublisher @publisher ='DBMASTER'
繼續(xù)報(bào)錯(cuò)Cannot drop the local distribution Publisher because there are Subscribers defined.
39.4、刪除訂閱信息
sp_dropdistributor
繼續(xù)報(bào)錯(cuò)Could not drop the Distributor 'DBMASTER'. This Distributor has associated distribution databases.
39.5、最后刪除訂閱信息再重新把DBMASTER修改為DBMASTERNEW,成功
EXEC sp_dropdistributor @no_checks = 1, @ignore_distributor = 1
exec sp_dropserver 'DBMASTER', @droplogins = 'droplogins'
sp_addserver 'DBMASTERNEW','local'

建立分發(fā)

復(fù)制-右鍵-配置分發(fā)

1、選擇分發(fā)服務(wù)器

2、選擇snapshot目錄

3、創(chuàng)建分發(fā)數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)名稱(chēng)默認(rèn)為distribution、數(shù)據(jù)庫(kù)文件目錄、數(shù)據(jù)庫(kù)日志名稱(chēng))

4、選擇哪些發(fā)布服務(wù)器可以使用這個(gè)分發(fā)服務(wù)器,enable servers to use this distributor when they become publishers,其中distribution database沒(méi)得選,就是分發(fā)的數(shù)據(jù)庫(kù),默認(rèn)是distribution

--如果上面第四步勾選了publisher和distribution database,右鍵Replicattion有Publisher Properties、Distributor Properties、Disabled Publishing and Distribution Wizard。如果不勾選,右鍵Replicattion則沒(méi)有Publisher Properties,有Distributor Properties、Disabled Publishing and Distribution Wizard

分發(fā)建立好后,有如下job

1、Agent history clean up: distribution

2、Distribution clean up: distribution

3、Expired subscription clean up

4、Monitor and sync replication agent jobs

5、Reinitialize subscriptions having data validation failures

6、Replication agents checkup

7、Replication monitoring refresher for distribution.

建立發(fā)布

復(fù)制-本地發(fā)布-右鍵-新建發(fā)布

建立發(fā)布1:還沒(méi)有分發(fā)時(shí),建立發(fā)布的同時(shí)建立分發(fā)(雖然沒(méi)有了上面"建立分發(fā)"的第3、4步,但是也默認(rèn)創(chuàng)建了數(shù)據(jù)庫(kù)distribution)

右鍵local publications(本地發(fā)布)--選擇new publication(新的發(fā)布)

1、選擇分發(fā)服務(wù)器

2、選擇snapshot目錄

3、選擇要發(fā)布的數(shù)據(jù)庫(kù)

4、選擇發(fā)布類(lèi)型

5、選擇要發(fā)布的對(duì)象,比如表、視圖、存儲(chǔ)過(guò)程

6、選擇snapshot代理,snapshot是立即創(chuàng)建還是定期創(chuàng)建,snapshot代理的安全性是使用用戶名密碼還是使用sqlserver agent服務(wù),snapshot代理怎么連接發(fā)布服務(wù)器,是OS域帳戶還是DB帳戶

7、創(chuàng)建發(fā)布名稱(chēng)

發(fā)布建立好后,有如下job

1、Agent history clean up: distribution

2、Distribution clean up: distribution

3、Expired subscription clean up

4、Monitor and sync replication agent jobs

5、Reinitialize subscriptions having data validation failures

6、Replication agents checkup

7、Replication monitoring refresher for distribution.

8、WONCNTESTDB1-replicate1-1

9、WONCNTESTDB1-replicate1-pub_replicate1-1

建立發(fā)布2:已經(jīng)建立了分發(fā)時(shí),只建立發(fā)布

1、選擇要發(fā)布的數(shù)據(jù)庫(kù)

2、選擇發(fā)布類(lèi)型

3、選擇要發(fā)布的對(duì)象,比如表、視圖、存儲(chǔ)過(guò)程

4、選擇snapshot代理,snapshot是立即創(chuàng)建還是定期創(chuàng)建,snapshot代理的安全性是使用用戶名密碼還是使用sqlserver agent服務(wù),snapshot代理怎么連接發(fā)布服務(wù)器,是OS域帳戶還是DB帳戶

5、創(chuàng)建發(fā)布名稱(chēng)

發(fā)布建立好后,有如下job

1、WONCNTESTDB1-replicate1-1

2、WONCNTESTDB1-replicate1-pub_replicate1-1

建立訂閱

1、選擇發(fā)布服務(wù)器,選擇發(fā)布

2、選擇推送訂閱還是請(qǐng)求訂閱

3、選擇訂閱服務(wù)器,選擇訂閱數(shù)據(jù)庫(kù)

4、選擇訂閱代理服務(wù)器,分發(fā)代理使用怎么連接,是OS域帳戶還是DB帳戶,分發(fā)服務(wù)器使用怎么連接,是OS域帳戶還是DB帳戶,訂閱服務(wù)器使用怎么連接,是OS域帳戶還是DB帳戶

5、訂閱同步是持續(xù)性還是按需求

6、是否馬上初始化訂閱對(duì)象

訂閱建立好后,有如下job,此job名稱(chēng)的前半段和訂閱名稱(chēng)一樣即WONCNTESTDB1-replicate1-pub_replicate1

WONCNTESTDB1-replicate1-pub_replicate1-WONCNTESTDB2-replicate_01-CD7A365E-2DE7-47A3-B31E-70F785FA71F2

到此,相信大家對(duì)“sqlserver關(guān)于發(fā)布訂閱replication_subscription的知識(shí)點(diǎn)有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI