sqlserver2014 發布與訂閱


環境:windowsserver2012+ sqlserver2014

發布機       192.168.1.43    KC-DB01      

訂閱機       192.168.1.218    DB-Sync

 

SqlServer發布訂閱

基礎知識

經驗建議:

1.在裝系統后先把機器主機名、用戶名修改好(裝完數據庫后修改會嚴重影響發布訂閱),然后再安裝數據庫;ps:血與淚的教訓!

2.多個需要設置發布訂閱的的數據庫的sa用戶名密碼設置相同;(后來推送訂閱測試不需要)

 

一、准備工作

1.確保發布機、訂閱機器 Sql Server 代理 已經在運行並設置為自啟動;

 

2.保證 SqlServer的主機名和物理機的主機名相同;若不同請看后面問題記錄

3.確保發布機、訂閱機1433端口能相互連接(互通);

4.添加域名解析,一般配置文件在C:\Windows\System32\drivers\etc 在最后面添加解析,兩台機器都需要添加同樣的解析

192.168.1.43    KC-DB01

192.168.1.218    DB-Sync

最后通過ping KC-DB01測試是否能正常解析到前面的43IP;

 

二、創建發布

建立測試表

CREATE TABLE TB_1(Id int primary key,Name char(200),InsertTime datetime default getdate())

insert into TB_1 select isnull(max(id),0)+1,'a'+ltrim(isnull(max(id),0)+1),getdate() from TB_1

select * from TB_1

發布數據庫表增加sa權限

USE [KCMirrorDB]

GO

sp_changedbowner 'sa'

 

1、發布

 

選擇發布類型,自行選擇,區別下面有介紹,我們這里選擇“事物發布”

 

 

選擇要發布的項目

 

 

可以勾選一些表,也可以發布存儲過程視圖等,但是下面的這些不能發布,原因也有說明

右鍵表格屬性

其他選項默認

 

如果需要訂閱過去的表有索引和默認值:復制非聚集索引、復制默認值規范、復制默認值綁定同一改為True,如果沒有更改為True這樣訂閱服務器同步不了這些索引和默認值。

 

根據情況,勾選自己要發布的部分表后執行下一步,進入篩選表行選項,可以篩選以上選擇的表中不想同步的一些列,這里我們不篩選,直接下一步

 取消立即創建快照並使用快照對訂閱進行初始化

 

 

這里先進入“快照代理-安全設置”按如下設置賬號密碼,然后同樣的設置日志讀取器代理

 

最后更改快照的存儲位置

右鍵剛創建的發布-屬性

 

 

自此sqlserver的發布完成

 

驗證發布正確性

發布完成后,查看發布是否成功、是否有錯誤;先確保發布成功,便於后面有問題時分析;

正在生成快照,說明發布沒有問題,等待快照生成完成;

 

 

2、訂閱

訂閱的形式可以選擇推送訂閱或者請求訂閱,請求訂閱降低分發服務器處理工作的開銷。只有在有很多訂閱服務器的時候才比較明顯,推送訂閱與請求訂閱更大的區別是在管理方面的不同;

這里推薦使用“推送訂閱”

2.1、請求訂閱

注意:請求訂閱,需要訂閱服務器有訪問發布服務器快照目錄的權限;

遠程登錄192.168.1.91機器

創建一個數據庫,用於訂閱同步到這個庫里;

 

 

 

 

 選擇同步類型,(經過測試兩次使用請求訂閱都不成功,問題多多)

 

選擇同步到本地的數據庫(這個庫可以是個空庫,但若不是同庫,里面不能有和要同步的表相同的表)

然后沒啥重要步驟 下一步默認“連續運行” 下一步默認初始化時間“立即” 下一步 點擊完成

右鍵訂閱---查看同步狀態:

2.2、推送訂閱

推送訂閱與請求訂閱 下面的選項是不同的,注意

驗證訂閱是否成功

到發布機上查看發布訂閱狀態

 

然后再到訂閱機器上就可以看到剛才創建的訂閱了

在訂閱服務器上查看同步狀態

 

問題記錄

同步部分表時,如果同步視圖可能會導致同步失敗,因為視圖中可能有沒有同步的表,導致整體同步失敗;所以要注意同步視圖;

數據庫與主機名不一致

 

第一種情況下:

在SQL SERVER里面執行下面語句:

use master

go

select @@servername    --查看數據庫里存的主機名

select serverproperty('servername')

使用上面的語句查詢服務器的名稱和實際計算機的名稱,如果兩者不一致,就需要修改。

不一致就執行下面的語句:

sp_dropserver 'WIN-43G4DVCEI6E'

go

sp_addserver 'WIN-F5','local'

修改完后,重啟SQL SERVER服務。

 

