适用于: Azure SQL 托管实例
Azure SQL 托管实例
本快速入门将指导你使用 Azure 门户、PowerShell 和 Azure CLI 创建 Azure SQL 托管实例的部署。
先决条件
若要创建 SQL 托管实例,需要满足以下先决条件:
- 一个 Azure 订阅。 如果还没有 Azure 订阅,请创建一个试用帐户
- 一般情况下,用户需要在订阅范围内分配有 SQL 托管实例参与者角色。
- 如果在已委托给 Azure SQL 托管实例的子网中进行预配,则用户只需要在订阅范围内分配的 Microsoft.Sql/managedInstances/write 权限。
- 最新版本的 Az.SQL PowerShell 模块,或最新版本的 Azure CLI。
有关限制,请参阅支持的区域。
创建 Azure SQL 托管实例
可以使用 Azure 门户、PowerShell 和 Azure CLI 创建 Azure SQL 托管实例的部署。
考虑以下情况:
- 可通过 Azure 门户、PowerShell、Azure CLI 或其他使用 REST API 的工具来取消预配过程。
- 如果实例部署受到同一子网中其他操作的影响,例如长时间运行的还原或实例规模缩放,则实例部署可能会被延迟。
- 需要资源组的读取权限才能在资源组中查看 SQL 托管实例。
登录到 Azure 门户
要在 Azure 门户中创建实例,首先需要登录 Azure 门户,然后在“创建 Azure SQL 托管实例”页面上填写信息。
要创建实例,请按照以下步骤操作:
- 登录 Azure 门户。 
- 在 Azure 门户的左侧菜单上选择“Azure SQL”。 如果 Azure SQL 不在列表中,请选择“所有服务”,然后在搜索框中输入“Azure SQL”。 
- 选择“+ 创建”以打开“选择 SQL 部署选项”页。 通过在“SQL 托管实例”磁贴上选择“显示详细信息”,可以查看有关 Azure SQL 托管实例的其他信息 。 
- 从下拉列表中选择“单一实例”,然后选择“创建”,以打开创建 Azure SQL 托管实例页面。 - 
              
                
 
“基本信息”选项卡
填写“基本信息”选项卡中的必需信息。这是预配 SQL 托管实例所需的最低要求。
下表提供了“基本信息”选项卡上所需信息的详细信息:
| 设置 | 建议值 | 描述 | 
| 订阅 | 你的订阅。 | 一个允许你创建新资源的订阅。 | 
| 资源组 | 新的或现有的资源组。 | 如需有效的资源组名称,请参阅 Naming rules and restrictions(命名规则和限制)。 | 
| 托管实例名称 | 任何有效的名称。 | 请参阅命名规则和限制,了解什么是有效的名称。 | 
| 区域 | 要在其中创建 SQL 托管实例的区域。 | 有关区域的信息,请参阅 Azure 区域。 | 
| 身份验证方法 | 使用 SQL 身份验证 | 对于本快速入门,请使用 SQL 身份验证。 但为了提高安全性,请使用 Microsoft Entra 身份验证。 | 
| 托管实例管理员登录名 | 任何有效的用户名。 | 请参阅命名规则和限制,了解什么是有效的名称。 不要使用 serveradmin,因为这是保留的服务器级角色。 | 
| 密码 | 任何有效的密码。 | 密码必须至少 16 个字符,且符合定义的复杂性要求。 | 
在托管实例详细信息下,选择“计算 + 存储”部分的“配置托管实例”,以打开”计算 + 存储“页面。
              
               
              
              
            
