你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

SQL Server 与 Azure SQL 托管实例之间的 T-SQL 差异

适用于: Azure SQL 托管实例

本文汇总并解释了 Azure SQL 托管实例与 SQL Server 之间的语法和行为差异。

SQL 托管实例可与 SQL Server 数据库引擎高度兼容,且 SQL 托管实例支持大多数功能。

从 SQL Server 轻松迁移

与 SQL Server 相比,SQL 托管实例中引入了一些 PaaS 限制,并且在行为方面有一些变化。 这些差异划分为以下几个类别:

其中的大多数功能都是体系结构约束,代表服务功能。

新功能中介绍了已在 SQL 托管实例中发现并且将来会解决的临时已知问题。

可用性

AlwaysOn 可用性组

高可用性内置在 SQL 托管实例中,用户无法控制。 不支持以下语句:

备份

Azure SQL 托管实例包含自动备份,因此用户可以创建完整数据库 COPY_ONLY 备份。 不支持差异、日志和文件快照备份。

  • 使用 SQL 托管实例,可以只将实例数据库备份到 Azure Blob 存储帐户:
    • 仅支持 BACKUP TO URL
    • 不支持 FILETAPE 和备份设备。
  • 支持大多数常规 WITH 选项。
    • COPY_ONLY 是必需的。
    • FILE_SNAPSHOTCREDENTIAL 不受支持。
    • 不支持磁带选项 REWINDNOREWINDUNLOADNOUNLOAD
    • 不支持日志特定的选项 NORECOVERYSTANDBYNO_TRUNCATE

的限制:

  • 使用 SQL 托管实例可将实例数据库备份到最多包含 32 个条带的备份,如果使用备份压缩,则这种方法对于不超过 4 TB 的数据库而言已足够。

  • 不能在使用服务托管透明数据加密 (TDE) 加密的数据库上执行 BACKUP DATABASE ... WITH COPY_ONLY。 服务托管的 TDE 强制使用内部 TDE 密钥对备份进行加密。 无法导出该密钥,因此无法还原备份。 使用自动备份和时间点还原,或者改用客户管理的 (BYOK) TDE。 也可以在数据库上禁用加密。

  • 只能将 SQL 托管实例上进行的本机备份还原到 SQL Server 2022 实例。 这是因为与其他版本的 SQL Server 相比,SQL 托管实例具有更高的内部数据库版本。 有关详细信息,请查看将 SQL 托管实例数据库备份还原到 SQL Server 2022

  • 若要将数据库备份到 Azure 存储或从 Azure 存储中还原数据库,可以使用托管标识或共享访问签名 (SAS) 进行身份验证,它是一个向你授予 Azure 存储资源的受限访问权限的 URI。了解相关详细信息。 不支持对这些场景使用访问密钥。

  • 在 SQL 托管实例中使用 BACKUP 命令最大可以设置 195 GB 的备份条带大小(即最大 Blob 大小)。 增加备份命令中的带状线数量以缩小单个带状线大小,将其保持在限制范围内。

    提示

    从本地环境或虚拟机中的 SQL Server 备份数据库时,若要解决此限制,可以:

    • 备份到 DISK 而不是 URL
    • 将备份文件上传到 Blob 存储。
    • 还原到 SQL 托管实例。

    SQL 托管实例中的 Restore 命令支持备份文件中的更大 Blob 大小,因为将使用不同的 Blob 类型来存储上传的备份文件。

有关使用 T-SQL 进行备份的信息,请参阅 BACKUP

安全性

审核

在审核方面,Microsoft Azure SQL 和 SQL Server 的主要差异是:

  • 在 SQL 托管实例中,审核在服务器级别执行。 在 Azure Blob 存储中存储 .xel 日志文件。
  • 在 Azure SQL 数据库中,审核在数据库级别执行。 在 Azure Blob 存储中存储 .xel 日志文件。
  • 在本地 SQL Server 或虚拟机中,审核在服务器级别执行。 在文件系统或 Windows 事件日志中存储事件。

