Sql-Server

近乎實時地將包含的 SQL 數據庫複製給客戶

  • May 27, 2021

我們託管了許多客戶 SQL Server 數據庫,我們需要將這些數據庫近乎實時地複製到外部客戶站點。我們的主要限制是,出於安全原因,我們的數據庫被部分包含以確保客戶 A 無法看到客戶 B 的數據庫。

根據客戶的規模,數據庫的大小從 5GB 到 200GB 不等。任何一天通常最多有 5GB 的更改。

其他限制是我們的 SQL 伺服器受到防火牆和 DMZ 的保護。我們不想將它們直接暴露給客戶。我們在 DMZ 中託管的代理可能是一種解決方法。此外,可用性組、鏡像和日誌傳送具有版本兼容性限制,這會導致緊密耦合,這對於單個客戶來說是不可取的,更不用說跨可能具有多種 SQL 版本的多個客戶。我們正在執行 SQL Server 2019 Enterprise,AFAIK 意味著客戶需要執行 SQL Server 2019 才能實現可用性組、鏡像或日誌傳送兼容性。

到目前為止我考慮過的選項

  • 變更數據擷取 (CDC)。SQL Server 2019 不支持包含數據庫的 CDC。
  • 表複製。SQL Server 2019 不支持包含數據庫的表複製。
  • 觸發器。觸發器是同步的,並且可能會產生不希望的副作用,例如在複製失敗時減慢事務和使事務失敗。
  • 3rd 方軟體 HVR 軟體和 Qlik 複製。這些都依賴於最初啟用 CDC 將“補充日誌記錄”添加到日誌流中。它們實際上並不依賴 CDC 進行複制,但需要 SQL 日誌文件中需要啟用 CDC 的其他元數據。由於包含的數據庫不支持 CDC,因此也排除了這些選項。
  • 按計劃向客戶發送完整數據庫的副本(通過 SFTP 以壓縮的 BACPAC 格式)。然後在客戶站點上恢復數據庫。這個完整的過程在快速的網際網路連接上大約需要 45 分鐘,所以我們目前只安排過夜。它不能滿足近實時的要求。
  • 將每個客戶數據庫複製到 Azure SQL 數據庫並將其打開以供客戶訪問。這是否可行,客戶是否可以訂閱 Azure SQL 的更改以及數據的實時性如何?涉及哪些費用?

有沒有人處理過這種情況,您是如何解決的?複製數據庫還有哪些其他選項?

有趣的問題要解決。我對包含的數據庫不太熟悉,但經過一些快速研究後,我了解它們的一般用途以及您面臨的挑戰。

想到的幾個想法可能是研究日誌傳送數據庫鏡像。與正常發送BACPAC文件相比,您可以使用其中一種方法安排更頻繁的數據同步。

最後,看起來包含數據庫確實支持可用性組,但我不確定這是否會有很大幫助,因為AlwaysOn 可用性組需要在可用性組的伺服器之間設置Windows 故障轉移集群,我是假設不利於您的業務場景。


正如您所提到的,在進行更多的頭腦風暴、研究和重新閱讀您所寫的內容之後,可能有一種方法可以利用像 Azure 這樣的雲提供商。這個DBA.StackExchange 答案提供了一些將數據移動到 Azure 實例的選項。此外,它讓我想起了SSIS,您應該能夠利用它來將DMZ中的實例中的數據同步到外部伺服器(無論是在 Azure 中還是在本地)。

我以前在 Attunity Now 工作,現在是 Qlik 的一個部門,他們的 Replicate 產品可以很好地解決這個問題(有償)。可能在專用伺服器上執行的複制任務將使用客戶特定或“上帝”憑據連接到源數據庫,並寫入客戶特定的目標數據庫。這些任務可以設置為執行全負載和基於日誌的 CDC,以提供近乎實時的複制。目標數據庫不必是 SQL Server。它們可以是 Oracle、Snowflake、mySQL——任何需要的東西。

引用自:https://dba.stackexchange.com/questions/290510