下表提供了有关示例 SQL 托管实例的计算和存储建议:
| 设置 | 建议值 | 描述 | 
| 服务层级 | 常规用途 | 常规用途层级适用于大多数生产工作负载,它是默认选项。 有关详细信息,请参阅资源限制。 | 
| 硬件代系 | 标准系列 (Gen5) | 标准系列 (Gen5) 是默认的硬件代系(它定义了计算和内存限制)。 默认为标准系列 (Gen5)。 | 
| vCore 数 | 指定一个值。 | vCore 数量是指始终为工作负载预配的确切计算资源量。 默认值为 8 个 vCore。 | 
| 存储空间(以 GB 为单位) | 指定一个值。 | 存储大小(以 GB 为单位),请根据预期的数据大小进行选择。 | 
| SQL Server 许可证 | 选择适用的授权模型。 | 可以选择即付即用,使用现有的 SQL 许可证和 Azure 混合权益,或者启用混合故障转移权限 | 
| 备份存储冗余 | 异地冗余备份存储。 | Azure 中用于备份存储的存储冗余。 异地冗余备份存储是默认设置,也是建议的设置,但通过区域和本地冗余可提高成本灵活性,实现单区域数据驻留。 | 
指定“计算 + 存储”配置后,使用“应用”保存设置,然后导航回“创建 Azure SQL 托管实例”页面。 选择“下一步”,转到“网络”选项卡
“网络”选项卡
填写 “网络 ”选项卡上的可选信息。如果省略此信息,门户将应用默认设置。
下表提供了有关“网络”选项卡的详细信息:
| 设置 | 建议值 | 描述 | 
| 虚拟网络/子网 | 创建新的或使用现有的虚拟网络 | 如果网络或子网不可用,则必须 对其进行修改以满足网络要求 ,然后再将其选为新的 SQL 托管实例的目标。 | 
| 连接类型 | 选择合适的连接类型。 | 有关详细信息,请参阅连接类型。 | 
| 公共终结点 | 选择“禁用”。 | 若要通过公共数据终结点访问 SQL 托管实例,需要启用此选项。 | 
| 允许的访问来源(如果启用了“公共终结点”) | 选择“无访问权限” | 门户使用公共终结点配置安全组。 
 根据具体的方案选择以下选项之一:
 
  
              Azure 服务:从 Power BI 或另一多租户服务进行连接时,建议使用此选项。  
              Internet:在想要快速启动 SQL 托管实例时用于测试目的。 不建议用于生产环境。  
              不允许访问:此选项创建一个“拒绝”安全规则。 修改此规则,使 SQL 托管实例可通过公共终结点访问。  有关公共终结点安全性的详细信息,请参阅通过公共终结点安全使用 Azure SQL 托管实例。
 | 
在创建 SQL 托管实例之前,选择 “查看 + 创建 ”以查看你的选择。 或者,通过选择“下一步:安全设置”来配置安全设置。
“安全性”选项卡
对于本快速入门,请将“ 安全 ”选项卡上的设置保留为默认值。
在创建 SQL 托管实例之前,选择 “查看 + 创建 ”以查看你的选择。  也可配置更多自定义设置,方法是选择“下一步:其他设置”。
其他设置
填写“附加设置”选项卡中的可选信息。如果省略此信息,门户会应用默认设置。
下表提供了有关“附加设置”选项卡的详细信息:
| 设置 | 建议值 | 描述 | 
| 排序规则 | 选择要用于 SQL 托管实例的排序规则。 如果从 SQL Server 迁移数据库,请使用 SELECT SERVERPROPERTY(N'Collation')检查源排序规则并使用该值。 | 有关排序规则的信息,请参阅设置或更改服务器排序规则。 | 
| 时区 | 选择 SQL 托管实例观察到的时区。 | 有关详细信息,请参阅时区。 | 
| 异地复制 | 请选择“否”。 | 仅当计划将 SQL 托管实例用作故障转移组辅助实例时,才启用此选项。 | 
| 维护时段 | 选择适当的维护时段。 | 指定服务维护实例的时间安排。 | 
在创建 SQL 托管实例之前,选择 “查看 + 创建 ”以查看你的选择。 或者,选择“下一步:标记”来配置 Azure 标记(推荐)。
将标记添加到 Azure 资源管理器模板(ARM 模板)中的资源。 可以通过标记对资源进行逻辑组织。 标记值显示在成本报告中,并且允许根据标记进行其他管理活动。  请考虑至少使用“所有者”标记来标记新的 SQL 托管实例以确定创建者,并使用“环境”标记进行标记来确定此系统是生产环境还是开发环境等。有关详细信息,请参阅为 Azure 资源开发命名和标记策略。
选择“查看 + 创建”以继续。
查看 + 创建
在“ 审阅 + 创建 ”选项卡上,查看你的选择,然后选择“ 创建 ”以部署 SQL 托管实例。
监视部署进度
- 选择“通知”图标以查看部署状态。 - 
              
                
 
- 在通知中选择“正在进行的部署”以打开 SQL 托管实例窗口,进一步监视部署进度。 
部署完成后,导航到资源组以查看 SQL 托管实例:
              
               
              
              
            
提示
如果关闭 Web 浏览器或离开部署进度屏幕,可以通过 Azure 门户、PowerShell 或 Azure CLI 中 SQL 托管实例的“概述”页监视预配作。
 