SQL 托管实例中的 XEvent 审核支持 Azure Blob 存储目标。 不支持文件和 Windows 日志。

Azure Blob 存储审核的主要 CREATE AUDIT 语法差异为:

  • 提供了新语法 TO URL,用于指定放置 .xel 文件的 Azure Blob 存储容器的 URL。
  • 不支持语法 TO FILE,因为 SQL 托管实例无法访问 Windows 文件共享。

有关详细信息,请参阅:

证书

由于 SQL 托管实例无法访问文件共享和 Windows 文件夹,因此存在以下约束:

  • 不支持将 CREATE FROM/BACKUP TO 文件用于证书。
  • 不支持 FILE/ASSEMBLY 中的 CREATE/BACKUP 证书。 无法使用私钥文件。

请参阅 CREATE CERTIFICATEBACKUP CERTIFICATE

解决方法:请勿在创建证书备份后再还原该备份,而应先获取证书二进制文件内容和私钥,将其存储为 .sql 文件,然后从二进制文件创建证书

CREATE CERTIFICATE  
   FROM BINARY = asn_encoded_certificate
WITH PRIVATE KEY (<private_key_options>)

凭据

支持托管标识、Azure Key Vault 和 SHARED ACCESS SIGNATURE 标识。 不支持 Windows 用户。

请参阅 CREATE CREDENTIALALTER CREDENTIAL

加密提供程序

由于 SQL 托管实例无法访问文件,因此无法创建加密提供程序:

