2022年3月8日 星期二

如何透過Merge Replication 複寫機制,同步 EC2 與 AWS RDS for SQL Server 的資料庫

近日接到客戶需求,想要進行地端的DB與 AWS RDS for SQL Server 進行複寫,而AWS 的官方目前有交易式複寫(Transaction Replication)的文件,但針對合併式複寫(Merge Replication)卻沒有,我在實際進行架設後,看似沒有問題的背後,其實包含了許多不同的問題,所以我特別的整理此篇文件,希望可以幫助到大家。

建立方式:
1. 請先建立RDS for SQL Server,並請在同一個網段中建立一台EC2,你可以透過 Windows with SQL Server 的 AMI 進行建立,建立完成後,確認EC2可以透過 SSMS 連接到 RDS。

2. 請透過 RDS DB instance endpoint 連線到 RDS 後,先確認 RDS 的主機名稱。

a. 請輸入下列的指令。

Select @@servername;


b. 使用nslookup 的指令反查 RDS DB instance endpoint 對應的 IP為何。
 

c. 請將輸出結果加一筆記錄到您的DNS Server中,或是在EC2中的 hosts 記錄中,加入一筆記錄,也是可以的。


PS: hosts 的檔案路徑: C:\Windows\System32\drivers\etc\hosts 

3. 請確認在EC2上,可以透過電腦名稱連線到 RDS 端。
4. 請先在來源端,也是 EC2 上,建立複寫。
 

選擇需要進行複寫的資料庫

選擇合併式複寫 (Merge Replication)


選擇需要同步的表格(Table)有那些

此步驟主要是說明由於合併式複寫(Merge Replication) 會在有同步的表格最後加入一個識別欄位,所以此種複寫方式會變動到表格的結構,這點在請注意。

可以在此步驟中可以加入需要過濾的條件,但此步驟我們就先不加入。



在此處主要是設定來源端 EC2 上如何進行權限的設定,你可以透過 Windows 的帳號或是 SQL Server 的帳號都可以,但需要在 SQL Server 中有相關的權限。



建立完成後,即可看到已建立好一個發行集。

5. 設定完成複寫的發行集後,請在來源端的目錄路徑,設定此目錄可以允許讀寫。

路徑:C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ReplData\
路徑的部份,其中15的部份可能會因為版本的不同而有不同,所以在請注意一下。

6. 請給予使用者 「everyone」 相關的權限。

此部份的權限設定很重要,如果沒有設定的話,你在最後的同步時,會發生下列的錯誤訊息。

Error messages:
The schema script 'testtable_2.sch' could not be propagated to the subscriber. (Source: MSSQL_REPL, Error number: MSSQL_REPL-2147201001)
Get help: http://help/MSSQL_REPL-2147201001
The process could not read file 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ReplData\unc\EC2AMAZ-F9DPPG4_SQLTESTDB_REP-MERGE\20220305040629\testtable_2.sch' due to OS error 5. (Source: MSSQL_REPL, Error number: MSSQL_REPL0)
Get help: http://help/MSSQL_REPL0
Access is denied.
 (Source: MSSQL_REPL, Error number: MSSQL_REPL5)
Get help: http://help/MSSQL_REPL5

7. 請在設定完成後,先將來源端的資料庫進行備份,並將檔案還原到RDS上。

7-1 另外由於 RDS 在還原資料庫的部份會有點不同,所以可以參考下列的文件。

How do I perform native backups of an Amazon RDS DB instance that's running SQL Server?

8. 接下來請接著設定訂閱集,此時同樣在來源端EC2上進行設定即可。



下列選擇的部份,二者的差異在於RDS只能進行訂閱,發行與轉發者都是不可以的,所以請選擇第一點。

請點選 [Add SQL Server Subscriber] 將 RDS 的節點加入,此時請要透過在前面設定的節點名稱加入,如果透過 RDS endpoint 加入時,會有錯誤發生。


請設定連線到 RDS 中的帳號與密碼。



這個部份,由於我們的訂閱端主要是負責接收資料,並沒有要進行寫入的動作,所以請設定為 Client。





9. 建立完成後,你可以透過 Replication Monitor 持續確認同步的情況,當然如有同步有錯誤的話,可以透過此工具確認得到同步的錯誤為何。





1 則留言:

  1. Caryhsu - 學無止盡: 如何透過merge Replication 複寫機制,同步 Ec2 與 Aws Rds For Sql Server 的資料庫 >>>>> Download Now

    >>>>> Download Full

    Caryhsu - 學無止盡: 如何透過merge Replication 複寫機制,同步 Ec2 與 Aws Rds For Sql Server 的資料庫 >>>>> Download LINK

    >>>>> Download Now

    Caryhsu - 學無止盡: 如何透過merge Replication 複寫機制,同步 Ec2 與 Aws Rds For Sql Server 的資料庫 >>>>> Download Full

    >>>>> Download LINK

    回覆刪除