使用 PowerShell 创建实例。 有关详细信息,请参阅使用 PowerShell 创建 SQL 托管实例。
首先,设置变量:
$NSnetworkModels = "Microsoft.Azure.Commands.Network.Models"
$NScollections = "System.Collections.Generic"
Connect-AzAccount -Environment AzureChinaCloud
# The SubscriptionId in which to create these objects
$SubscriptionId = ''
# Set the resource group name and location for your managed instance
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$location = "chinanorth3"
# Set the networking values for your managed instance
$vNetName = "myVnet-$(Get-Random)"
$vNetAddressPrefix = "10.0.0.0/16"
$defaultSubnetName = "myDefaultSubnet-$(Get-Random)"
$defaultSubnetAddressPrefix = "10.0.0.0/24"
$miSubnetName = "MISubnet-$(Get-Random)"
$miSubnetAddressPrefix = "10.0.0.0/24"
#Set the managed instance name for the new managed instance
$instanceName = "mi-name-$(Get-Random)"
# Set the admin login and password for your managed instance
$miAdminSqlLogin = "SqlAdmin"
$miAdminSqlPassword = "ChangeThisPassword!!"
# Set the managed instance service tier, compute level, and license mode
$edition = "General Purpose"
$vCores = 8
$maxStorage = 256
$computeGeneration = "Gen5"
$license = "LicenseIncluded" #"BasePrice" or LicenseIncluded if you have don't have SQL Server licence that can be used for AHB discount
$dbname = 'SampleDB'
接下来,创建资源组:
# Set subscription context
$subscriptionContextParams = @{
    SubscriptionId = $SubscriptionId
}
Set-AzContext @subscriptionContextParams
# Create a resource group
$resourceGroupParams = @{
    Name = $resourceGroupName
    Location = $location
    Tag = @{Owner="SQLDB-Samples"}
}
$resourceGroup = New-AzResourceGroup @resourceGroupParams
之后,创建虚拟网络:
# Configure virtual network, subnets, network security group, and routing table
$networkSecurityGroupParams = @{
    Name = 'myNetworkSecurityGroupMiManagementService'
    ResourceGroupName = $resourceGroupName
    Location = $location
}
$networkSecurityGroupMiManagementService = New-AzNetworkSecurityGroup @networkSecurityGroupParams
$routeTableParams = @{
    Name = 'myRouteTableMiManagementService'
    ResourceGroupName = $resourceGroupName
    Location = $location
}
$routeTableMiManagementService = New-AzRouteTable @routeTableParams
$virtualNetworkParams = @{
    ResourceGroupName = $resourceGroupName
    Location = $location
    Name = $vNetName
    AddressPrefix = $vNetAddressPrefix
}
$virtualNetwork = New-AzVirtualNetwork @virtualNetworkParams
$subnetConfigParams = @{
    Name = $miSubnetName
    VirtualNetwork = $virtualNetwork
    AddressPrefix = $miSubnetAddressPrefix
    NetworkSecurityGroup = $networkSecurityGroupMiManagementService
    RouteTable = $routeTableMiManagementService
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnetConfigParams | Set-AzVirtualNetwork
$virtualNetwork = Get-AzVirtualNetwork -Name $vNetName -ResourceGroupName $resourceGroupName
$subnet= $virtualNetwork.Subnets[0]
# Create a delegation
$subnet.Delegations = New-Object "$NScollections.List``1[$NSnetworkModels.PSDelegation]"
$delegationName = "dgManagedInstance" + (Get-Random -Maximum 1000)
$delegationParams = @{
    Name = $delegationName
    ServiceName = "Microsoft.Sql/managedInstances"
}
$delegation = New-AzDelegation @delegationParams
$subnet.Delegations.Add($delegation)
Set-AzVirtualNetwork -VirtualNetwork $virtualNetwork
$miSubnetConfigId = $subnet.Id
$allowParameters = @{
    Access = 'Allow'
    Protocol = 'Tcp'
    Direction= 'Inbound'
    SourcePortRange = '*'
    SourceAddressPrefix = 'VirtualNetwork'
    DestinationAddressPrefix = '*'
}
$denyInParameters = @{
    Access = 'Deny'
    Protocol = '*'
    Direction = 'Inbound'
    SourcePortRange = '*'
    SourceAddressPrefix = '*'
    DestinationPortRange = '*'
    DestinationAddressPrefix = '*'
}
$denyOutParameters = @{
    Access = 'Deny'
    Protocol = '*'
    Direction = 'Outbound'
    SourcePortRange = '*'
    SourceAddressPrefix = '*'
    DestinationPortRange = '*'
    DestinationAddressPrefix = '*'
}
$networkSecurityGroupParams = @{
    ResourceGroupName = $resourceGroupName
    Name = "myNetworkSecurityGroupMiManagementService"
}
$networkSecurityGroup = Get-AzNetworkSecurityGroup @networkSecurityGroupParams
$allowRuleParams = @{
    Access = 'Allow'
    Protocol = 'Tcp'
    Direction = 'Inbound'
    SourcePortRange = '*'
    SourceAddressPrefix = 'VirtualNetwork'
    DestinationAddressPrefix = '*'
}
$denyInRuleParams = @{
    Access = 'Deny'
    Protocol = '*'
    Direction = 'Inbound'
    SourcePortRange = '*'
    SourceAddressPrefix = '*'
    DestinationPortRange = '*'
    DestinationAddressPrefix = '*'
}
$denyOutRuleParams = @{
    Access = 'Deny'
    Protocol = '*'
    Direction = 'Outbound'
    SourcePortRange = '*'
    SourceAddressPrefix = '*'
    DestinationPortRange = '*'
    DestinationAddressPrefix = '*'
}
$networkSecurityGroup |
    Add-AzNetworkSecurityRuleConfig @allowRuleParams -Priority 1000 -Name "allow_tds_inbound" -DestinationPortRange 1433 |
    Add-AzNetworkSecurityRuleConfig @allowRuleParams -Priority 1100 -Name "allow_redirect_inbound" -DestinationPortRange 11000-11999 |
    Add-AzNetworkSecurityRuleConfig @denyInRuleParams -Priority 4096 -Name "deny_all_inbound" |
    Add-AzNetworkSecurityRuleConfig @denyOutRuleParams -Priority 4096 -Name "deny_all_outbound" |
    Set-AzNetworkSecurityGroup
最后,创建实例:
# Create credentials
$secpassword = ConvertTo-SecureString $miAdminSqlPassword -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList @($miAdminSqlLogin, $secpassword)
$managedInstanceParams = @{
    Name = $instanceName
    ResourceGroupName = $resourceGroupName
    Location = $location
    SubnetId = $miSubnetConfigId
    AdministratorCredential = $credential
    StorageSizeInGB = $maxStorage
    VCore = $vCores
    Edition = $edition
    ComputeGeneration = $computeGeneration
    LicenseType = $license
}
New-AzSqlInstance @managedInstanceParams
使用 Azure CLI 创建实例。 有关详细信息,请参阅使用 Azure CLI 创建 SQL 托管实例。
首先,设置变量:
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location="China North 3"
resourceGroup="msdocs-azuresql-rg-$randomIdentifier"
tag="create-managed-instance"
vNet="msdocs-azuresql-vnet-$randomIdentifier"
subnet="msdocs-azuresql-subnet-$randomIdentifier"
nsg="msdocs-azuresql-nsg-$randomIdentifier"
route="msdocs-azuresql-route-$randomIdentifier"
instance="msdocs-azuresql-instance-$randomIdentifier"
login="azureuser"
password="Pa$$w0rD-$randomIdentifier"
dbname="SampleDB"
echo "Using resource group $resourceGroup with login: $login, password: $password..."
接下来,创建资源组:
echo "Creating $resourceGroup in $location..."
az group create --name $resourceGroup --location "$location" --tags $tag
之后,创建虚拟网络:
echo "Creating $vNet with $subnet..."
az network vnet create --name $vNet --resource-group $resourceGroup --location "$location" --address-prefixes 10.0.0.0/16
az network vnet subnet create --name $subnet --resource-group $resourceGroup --vnet-name $vNet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Sql/managedInstances
echo "Creating $nsg..."
az network nsg create --name $nsg --resource-group $resourceGroup --location "$location"
az network nsg rule create --name "allow_management_inbound" --nsg-name $nsg --priority 100 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges 9000 9003 1438 1440 1452 --direction Inbound --protocol Tcp --source-address-prefixes "*" --source-port-ranges "*"
az network nsg rule create --name "allow_misubnet_inbound" --nsg-name $nsg --priority 200 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges "*" --direction Inbound --protocol "*" --source-address-prefixes 10.0.0.0/24 --source-port-ranges "*"
az network nsg rule create --name "allow_health_probe_inbound" --nsg-name $nsg --priority 300 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges "*" --direction Inbound --protocol "*" --source-address-prefixes AzureLoadBalancer --source-port-ranges "*"
az network nsg rule create --name "allow_management_outbound" --nsg-name $nsg --priority 1100 --resource-group $resourceGroup --access Allow --destination-address-prefixes AzureCloud --destination-port-ranges 443 12000 --direction Outbound --protocol Tcp --source-address-prefixes 10.0.0.0/24 --source-port-ranges "*"
az network nsg rule create --name "allow_misubnet_outbound" --nsg-name $nsg --priority 200 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges "*" --direction Outbound --protocol "*" --source-address-prefixes 10.0.0.0/24 --source-port-ranges "*"
echo "Creating $route..."
az network route-table create --name $route --resource-group $resourceGroup --location "$location"
az network route-table route create --address-prefix 0.0.0.0/0 --name "primaryToMIManagementService" --next-hop-type Internet --resource-group $resourceGroup --route-table-name $route
az network route-table route create --address-prefix 10.0.0.0/24 --name "ToLocalClusterNode" --next-hop-type VnetLocal --resource-group $resourceGroup --route-table-name $route
echo "Configuring $subnet with $nsg and $route..."
az network vnet subnet update --name $subnet --network-security-group $nsg --route-table $route --vnet-name $vNet --resource-group $resourceGroup
最后,创建实例:
# This step will take awhile to complete. You can monitor deployment progress in the activity log within the Azure portal.
echo "Creating $instance with $vNet and $subnet..."
az sql mi create --admin-password $password --admin-user $login --name $instance --resource-group $resourceGroup --subnet $subnet --vnet-name $vNet --location "$location"
 
查看网络设置
选择资源组中的“路由表”资源,查看默认的用户定义路由表对象和条目,它们用于路由来自 SQL 托管实例虚拟网络和该网络内的流量。 若要更改或添加路由,请在路由表设置中打开“路由”。
选择网络安全组对象,查看入站和出站安全规则。 若要更改或添加规则,请在网络安全组设置中打开“入站安全规则”和“出站安全规则” 。
              
               
              
              
            
重要
如果为 SQL 托管实例启用了公共终结点,请打开端口以允许从公共互联网连接到 SQL 托管实例的网络流量。
 
创建数据库
可以使用 Azure 门户、PowerShell 或 Azure CLI 创建新数据库。
要在 Azure 门户中为实例创建新数据库,请按照以下步骤操作:
- 转到 Azure 门户中的 SQL 托管实例。 
- 在 SQL 托管实例的“概述”页面,选择“+ 新建数据库”,打开“创建 Azure SQL 托管数据库”页面。 - 
              
                
 
- 在“基本信息”选项卡上为数据库提供名称。 
- 在“数据源”选项卡上,为空数据库选择“无”,或从备份还原数据库。 
- 配置剩余选项卡上的剩余设置,然后选择“查看 + 创建”以验证选择。 
- 使用创建部署数据库。 
使用 PowerShell 创建数据库:
$databaseParams = @{
    ResourceGroupName = $resourceGroupName
    InstanceName = $instanceName
    Name = $dbname
    Collation = 'Latin1_General_100_CS_AS_SC'
}
New-AzSqlInstanceDatabase @databaseParams
使用 Azure CLI 创建数据库:
az sql midb create -g $resourceGroup --mi $instance -n $dbname --collation Latin1_General_100_CS_AS_SC
 
检索 SQL 托管实例的连接详细信息
若要连接到 SQL 托管实例,请遵循以下步骤检索主机名和完全限定的域名 (FQDN):
- 返回资源组并选择创建的 SQL 托管实例对象。 
- 在“概述”选项卡上,找到“主机”属性。 单击“ 复制到剪贴板 ”按钮,将 SQL 托管实例的主机名复制到剪贴板,以便在下一个快速入门中使用。 - 
              
                
 - 复制的值表示可用于连接到 SQL 托管实例的完全限定域名 (FQDN)。 它类似于以下地址示例:your_host_name.a1b2c3d4e5f6.database.chinacloudapi.cn。 
相关内容
查看以下相关内容:
将现有 SQL Server 数据库从本地还原到 SQL 托管实例:
后续步骤
              将应用程序连接到 SQL 托管实例。