登录名和用户

  • 支持使用 FROM CERTIFICATEFROM ASYMMETRIC KEYFROM SID 创建的 SQL 登录名。 请参阅 CREATE LOGIN

  • 支持使用 CREATE LOGIN 语法或 CREATE USER FROM LOGIN [Azure AD 登录名] 语法创建的 Azure Active Directory (Azure AD) 服务器主体(登录名)。 这些登录名是在服务器级别创建的。

    SQL 托管实例支持使用语法 CREATE USER [AADUser/AAD group] FROM EXTERNAL PROVIDER 的 Azure AD 数据库主体。 此功能也称为 Azure AD 包含的数据库用户。

  • 不支持使用 CREATE LOGIN ... FROM WINDOWS 语法创建的 Windows 登录名。 使用 Azure Active Directory 登录名和用户。

  • 实例的 Azure AD 管理员具有不受限制的管理员权限

  • 可以使用 CREATE USER ... FROM EXTERNAL PROVIDER 语法创建非管理员 Azure AD 数据库级用户。 请参阅 CREATE USER ...FROM EXTERNAL PROVIDER

  • 某些功能不支持在跨实例交互中使用 Azure AD 服务器主体(登录名),但仅在一个 SQL 托管实例内使用。 此类功能的示例是 SQL 复制。 不过链接服务器功能支持使用 Azure AD 服务器主体(登录名)进行跨实例身份验证。

  • 不支持设置映射到作为数据库所有者的 Azure AD 组的 Azure AD 登录名。 即使尚未在数据库中创建登录名,Azure AD 组的成员也可以是数据库所有者。

  • 支持使用其他 Azure AD 主体模拟 Azure AD 服务器级主体,例如 EXECUTE AS 子句。 EXECUTE AS 限制如下:

    • 当名称不同于登录名时,EXECUTE AS USER 不支持 Azure AD 用户。 例如,如果用户是通过语法 CREATE USER [myAadUser] FROM LOGIN [john@contoso.com] 创建的,则会尝试通过 EXEC AS USER = myAadUser 进行模拟。 基于 Azure AD 服务器主体(登录名)创建 USER 时,请指定与 LOGIN 中的 login_name 相同的 user_name。

    • 只有属于 sysadmin 角色的 SQL 服务器级主体(登录名)可以针对 Azure AD 主体执行以下操作:

      • EXECUTE AS USER
      • EXECUTE AS LOGIN
    • 若要使用 EXECUTE AS 语句模拟用户,用户需要直接映射到 Azure AD 服务器主体(登录名)。 即使调用方对指定用户名具有模拟权限,也无法有效地使用 EXECUTE AS 语句模拟映射到 Azure AD 服务器主体中的 Azure AD 组中的用户。

  • SQL 托管实例中的 Azure AD 用户在使用 SSMS V18.4 或更高版本SqlPackage 时,可以使用 bacpac 文件进行数据库导出/导入。

    • 使用数据库 bacpac 文件时,可以使用以下配置:
      • 在同一 Azure AD 域的不同托管实例之间导出/导入数据库。
      • 在同一 Azure AD 域中将数据库从 SQL 托管实例导出以及将其导入 SQL 数据库。
      • 在同一 Azure AD 域中从 SQL 数据库导出数据库以及将其导入 SQL 托管实例。
      • 将数据库从 SQL 托管实例导出以及将其导入 SQL Server(2012 或更高版本)。
        • 在此配置中,所有 Azure AD 用户都创建为没有登录名的 SQL Server 数据库主体(用户)。 用户类型为 SQL,在 sys.database_principals 中以 SQL_USER 的形式呈现。 其权限和角色保留在 SQL Server 数据库元数据中,可以用于模拟。 但是,无法使用这些用户通过其凭据访问和登录 SQL Server。
  • 只有服务器级主体登录名(由 SQL 托管实例预配进程创建)、服务器角色的成员(例如 securityadminsysadmin)或者在服务器级别拥有 ALTER ANY LOGIN 权限的其他登录名可以在 SQL 托管实例的 master 数据库中创建 Azure AD 服务器主体(登录名)。

  • 如果登录名是 SQL 主体,则只有属于 sysadmin 角色的登录名才能使用 create 命令来为 Azure AD 帐户创建登录名。

  • Azure AD 登录名必须是用于 Azure SQL 托管实例的同一目录中的 Azure AD 成员。

  • 从 SQL Server Management Studio 18.0 预览版 5 开始,Azure AD 服务器主体(登录名)将显示在对象资源管理器中。

  • 在实例上启用 Azure AD 管理员帐户后,系统会自动为该帐户创建具有 sysadmin 访问级别的服务器主体。

  • 在身份验证期间,将应用以下顺序来解析身份验证主体:

    1. 如果 Azure AD 帐户存在并直接映射到 Azure AD 服务器主体(登录名)(以类型“E”的形式存在于 sys.server_principals 中),则授予访问权限并应用 Azure AD 服务器主体(登录名)的权限。
    2. 如果 Azure AD 帐户是映射到 Azure AD 服务器主体(登录名)的 Azure AD 组的成员(以类型“X”的形式存在于 sys.server_principals 中),则授予访问权限并应用 Azure AD 组登录名的权限。
    3. 如果 Azure AD 帐户存在并直接映射到数据库中的 Azure AD 用户(以类型“E”的形式存在于 sys.database_principals 中),则授予访问权限并应用 Azure AD 数据库用户的权限。
    4. 如果 Azure AD 帐户是映射到数据库中 Azure AD 用户的 Azure AD 组的成员(以类型“X”的形式存在于 sys.database_principals 中),则授予访问权限并应用 Azure AD 组用户的权限。

服务密钥和服务主密钥

配置

缓冲池扩展

排序规则

默认实例排序规则为 SQL_Latin1_General_CP1_CI_AS 并可以被指定为创建参数。 请参阅排序规则

兼容级别

  • 支持的兼容级别:100、110、120、130、140、150 和 160。
  • 不支持低于 100 的兼容级别。
  • 新数据库的默认兼容级别为 150。 对于已还原的数据库,如果其兼容级别在还原之前为 100 或更高,则还原后保持不变。

请参阅 ALTER DATABASE 兼容级别

