問題描述
主機1:發佈端
阿里雲服務器--有公網ip
主機2:訂閱端
筆記本--無公網ip
數據量很小,主要是熟悉發佈訂閱的操作流程。
主機2僅僅作為主機1的本地備份,要求修改雲服務器上數據後,能通過sql server的發佈訂閱功能將本地數據同步。
底下沒有一步一步介紹,一步一步的,可以看下面這篇
問題1
阿里雲的sql server配置好後,無法使用本地sql server客戶端遠程登錄。
檢查以下幾點
1.要在阿里雲的控制檯中的防火牆,打開阿里雲的1433端口(默認的sql server訪問端口)
這點很重要,好多教程裡沒有提到!!!
2.要把兩臺主機的sql manager中的sql server服務中的sql server代理打開(原本是禁用狀態)
3.遠端服務器要開啟sql server用戶名密碼登錄方式,並且設置好代理賬號和密碼
到這一步,應該可以在筆記本的sql server通過ip地址,和剛剛設置的代理賬戶和密碼登錄進雲服務器了。
--------------------------------------------------------------------------------------
問題2
發佈和訂閱流程
要首先在雲端sql server客戶端的
複製---發佈---新建發佈
1.選擇哪種發佈方式
這點可以自己查詢四種發佈的區別
要注意:事務發佈時,被髮布的表要有主鍵
2.如何連接發佈端
網上一般推薦是在雲端和本地端都新建一個用戶名,密碼一樣的windows賬戶,然後這裡選擇在windows賬戶下運行。
我這裡使用sql server登錄名
這裡注意---登錄名是sql server的登錄名(就是一般是sa的那個)
-------------------------
以上是發佈端
-------------------------
訂閱端
1.使用別名
在這一步選擇發佈服務器時,要使用實際的服務器名稱(使用windows方式登錄時的名稱),不能使用ip地址。
這裡要在訂閱服務器中添加發布服務器的別名,具體操作看下面
https://blog.csdn.net/u010457730/article/details/97276313
2.推送訂閱還是請求訂閱
這裡我有個不懂的問題,之後會講到。
3.連接到分發服務器
這裡注意,要填寫分發服務器的sql server登錄名。
是登錄名,sa那個
登錄名不是服務器名,這點切記。
到這一步時,查看一下訂閱服務器的同步狀態
看看是否打鉤了----這代表前面的設置正確,訂閱服務器能訪問到發佈端。
本人一開始因為設置時填寫錯了用戶名,在查看同步狀態這裡還是報錯的。
--------------------------------------------------------------------------------
接下來,可以看看訂閱服務器的數據是不是被同步了,如未同步,看看訂閱端的作業歷史記錄
有可能還是報錯
但是這個報錯信息是什麼玩意嘛???
“複製代理遇到問題。有關詳細信息,請參閱上一個作業步驟歷史記錄消息或複製監視器”
原來要在發佈端找具體錯誤信息。。。
啟動發佈端的複製監視器
在左側選好具體的發佈後,雙擊右側中所有訂閱中的錯誤的訂閱,查看具體報錯
真相大白--
由於出現操作系統錯誤 3,進程無法讀取文件D:\\XXXX\\X.pre
原因原來是--這個路徑是發佈端存放快照文件的位置,但是由於不是網絡文件夾,不能被訪問。
這裡提供一種簡單的解決辦法
參照這位的做法
https://www.cnblogs.com/mrray/archive/2011/03/17/1987123.html
直接把發佈端的快照文件夾--名稱為repldata的拷貝到訂閱端的某個文件位置
再在訂閱端修改快照位置
複製--本地訂閱---具體的訂閱---右鍵---屬性
把快照文件夾位置修改為本地的那個位置。
很神奇的是,只需要修改一次就好。
到這一步,我的問題就解決了,以下是幾點問題和思考
1.坑很多,但多查詢相關資料,總是能夠解決的。這個信心是一次次解決問題中鍛煉出來的。
2.自身理論基礎欠缺時,一些配置性操作就容易出問題。比如說不了解發布訂閱的具體機制,就很難想到出現快照文件夾無法訪問這個問題。
3.我的情景比較特殊,一臺有公網ip,一臺沒有。我在網上看到的情況,一般要麼是局域網,要麼兩臺主機都是有公網ip的(這意味著發佈端,訂閱端都能用唯一的ip地址訪問對方)。所以我一直懷疑我這種網絡結構從原理上就不能使用發佈訂閱這種方式(因為發佈端無法“找到”訂閱端)。這也是我在配置中選擇了從訂閱端運行代理,因為訂閱端是肯定能“找到”有公網ip的發佈端的。這個問題還要細研究。
4.這四種發佈-訂閱的方式有什麼區別?快照文件夾是什麼原理?這是兩個需要搞清楚的問題。
5.sql server這個這麼常見的功能為什麼如此多的坑。。。可能還是我太菜了。但起碼這個問題是解決了,我又成長了一點點。
閱讀更多 JAVA柯尼塞克丶 的文章