共用方式為


使用 Azure SQL 資料庫的「每租戶一個資料庫」模式管理 SaaS 應用程式中的架構

適用於:Azure SQL 資料庫

隨著資料庫應用程序的發展,不可避免地需要對資料庫架構或引用資料進行更改。 還需要定期執行資料庫維護任務。 管理使用「每租戶一個資料庫」模式的應用程式需要您在一組租戶資料庫中應用這些更改或維護任務。

本教程探討了兩種方案 - 為所有租戶部署引用數據更新,以及在包含引用數據的表上重新構建索引。 彈性作業功能用於對所有租戶資料庫以及用於創建新租戶資料庫的範本資料庫執行這些作。

在本教學課程中,您將瞭解如何:

  • 創建工作代理
  • 使 T-SQL 作業在所有租戶資料庫上運行
  • 更新所有租用戶資料庫中的參考數據
  • 在所有租用戶資料庫中的數據表上建立索引

若要完成本教學課程,請確定符合下列必要條件:

SaaS 架構管理模式簡介

“每個租戶一個資料庫”模式有效地隔離了租戶數據,但增加了需要管理和維護的資料庫數量。 Elastic Jobs 有助於管理多個資料庫。 作業使您能夠安全可靠地針對一組資料庫運行任務(T-SQL 腳本)。 作業可以在應用程式中的所有租戶資料庫中部署架構和常見參考數據更改。 Elastic Jobs 還可用於維護用於創建新租戶的 範本 資料庫,確保它始終具有最新的架構和參考數據。

螢幕

彈性作業

2024年,彈性作業正式上市,並提供新功能。 Azure SQL Database 的整合功能,請參閱 彈性資料庫作業

取得 Wingtip Tickets SaaS 資料庫的每租戶應用程式腳本

應用程式原始程式碼和管理腳本在 WingtipTicketsSaaS-DbPerTenant GitHub 儲存庫中提供。 如需下載和解除封鎖 Wingtip Tickets SaaS 腳本的步驟,請參閱 一般指引

建立作業代理程式資料庫和新的作業代理程式

本教程要求您使用PowerShell創建作業代理及其後備作業代理資料庫。 作業代理資料庫包含作業定義、作業狀態和歷史記錄。 創建工作代理及其資料庫後,您可以立即創建和監控工作。

  1. 在 PowerShell ISE 中,打開 ...\Learning Modules\Schema Management\Demo-SchemaManagement.ps1
  2. F5 執行腳本。

Demo-SchemaManagement.ps1 文稿調用 Deploy-SchemaManagement.ps1 腳本以在目錄伺服器上創建名為 osagent 的資料庫。 然後,它使用資料庫作為參數創建job agent。

建立作業以將新的參考數據部署至所有租使用者

在 Wingtip Tickets 應用程式中,每個租戶資料庫都包含一組受支持的場地類型。 每個場地都有特定的場地類型,該類型定義了可以舉辦的活動類型,並決定了應用程式中使用的背景圖像。 要使應用程式支援新類型的活動,必須更新此參考數據並添加新的場地類型。 在本練習中,您將部署對所有租戶資料庫的更新,以添加兩個額外的場地類型: Motorcycle RacingSwimming Club

首先,檢閱每個租用戶資料庫中所包含的場地類型。 連接到 SQL Server Management Studio (SSMS) 中的一個租戶資料庫,並檢查 VenueTypes 表。 您也可以在 Azure 入口網站的 [查詢編輯器] 中查詢此數據表,從資料庫頁面存取。

  1. 打開 SSMS 並連接到租戶伺服器:tenants1-dpt-<user>.database.windows.net
  2. 若要確認 Motorcycle RacingSwimming Club 當前不包括,請瀏覽至 tenants1-dpt-user<> 伺服器上的 contosoconcerthall 資料庫,然後查詢 VenueTypes 資料表。

現在,讓我們創建一個作業來更新所有租戶資料庫中的 VenueTypes 表,以添加新的地點類型。

要創建新作業,您需要使用在創建作業代理時在作業代理資料庫中創建的一組作業系統存儲過程。

  1. 在 SSMS 中,連接到目錄伺服器:catalog-dpt-<user>.database.windows.net
  2. 在 SSMS 中,打開檔 ...\Learning Modules\Schema Management\DeployReferenceData.sql
  3. 修改語句 SET @wtpUser = <user> 並替換部署 Wingtip Tickets SaaS Database Per Tenant 應用程式時使用的 User 值
  4. 確保您已連接到 jobagent 資料庫,然後按 F5 運行腳本

DeployReferenceData.sql 文稿中觀察以下元素:

  • sp_add_target_group 將創建目標組名稱 DemoServerGroup。
  • sp_add_target_group_member 用於定義目標資料庫的集合。 首先,添加 tenants1-dpt-user<> 伺服器。 將伺服器添加為目標會導致在任務執行時該伺服器中的資料庫包含在任務中。 然後,將 basetenantdb 資料庫和 adhocreporting 資料庫(在後面的教程中使用)添加為目標。
  • sp_add_job 將創建一個名為 Reference Data Deployment 的作業。
  • sp_add_jobstep 將創建包含 T-SQL 命令文本的作業步驟,以更新引用表 VenueTypes。
  • 腳本中的其餘檢視會顯示物件是否存在,並監視作業執行。 使用這些查詢查看 lifecycle 列中的狀態值,以確定作業在所有目標資料庫上的完成時間。

文稿完成後,您可以驗證參考資料是否已更新。 在 SSMS 中,流覽到 tenants1-dpt-user<> 伺服器上的 contosoconcerthall 資料庫,然後查詢 VenueTypes 表。 檢查 Motorcycle RacingSwimming Club 現在是否存在

建立作業以管理參考數據表索引

本練習使用作業任務以重建引用表主鍵上的索引。 這是一個典型的資料庫維護作,可能在載入大量數據後完成。

使用相同的作業系統儲存過程來建立作業。

  1. 將 SSMS 打開,並連接到 catalog-dpt-<user>.database.windows.net 伺服器
  2. 打開檔 ...\Learning Modules\Schema Management\OnlineReindex.sql
  3. 右鍵按下,選擇「連線」,然後連接到 <catalog-dpt->user.database.windows.net 伺服器(如果尚未連接)
  4. 確保您已連接到 jobagent 資料庫,然後按 F5 運行腳本

OnlineReindex.sql 文稿中觀察以下元素:

  • sp_add_job 創建了一個名為“Online Reindex PK__VenueTyp__265E44FD7FD4C885”的新作業
  • sp_add_jobstep 將創建包含 T-SQL 命令文本以更新索引的作業步驟
  • 腳本監視器的其餘檢視項目負責監控作業執行。 使用這些查詢查看 lifecycle 列中的 status 值,以確定作業何時在所有目標組成員上成功完成。

後續步驟

在本教學課程中,您已瞭解如何:

  • 創建工作代理以在多個 T-SQL 作業和資料庫上運行
  • 更新所有租用戶資料庫中的參考數據
  • 在所有租用戶資料庫中的數據表上建立索引

接下來,請嘗試 即席報告教學,以探索在租戶資料庫間執行分散式查詢。

其他資源