数据库镜像

不支持数据库镜像。

  • 不支持 ALTER DATABASE SET PARTNERSET WITNESS 选项。
  • 不支持 CREATE ENDPOINT … FOR DATABASE_MIRRORING

有关详细信息,请参阅 ALTER DATABASE SET PARTNER 和 SET WITNESS 以及 CREATE ENDPOINT … FOR DATABASE_MIRRORING

数据库选项

  • 不支持多个日志文件。
  • “常规用途”服务层级不支持内存中对象。
  • 每个“常规用途”实例限制为 280 个文件,这意味着,每个数据库最多只能有 280 个文件。 “常规用途”层级中的数据文件和日志文件都会计入此限制。 “业务关键”层级支持每个数据库 32,767 个文件
  • 数据库中不能有包含文件流数据的文件组。 如果 .bak 包含 FILESTREAM 数据,还原将会失败。
  • 每个文件都被放置在 Azure Blob 存储中。 每个文件的 IO 和吞吐量取决于每个单独文件的大小。

CREATE DATABASE 语句

以下限制适用于 CREATE DATABASE

  • 无法定义文件和文件组。

  • 自动添加名为 XTP 的内存优化文件组和文件。

  • 不支持 CONTAINMENT 选项。

  • 不支持 WITH 选项。

    提示

    解决方法是在 CREATE DATABASE 后面使用 ALTER DATABASE 来设置数据库选项,以添加文件或设置包含。

  • 不支持 FOR ATTACH 选项。

  • 不支持 AS SNAPSHOT OF 选项。

有关详细信息,请参阅 CREATE DATABASE

ALTER DATABASE 语句

无法设置或更改某些文件属性:

  • 无法在 ALTER DATABASE ADD FILE (FILENAME='path') T-SQL 语句中指定文件路径。 请从脚本中删除 FILENAME,因为 SQL 托管实例自动放置文件。
  • 无法使用 ALTER DATABASE 语句更改文件名。
  • 不允许更改 XTP 文件或文件组。

默认会设置以下选项,无法更改这些选项:

  • MULTI_USER
  • ENABLE_BROKER
  • AUTO_CLOSE OFF

无法修改以下选项:

  • AUTO_CLOSE
  • AUTOMATIC_TUNING(CREATE_INDEX=ON|OFF)
  • AUTOMATIC_TUNING(DROP_INDEX=ON|OFF)
  • DISABLE_BROKER
  • EMERGENCY
  • ENABLE_BROKER
  • FILESTREAM
  • HADR
  • NEW_BROKER
  • OFFLINE
  • PAGE_VERIFY
  • PARTNER
  • READ_ONLY
  • RECOVERY BULK_LOGGED
  • RECOVERY_SIMPLE
  • REMOTE_DATA_ARCHIVE
  • RESTRICTED_USER
  • SINGLE_USER
  • WITNESS

某些 ALTER DATABASE 语句(例如 SET CONTAINMENT)可能会暂时失败,例如,在自动数据库备份期间失败,或者在数据库创建后立即失败。 在这种情况下应重试 ALTER DATABASE 语句。 有关相关错误消息的详细信息,请参阅备注部分

有关详细信息,请参阅 ALTER DATABASE

SQL Server 代理

  • 目前,SQL 托管实例不支持启用和禁用 SQL Server 代理。 SQL 代理始终运行。
  • 不支持基于空闲 CPU 的作业计划触发器。
  • SQL Server 代理设置为只读。 SQL 托管实例不支持过程 sp_set_agent_properties
  • 作业
    • 支持 T-SQL 作业步骤。
    • 支持以下复制作业:
      • 事务日志读取器
      • 快照
      • 分发服务器
    • 支持 SSIS 作业步骤。
    • 目前不支持其他类型的作业步骤:
      • 不支持合并复制作业步骤。
      • 不支持队列读取器。
      • 尚不支持命令外壳。
    • SQL 托管实例无法访问外部资源(例如,通过 robocopy 访问网络共享)。
    • 不支持 SQL Server Analysis Services。
  • 部分支持通知。
  • 支持电子邮件通知,不过需要配置数据库邮件配置文件。 SQL Server 代理只能使用一个数据库邮件配置文件,并且该配置文件必须命名为 AzureManagedInstance_dbmail_profile
    • 不支持寻呼机。
    • 不支持 NetSend。
    • 尚不支持警报。
    • 不支持代理。
  • 不支持 EventLog。
  • 用户必须直接映射到 Azure AD 服务器主体(登录名),才能创建、修改或执行 SQL 代理作业。 未直接映射的用户(例如,属于有权创建、修改或执行 SQL 代理作业的 Azure AD 组的用户)将无法有效地执行这些操作。 这是由于 SQL 托管实例模拟和 EXECUTE AS 限制的缘故。
  • 不支持主/目标 (MSX/TSX) 作业的多服务器管理功能。

有关 SQL Server 代理的信息,请参阅 SQL Server 代理

不支持以下表类型:

若要了解如何创建和更改表,请参阅 CREATE TABLEALTER TABLE

功能

BULK INSERT/OPENROWSET

由于 SQL 托管实例无法访问文件共享和 Windows 文件夹,必须从 Azure Blob 存储导入文件:

  • 从 Azure Blob 存储导入文件时,必须在 BULK INSERT 命令中指定 DATASOURCE。 请参阅 BULK INSERT
  • 从 Azure Blob 存储中读取文件内容时,必须在 OPENROWSET 函数中指定 DATASOURCE。 请参阅 OPENROWSET
  • OPENROWSET 可以用来从 Azure SQL 数据库、Azure SQL 托管实例或 SQL Server 实例读取数据。 其他资源(例如 Oracle 数据库或 Excel 文件)不受支持。

CLR

由于 SQL 托管实例无法访问文件共享和 Windows 文件夹,因此存在以下约束:

数据库邮件 (db_mail)

  • sp_send_dbmail 无法使用 @file_attachments 参数发送附件。 在此过程中无法访问本地文件系统和外部共享或 Azure Blob 存储。
  • 请参阅与 @query 参数和身份验证相关的已知问题。

DBCC

SQL 托管实例不支持 SQL Server 中启用的未记录 DBCC 语句。

  • 仅支持有限数量的全局跟踪标志。 不支持会话级 Trace flags。 请参阅跟踪标志
  • DBCC TRACEOFFDBCC TRACEON 使用有限数量的全局跟踪标志。
  • 无法使用带有 REPAIR_ALLOW_DATA_LOSS、REPAIR_FAST 和 REPAIR_REBUILD 选项的 DBCC CHECKDB,因为无法在 SINGLE_USER 模式中设置数据库 - 请参阅 ALTER DATABASE 的差异。 潜在的数据库损坏将由 Azure 支持团队负责处理。 如果发生数据库损坏,请联系 Azure 支持人员。

分布式事务

跨托管实例的基于 T-SQL 和 .NET 的分布式事务已正式发布。 其他场景,例如 XA 事务、托管实例与其他参与者之间的分布式事务等,均受适用于 Azure SQL 托管实例的 DTC 支持,该版本已进入公开预览阶段。

扩展事件

不支持对扩展事件 (XEvent) 使用某些特定于 Windows 的目标:

  • 不支持 etw_classic_sync 目标。 在 Azure Blob 存储中存储 .xel 文件。 请参阅 etw_classic_sync 目标
  • 不支持 event_file 目标。 在 Azure Blob 存储中存储 .xel 文件。 请参阅 event_file 目标

外部库

有限公共预览版支持数据库内 R 和 Python 外部库。 请参阅 Azure SQL 托管实例(预览版)中的机器学习服务