數據庫分離報錯“該數據庫正用於復制,不能刪除或不能分離”

解決辦法:到該數據庫下執行:sp_removedbreplication 'LiaoDB'

LiaoDB為該數據庫名;

 

 

發布報錯

錯誤消息

  • 進程無法在“WIN-19G6EV4O1JP”上執行“sp_replcmds”。 (源: MSSQL_REPL,錯誤號: MSSQL_REPL20011)
    獲取幫助: http://help/MSSQL_REPL20011
  • 無法作為數據庫主體執行,因為主體 "dbo" 不存在、無法模擬這種類型的主體,或您沒有所需的權限。 (源: MSSQLServer,錯誤號: 15517)
    獲取幫助: http://help/15517

進程無法在“WIN-19G6EV4O1JP”上執行“sp_replcmds”。 (源: MSSQL_REPL,錯誤號: MSSQL_REPL22037)
獲取幫助: http://help/MSSQL_REPL22037

 

 

解決辦法

https://www.cnblogs.com/gaizai/p/3305879.html

 錯誤號:15517

進程無法在“WIN-XXX”上執行“sp_replcmds” 無法作為數據庫主體執行,因為主體 "dbo" 不存在、無法模擬這種類型的主體,或您沒有所需的權限。 (源: MSSQLServer,錯誤號: 15517

權限不夠,解決方法

  ALTER AUTHORIZATION ON DATABASE::[數據庫名] TO [sa]  ALTER AUTHORIZATION ON DATABASE::[數據庫名] TO [分發賬戶]  USE 數據庫名  GO  sp_changedbowner '分發賬戶'
ALTER AUTHORIZATION ON DATABASE::[LiaoDB] TO [sa]

ALTER AUTHORIZATION ON DATABASE::[LiaoDB] TO [fabu]

USE LiaoDB

  GO

  sp_changedbowner 'sa'

 比如我的數據庫名稱為 test, 發布賬戶為sa,訂閱賬戶也為sa

ALTER AUTHORIZATION ON DATABASE::[test] TO [sa]

USE test

  GO

  sp_changedbowner 'sa'

 

訂閱報錯

錯誤信息

2017-01-04 10:24:44.394 初始化

由於出現操作系統錯誤 3,進程無法讀取文件“E:\data_sync\unc\KC-DB01_KCMAINDB_FABU_KCMAINDB\20170104162525\GetMemberAccou4ce5f23b_109.pre”。

Category:OS

Source: 

Number:  3

Message: 系統找不到指定的路徑。

 

 

解決辦法

主要原因就是訂閱服務器訪問訂閱目錄快照"D:\***假裝如上報錯路徑***_109.pre"失敗造成的。

解決方式:1

1.將存放快照的目錄設置為共享,並設置讀取的權限;

1)發布服務器設置:

在發布屬性中,點擊左側的快照,在右邊頁面中的快照文件的位置默認為E:\data_sync\把該文件夾設置為共享,並且在安全項里,設置用戶權限(我在系統添加了一個賬戶,並給這個賬戶訪問該文件夾權限)

2)訂閱服務器設置:

在訂閱服務器,右擊訂閱的服務名,選擇屬性,設置屬性參數如下

 a.快照位置修改為備用文件夾

 b.快照文件夾修改為 \\發布服務器的ip\repldata

 

 

然后通過命令輸入該路徑,回車會提示輸入賬戶密碼,輸入發布機創建的賬戶,並選擇記住密碼即可;最后在查看同步狀態中 停止同步,然后重新初始化,最后在同步狀態中啟動同步即可;

該方法參考鏈接:http://www.cnblogs.com/yf2011/p/5001326.html

 

解決辦法2.使用FTP驗證傳輸快照文件,之前步驟都一樣只是認證給訂閱服務器權限為ftp

參考鏈接:(測試過不好用,需要自己搭建ftp服務器)

https://help.aliyun.com/knowledge_detail/40772.html?spm=5176.7842542.2.14.Fqg2xX

 

解決方法3.請求訂閱改成推送訂閱;(該方式不需要訂閱機訪問發布機權限)

 

“此訂閱已存在”,但是在訂閱服務器上卻看不到該訂閱

解決:

到發布服務器的訂閱項目下,給當前訂閱刪除掉,再到訂閱服務器重新創建訂閱

 

 單發布多訂閱

服務器A : testpush庫

服務器B、服務器C 訂閱服務器A 的testpush發布

在B、C上創建好訂閱之后,需要重啟服務器A 的 testpush庫的“日志快照”作業,以便生成新的發布快照

 

 

 

 

參考:

http://www.th7.cn/db/mssql/201802/263764.shtml

https://www.cnblogs.com/TeyGao/p/3521109.html

https://www.cnblogs.com/TeyGao/p/3521109.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM