自動化資料庫工作以提升可擴縮性
從 SQL Server 使用自動化作業時,通常會使用 SQL Agent 來排程作業以達成自動化目的。 雖然 Azure SQL 受控執行個體和 SQL Server 在 Azure 虛擬機器上執行仍然有該選項,但 Azure SQL 資料庫沒有,因此您可能需要使用替代的自動化方法來達成類似的結果。
Azure 自動化
Azure 自動化可讓您自動化程序、管理設定、與 Azure 平台選項完整整合 (例如角色型存取控制和 Microsoft Entra ID),以及管理 Azure 和內部部署資源。
透過 Azure 自動化,您可以輕鬆地控制 Azure 和內部部署 VM 中的資源。 例如,您可以使用混合式 Runbook 來自動化工作,例如啟動 VM、執行 SQL Server 備份,以及關閉 VM,使之符合成本效益且有效率。
另一個常見案例是針對定期維護作業使用 Azure 自動化,例如清除過時資料或舊資料,或是重新編制SQL資料庫的索引。
元件
Azure 自動化 支援自動化和設定管理活動。 我們將著重於自動化元件,但您也可以使用 Azure 自動化來管理伺服器更新和設定。
元件 | 描述 |
---|---|
Runbook | Runbook 是 Azure 自動化的執行單位。 Runbook 被定義為下列三種類型其中之一: 以 PowerShell 為基礎的圖形化 runbook、PowerShell 指令碼或 Python 指令碼。 PowerShell runbook 最常用於管理 Azure SQL 資源。 |
模組 | Azure 自動化會針對您在 Runbook 中執行的 PowerShell 或 Python 程式碼定義執行內容。 您必須匯入支援的模組,才能執行程式碼。 例如,如果您需要執行 Get-AzSqlDatabase PowerShell Cmdlet,您就必須將 Az.SQL PowerShell 模組匯入到您的自動化帳戶。 |
認證 | 認證會儲存 Runbook 或設定可在執行階段使用的敏感性資訊。 |
[排程] | 排程會連結至 runbook,並在特定時間觸發 runbook。 |
若要深入瞭解可用來管理 Azure SQL 資料庫和 Azure SQL 受控執行個體資源的 Azure CLI 和 PowerShell 命令,請參閱下列連結: 適用于 Azure SQL 的 PowerShell 模組 和 適用于 Azure SQL 的 Azure CLI。
彈性工作
許多 DBA 對 Azure 自動化如此熟悉的原因之一,就是 Azure SQL Database 最初並沒有排程作業的功能。
這項限制表示 DBA 必須尋找替代解決方案,才能有效率地處理這些基本工作。 Azure 自動化在此案例中成了寶貴的工具,提供建立和管理排程工作、自動化資料庫移轉程序,以及執行例行維護工作的方法。
架構
彈性作業 功能可讓您將針對一組伺服器或資料庫集合的一組 T-SQL 指令碼執行為一次性工作,或使用已定義的排程。 彈性作業的運作方式類似 SQL Server Agent 作業,不同之處在其僅限於執行 T-SQL。 這些作業會在 Azure SQL Database 的所有層中運作。
若要設定彈性作業,您需要有管理作業的專用作業代理程式和資料庫。 作業資料庫的建議服務層級為 S1 或更高版本,最佳服務層級則取決於您正在執行的作業數目以及這些作業的頻率。
現在來檢閱彈性作業元件:
- 彈性作業代理程式 - 用來執行和管理作業的 Azure 資源。
- 作業資料庫 - 專用於管理作業的資料庫。
- 目標群組 - 將執行作業的伺服器、彈性集區和單一資料庫的集合。
- 作業 - 撰寫作業步驟的一或多個 T-SQL 指令碼。
如果伺服器或彈性集區是目標,則應該在此伺服器或集區之 master 資料庫內建立認證,以便作業代理程式可列舉其中的資料庫。 若為單一資料庫,則資料庫認證即已足夠。 認證應該具有執行作業步驟所需的最低權限。
您可以透過 Azure 入口網站建立彈性作業代理程式。 在 [彈性作業代理程式] 頁面上,確實提供代理程式的名稱,並為作業資料庫指定 SQL 資料庫。
下列 PowerShell 指令碼會建立名為 MyFirstElasticJob 的彈性作業,並在資料庫中不存在時執行 SQL 命令來建立資料表。
Write-Output "Creating a new job..."
$jobName = "MyFirstElasticJob"
$job = $jobAgent | New-AzSqlElasticJob -Name $jobName -RunOnce
Write-Output "Creating job steps for $($jobName) job..."
$sqlText1 = "IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id('MyTable')) CREATE TABLE [dbo].[MyTable]([Id] [int] NOT NULL);"
$job | Add-AzSqlElasticJobStep -Name "Step1" -TargetGroupName $serverGroup.TargetGroupName -CredentialName $jobCred.CredentialName -CommandText $sqlText1
最後,執行 MyFirstElasticJob 彈性作業。
Write-Output "Start the job..."
$jobExecution = $job | Start-AzSqlElasticJob
$jobExecution
使用案例
彈性作業可用於下列案例:
- 自動化管理工作以根據特定排程執行。
- 部署結構描述變更。
- 資料移動。
- 收集及彙總資料以用於報告或其他用途。
- 從 Azure Blob 儲存體載入資料。
- 將作業設定為以週期性基礎跨資料庫的集合執行,例如在離峰時段。
- 對大量資料庫進行資料處理,例如遙測資料收集。 接著結果會編譯到單一目的地資料表中,做進一步的分析。
將 SQL Agent 作業移轉至 [彈性作業]
雖然您可以建立自己的指令碼,將 SQL Agent 作業移轉至 [彈性作業],但有更方便的選項可供使用。 有可下載的指令碼可協助 將現有的 SQL Agent 作業複製到 [彈性作業]。
指令碼是一種工具,可將轉換這些作業的程序自動化,讓您省下在新的環境中手動重新建立作業所需的時間和精力。
檔案是壓縮的資料夾,其中包含指令碼和相關聯的文件。 若要使用它,您得下載檔案,並遵循指示。
輸入指示中列出的所有參數之後,作業清單會隨即出現。 指令碼接著會以停用狀態個別建立每個作業,假設其不存在。 建立作業之後,步驟會以相同的 [識別碼]、[命令文字]、[重試嘗試] 和 [初始重試間隔秒數] 來新增。 連結至作業步驟的資料庫將會是目標群組。 如果目標群組不存在,系統會自動建立。 此複本不包含排程、警示和通知。
將 SQL Agent 作業移轉至 Azure 上的 SQL Agent
將作業從內部部署 SQL Server 移轉至虛擬機器上執行的 Azure SQL 受控執行個體或 SQL Server 所遵循的程序,對大多數 DBA 來說應該很熟悉。
在我們的案例中,假設我們已將內部部署 SQL Server 移轉至 Azure SQL 受控執行個體。 我們需要移轉和調整數個 SQL Agent 作業,使其在 Azure 環境中順暢運作。
評估相依性: 識別您想要移轉的 SQL Agent 作業。 列出作業所依賴的任何相依性,例如連結的伺服器、認證和資料庫
編寫 SQL Agent 作業的指令碼: 將 SQL Server 上的 SQL Agent 作業編寫為 SQL 指令碼。 您可以用滑鼠右鍵按一下 SQL Server Management Studio (SSMS) 中的作業,然後選取 [指令碼作業為] -> [建立至] - > [新增查詢編輯器視窗]。
修改作業相依性: 檢閱 SQL 指令碼,並修改因移轉而可能變更的任何作業相依性。 例如,如果作業參考了連結的伺服器或本機伺服器上的檔案路徑,請更新它以符合新的環境。
Azure SQL MI 作業建立: 開啟 SSMS 或 Azure Data Studio 並連結至您的Azure SQL 受控執行個體。 使用您先前產生的指令碼建立新的 SQL Agent 作業。
建立Azure SQL MI 的相依性: 如果您的 SQL Agent 作業依賴連結的伺服器或認證,請在 Azure SQL MI 環境中建立它們。 請確定它們符合來自內部部署 SQL Server 的設定。
排程工作:使用 SQL Server Agent 在 MI 中設定 Azure SQL 作業排程。 您可以建立新的排程,並將之連結至作業。
測試: 在 Azure SQL MI 環境中徹底測試 SQL Agent 作業,以確保其如預期般執行。 檢查內部部署 SQL Server 與 Azure SQL MI 之間因差異而可能發生的任何錯誤或問題。
監視和維護: 監視作業的效能,並確保它持續符合您在 Azure SQL MI 環境中的需求。 視需要調整任何設定或排程。