文件流和文件表

  • 不支持文件流数据。
  • 数据库中不能有包含 FILESTREAM 数据的文件组。
  • 不支持 FILETABLE
  • 表不能采用 FILESTREAM 类型。
  • 不支持以下函数:
    • GetPathLocator()
    • GET_FILESTREAM_TRANSACTION_CONTEXT()
    • PathName()
    • GetFileNamespacePat)
    • FileTableRootPath()

有关详细信息,请参阅 FILESTREAM文件表

不支持语义搜索

链接的服务器

SQL 托管实例中的链接服务器支持有限数量的目标:

  • 支持的目标包括 SQL 托管实例、SQL 数据库、Azure Synapse SQL 无服务器和专用池,以及 SQL Server 实例。
  • 不支持的目标为文件、Analysis Services 和其他 RDBMS。 尝试使用 BULK INSERTOPENROWSET 作为文件导入的替代方法从 Azure Blob 存储中进行本机 CSV 导入,或尝试使用 Azure Synapse Analytics 中的无服务器 SQL 池加载文件。

操作:

Azure SQL 托管实例上的链接服务器支持 SQL 身份验证和 Azure AD 身份验证

PolyBase

借助 Azure SQL 托管实例的数据虚拟化,可以对存储在 Azure Data Lake Storage Gen2 或 Azure Blob 存储的文件中的数据执行 Transact-SQL (T-SQL) 查询,并使用联接将其与本地存储的关系数据相结合。 直接支持 (CSV) 文件格式的 Parquet 和分隔文本。 通过指定 CSV 文件格式(其中的查询以单独的行形式返回每个文档),间接支持 JSON 文件格式。 可以使用 JSON_VALUEOPENJSON 进一步分析行。 有关 PolyBase 的常规信息,请参阅 PolyBase

此外,使用 CREATE EXTERNAL TABLE AS SELECT (CETAS) 可以将数据从 SQL 托管实例导出到外部存储帐户。 你可以使用 CETAS 在 Azure Blob 存储或 Azure Data Lake Storage (ADLS) Gen2 中创建基于 Parquet 或 CSV 文件的外部表。 CETAS 还可以将 T-SQL SELECT 语句的结果并行导出到创建的外部表中。

复制

  • 支持快照和双向复制类型。 不支持合并复制、对等复制和可更新订阅。
  • 事务复制可用于 SQL 托管实例,但存在一些约束:
    • 所有类型的复制参与者(发布服务器、分发服务器、拉取订阅服务器和推送订阅服务器)都可以放置在 SQL 托管实例上,但发布服务器和分发服务器必须同时在云中或同时在本地。
    • SQL 托管实例可以与最新版 SQL Server 通信。 有关详细信息,请参阅支持的版本矩阵
    • 事务复制存在一些其他的网络要求

有关配置事务复制的详细信息,请参阅以下教程:

RESTORE 语句

  • 支持的语法:
    • RESTORE DATABASE
    • RESTORE FILELISTONLY ONLY
    • RESTORE HEADER ONLY
    • RESTORE LABELONLY ONLY
    • RESTORE VERIFYONLY ONLY
  • 不支持的语法:
    • RESTORE LOG ONLY
    • RESTORE REWINDONLY ONLY
  • 源:
    • FROM URL(Azure Blob 存储)是唯一受支持的选项。
    • 不支持 FROM DISK/TAPE/备份设备。
    • 不支持备份集。
  • 不支持 WITH 选项。 WITH(如 DIFFERENTIALSTATSREPLACE 等)等还原尝试将失败。
  • ASYNC RESTORE:即使客户端连接断开,还原也会继续。 如果删除了连接,可以在 sys.dm_operation_status 视图中检查还原操作的状态,以及 CREATE DATABASE 和 DROP DATABASE 的状态。 请参阅 sys.dm_operation_status

