Azure VM 上的SQL Server
本文介绍如何使用 SQL IaaS 代理扩展 和 Register-SqlVMsAzure PowerShell cmdlet,通过 Azure 批量地注册 SQL Server 虚拟机(VM)。
或者,可以自动注册所有的 SQL Server VM,或手动注册单个 SQL Server VM。
概述
Register-SqlVMs cmdlet 可用于注册给定订阅、资源组或特定虚拟机列表中的所有虚拟机。 cmdlet 将注册虚拟机,然后生成报告和日志文件。
注册过程没有风险,没有停机,也不会重启SQL Server服务或虚拟机。
默认情况下,Azure SQL SERVER 2016 或更高版本的 VM 在 CEIP 服务检测到时自动向 SQL IaaS 代理扩展注册。 可以使用批量注册来注册 CEIP 服务未检测到的任何SQL Server VM。
有关隐私的信息,请参阅 SQL IaaS 代理扩展隐私声明。
先决条件
若要将SQL Server VM 注册到该扩展,需要以下各项:
- Azure 订阅,已注册了 Microsoft.SqlVirtualMachine 资源提供程序并包含未注册的 SQL Server 虚拟机。
- 确保Azure VM 正在运行。
- 用于注册虚拟机的客户端凭据存在于以下任何Azure角色中:Virtual Machine 参与者、Contributor 或 Owner。
- Az PowerShell 5.0 - 5.0 以上版本目前仅支持 MFA,并且与注册多个 VM 的脚本不兼容。
开始
在继续操作之前,必须先创建脚本的本地副本,将其导入为 PowerShell 模块,然后连接到Azure。
创建脚本
要创建脚本,请复制本文末尾处的完整脚本并将其作为 RegisterSqlVMs.psm1 保存在本地。
导入脚本
创建脚本后,可以将它作为模块导入 PowerShell 终端。
打开管理 PowerShell 终端并导航到保存 RegisterSqlVMs.psm1 文件的位置。 然后,运行以下 PowerShell cmdlet,将脚本作为模块导入:
Import-Module .\RegisterSqlVMs.psm1
连接到Azure
使用以下 PowerShell cmdlet 连接到Azure:
Connect-AzAccount -Environment AzureChinaCloud
订阅列表中的所有虚拟机
使用以下 cmdlet 在订阅列表中注册所有SQL Server虚拟机:
Register-SqlVMs -SubscriptionList SubscriptionId1,SubscriptionId2
示例输出:
Number of subscriptions registration failed for
because you do not have access or credentials are wrong: 1
Total VMs Found: 10
VMs Already registered: 1
Number of VMs registered successfully: 4
Number of VMs failed to register due to error: 1
Number of VMs skipped as VM or the guest agent on VM is not running: 3
Number of VMs skipped as they are not running SQL Server On Windows: 1
Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log
单个订阅中的所有 VM
使用以下 cmdlet 在单个订阅中注册所有SQL Server虚拟机:
Register-SqlVMs -Subscription SubscriptionId1
示例输出:
Total VMs Found: 10
VMs Already registered: 1
Number of VMs registered successfully: 5
Number of VMs failed to register due to error: 1
Number of VMs skipped as VM or the guest agent on VM is not running: 2
Number of VMs skipped as they are not running SQL Server On Windows: 1
Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log
多个资源组中的所有 VM
使用以下 cmdlet 在单个订阅中的多个资源组中注册所有SQL Server虚拟机:
Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupList ResourceGroup1,ResourceGroup2
示例输出:
Total VMs Found: 4
VMs Already registered: 1
Number of VMs registered successfully: 1
Number of VMs failed to register due to error: 1
Number of VMs skipped as they are not running SQL Server On Windows: 1
Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log
一个资源组中的所有 VM
使用以下 cmdlet 在单个资源组中注册所有SQL Server虚拟机:
Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupName ResourceGroup1
示例输出:
Total VMs Found: 4
VMs Already registered: 1
Number of VMs registered successfully: 1
Number of VMs failed to register due to error: 1
Number of VMs skipped as VM or the guest agent on VM is not running: 1
Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log
单个资源组中的特定 VM
使用以下 cmdlet 在单个资源组中注册特定的SQL Server虚拟机:
Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupName ResourceGroup1 -VmList VM1,VM2,VM3
示例输出:
Total VMs Found: 3
VMs Already registered: 0
Number of VMs registered successfully: 1
Number of VMs skipped as VM or the guest agent on VM is not running: 1
Number of VMs skipped as they are not running SQL Server On Windows: 1
Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
Please find the error details in file VMsNotRegisteredDueToError1571314821.log
特定 VM
使用以下 cmdlet 注册特定的SQL Server虚拟机:
Register-SqlVMs -Subscription SubscriptionId1 -ResourceGroupName ResourceGroup1 -Name VM1
示例输出:
Total VMs Found: 1
VMs Already registered: 0
Number of VMs registered successfully: 1
Please find the detailed report in file RegisterSqlVMScriptReport1571314821.txt
输出说明
每次使用 Register-SqlVMs cmdlet 时都会生成报表和日志文件。
报表
生成的报表是一个名为 .txt 的 RegisterSqlVMScriptReport<Timestamp>.txt 文件,其中时间戳是启动 cmdlet 的时间。 报表列出了以下详细信息:
| 输出值 | 说明 |
|---|---|
| 由于你没有访问权限或凭据不正确而导致的订阅注册失败的次数 | 这提供了与提供的身份验证有问题的订阅的数量和列表。 通过搜索订阅 ID,可以在日志中找到详细的错误。 |
| 由于订阅未注册到资源提供程序而无法尝试的订阅数 | 本节包含尚未注册到 SQL IaaS 代理程序扩展的订阅的数量和列表。 |
| 找到的 VM 总数 | 传递给 cmdlet 的参数范围内识别的虚拟机数量。 |
| 已注册的 VM 数 | 由于虚拟机已注册到代理扩展而跳过的虚拟机的计数。 |
| 已成功注册的 VM 数 | 运行 cmdlet 后成功注册的虚拟机计数。 以 SubscriptionID, Resource Group, Virtual Machine 格式列出已注册的虚拟机。 |
| 由于错误而未能注册的 VM 数 | 由于某些错误而未能注册的虚拟机计数。 可在日志文件中查看错误的详细信息。 |
| 由于 VM 或 VM 上的来宾代理未运行而跳过的 VM 数 | 由于虚拟机或虚拟机上的来宾代理未运行而无法注册的虚拟机的计数和列表。 启动虚拟机或来宾代理后,可以重试这些程序。 可在日志文件中查看详细信息。 |
| 跳过的虚拟机数量,因为它们未在 Windows 上运行 SQL Server | 由于虚拟机未运行SQL Server或不是Windows虚拟机而跳过的虚拟机计数。 虚拟机以 SubscriptionID, Resource Group, Virtual Machine 格式列出。 |
日志
错误记录在名为 VMsNotRegisteredDueToError<Timestamp>.log 的日志文件中,其中时间戳是脚本启动的时间。 如果错误位于订阅级别,则日志包含逗号分隔的订阅 ID 和错误消息。 如果错误与虚拟机注册有关,则日志将包含订阅 ID、资源组名称、虚拟机名称、错误代码和消息,用逗号分隔。
备注
使用提供的脚本向扩展注册SQL Server VM 时,请考虑以下事项:
- 要使用扩展注册,需要在 SQL Server VM 上运行的来宾代理。 Windows Server 2008 映像没有来宾代理,因此这些虚拟机将失败,并且必须手动注册并具有 限制功能。
- 可使用内置重试逻辑来克服透明错误。 如果虚拟机已成功注册,则它是一种快速操作。 但是,如果注册失败,则将重试每个虚拟机。 因此,虽然实际时间要求取决于错误的类型和数量,但你应留出大量时间来完成注册过程。
完整脚本
完整脚本在 GitHub 上,请参阅 使用 Az PowerShell 批量注册 SQL Server VM。
复制完整脚本,并将其另存为 RegisterSqLVMs.psm1。
后续步骤
- 查看 SQL IaaS 代理扩展提供的优势。
- 手动注册单个 VM
- 自动注册订阅中的所有 VM。
- 解决有关扩展的已知问题。
- 查看 SQL IaaS 代理扩展隐私声明。
- 查看最佳做法清单,针对性能和安全性进行优化。
若要了解详细信息,请查看以下文章:
- Windows VM 上SQL Server的概述
- Windows VM 上的 SQL Server 常见问题
- SQL Server在 Azure 虚拟机上的定价指导
- Azure VM 上的SQL Server新增功能