将设置或重写以下数据库选项,以后无法更改:

  • NEW_BROKER(如果未在 .bak 文件中启用代理)。
  • ENABLE_BROKER(如果未在 .bak 文件中启用代理)。
  • AUTO_CLOSE=OFF(如果 .bak 文件中的数据库采用 AUTO_CLOSE=ON)。
  • RECOVERY FULL(如果 .bak 文件中的数据库采用 SIMPLEBULK_LOGGED 恢复模式)。
  • 添加源 .bak 文件中不包含内存优化文件组,则会添加名为 XTP 的内存优化文件组。
  • 任何现有的内存优化文件组将重命名为 XTP。
  • SINGLE_USERRESTRICTED_USER 选项将转换为 MULTI_USER

的限制:

  • 根据损坏类型,有时可以还原已损坏的数据库的备份,但在修复损坏之前,不会创建自动备份。 确保在源 SQL 托管实例上运行 DBCC CHECKDB,并使用备份 WITH CHECKSUM 来避免此问题。
  • 无法在 SQL 托管实例上还原包含本文档所述的任何限制的数据库的 .BAK 文件(例如 FILESTREAMFILETABLE 对象)。
  • 无法还原包含多个备份集的 .BAK 文件。
  • 无法还原包含多个日志文件的 .BAK 文件。
  • 在“常规用途”实例上,无法还原包含 8 TB 以上的数据库、活动的内存中 OLTP 对象或每个实例有 280 个以上的文件的备份。
  • 在“业务关键”实例上,无法还原包含 4 TB 以上的数据库或内存中 OLTP 对象,且总大小超过资源限制中所述大小的备份。 有关 restore 语句的信息,请参阅 RESTORE 语句

重要

这些限制同样适用于内置的时间点还原操作。 例如,在“业务关键”实例上,无法还原大于 4 TB 的“常规用途”数据库。 在“常规用途”实例上,无法还原包含内存中 OLTP 文件或 280 个以上的文件的“业务关键”数据库。

服务代理

仅在 Azure SQL 托管实例之间支持跨实例 Service Broker 消息交换:

  • CREATE ROUTE:不能将 CREATE ROUTELOCAL 以外的 ADDRESS 或其他 SQL 托管实例的 DNS 名称一起使用。 端口始终为 4022。
  • ALTER ROUTE:不能将 ALTER ROUTELOCAL 以外的 ADDRESS 或其他 SQL 托管实例的 DNS 名称一起使用。 端口始终为 4022。

支持传输安全性,不支持对话安全性:

  • 不支持 CREATE REMOTE SERVICE BINDING

Service Broker 默认处于启用状态,并且无法禁用。 不支持以下 ALTER DATABASE 选项:

  • ENABLE_BROKER
  • DISABLE_BROKER

存储过程、函数和触发器

  • “常规用途”层级不支持 NATIVE_COMPILATION
  • 不支持以下 sp_configure 选项:
    • allow polybase export
    • allow updates
    • filestream_access_level
    • remote access
    • remote data archive
    • remote proc trans
    • scan for startup procs
  • 以下 sp_configure 选项将被忽略,且不起作用:
    • Ole Automation Procedures
  • sp_execute_external_scripts 仅支持用于 SQL MI 的机器学习服务,否则 sp_execute_external_scripts 不可用于 SQL 托管实例。 请参阅 sp_execute_external_scripts
  • 不支持 xp_cmdshell。 请参阅 xp_cmdshell
  • 不支持 Extended stored procedures,其中包括 sp_addextendedprocsp_dropextendedproc。 此功能不受支持,因为它位于 SQL Server 的弃用路径中。 有关详细信息,请参阅扩展存储过程
  • 不支持 sp_attach_dbsp_attach_single_file_dbsp_detach_db。 请参阅 sp_attach_dbsp_attach_single_file_dbsp_detach_db

系统函数和变量

以下变量、函数和视图返回不同的结果:

  • SERVERPROPERTY('EngineEdition') 返回值 8。 此属性唯一标识 SQL 托管实例。 请参阅 SERVERPROPERTY
  • SERVERPROPERTY('InstanceName') 返回 NULL,因为 SQL Server 存在的实例概念并不适用于 SQL 托管实例。 请参阅 SERVERPROPERTY('InstanceName')
  • @@SERVERNAME 返回完整的 DNS“可连接”名称,例如 my-managed-instance.wcus17662feb9ce98.database.windows.net。 请参阅 @@SERVERNAME
  • SYS.SERVERS 返回完整的 DNS“可连接”名称,例如,为属性“name”和“data_source”返回 myinstance.domain.database.windows.net。请参阅 SYS.SERVERS
  • @@SERVICENAME 返回 NULL,因为 SQL Server 存在的服务概念并不适用于 SQL 托管实例。 请参阅 @@SERVICENAME
  • 支持 SUSER_ID。 如果 Azure AD 登录名不在 sys.syslogins 中,则返回 NULL。 请参阅 SUSER_ID
  • 不支持 SUSER_SID。 将返回错误数据,这是暂时性的已知问题。 请参阅 SUSER_SID

环境约束

子网

  • 在部署 SQL 托管实例的子网中,无法放置其他任何资源(例如虚拟机)。 请使用其他子网部署这些资源。
  • 子网必须有足够数量的可用 IP 地址。 子网中至少要有 32 个 IP 地址。
  • 可以在某个区域部署的 vCore 数和实例类型存在一些约束和限制
  • 有一个必须应用于子网的网络配置

VNET

  • 可以使用资源模型部署 VNet。 经典模型不支持 VNet 部署。
  • 创建 SQL 托管实例后,不支持将 SQL 托管实例或 VNet 移到另一个资源组或订阅。
  • 对于在 2020 年 9 月 22 日之前创建的虚拟群集中托管的 SQL 托管实例,VNet 全球对等互连不受支持。 可以通过 VNet 网关经由 ExpressRoute 或 VNet-to-VNet 连接到这些资源。

故障转移组

系统数据库不会复制到故障转移组中的辅助实例。 因此,除非在辅助实例上手动创建系统数据库中的对象,否则依赖于该对象的方案不可能在辅助实例上出现。

TEMPDB

  • 在“常规用途”层上,tempdb 系统数据库的最大文件大小不能超过每核心 24 GB。 在“业务关键”层级上,最大 tempdb 大小根据 SQL 托管实例存储大小受到限制。 在“常规用途”层级上,Tempdb 日志文件大小限制为 120 GB。 如果某些查询需要在 tempdb 中为每个核心提供 24 GB 以上的空间,或者生成 120 GB 以上的日志数据,则这些查询可能会返回错误。
  • Tempdb 始终拆分为 12 个数据文件:1 个主要数据文件(也称为主文件)和 11 个非主要数据文件。 无法更改文件结构,并且无法将新文件添加到 tempdb
  • 不支持内存优化的 tempdb 元数据(一种新的 SQL Server 2019 内存中数据库功能)。
  • 重启或故障转移后,无法在 tempdb 中自动创建在模型数据库中已创建的对象,因为 tempdb 不能从模型数据库中获取其初始对象列表。 每次重启或故障转移后,必须在 tempdb 中手动创建对象。

MSDB

SQL 托管实例中的 msdb 系统数据库的以下架构必须由其相应的预定义角色拥有:

重要

客户更改预定义的角色名称、架构名称和架构所有者将会影响服务的正常运行。 如果对这些属性进行任何更改,在检测到此类更改后会立即将其还原到预定义值,或者最迟在下次更新服务时还原,以确保服务正常运行。

错误日志

SQL 托管实例将详细信息放在错误日志中。 有很多内部系统事件记录在错误日志中。 使用自定义过程读取已筛选出某些不相关条目的错误日志。 有关详细信息,请参阅 SQL 托管实例 - sp_readmierrorlog 或用于 Azure Data Studio 的 SQL 托管实例扩展(预览版)

不支持更改保留的错误日志数。

后续步骤