SQL Server 与 Azure SQL 托管实例之间的 T-SQL 差异
适用于:Azure SQL 托管实例
本文汇总并解释了 Azure SQL 托管实例与 SQL Server 之间的语法和行为差异。
SQL 托管实例可与 SQL Server 数据库引擎高度兼容,且 SQL 托管实例支持大多数功能。
与 SQL Server 相比,SQL 托管实例中引入了一些 PaaS 限制,并且在行为方面有一些变化。 这些差异划分为以下几个类别:
- 可用性包括 Always-On 可用性组和备份方面的差异。
- 安全性包括审核、证书、凭据、加密提供程序、登录名和用户以及服务密钥和服务主密钥方面的差异。
- 配置包括缓冲池扩展、排序规则、兼容性级别、数据库镜像、数据库选项、SQL Server 代理以及表选项方面的差异。
- 功能包括 BULK INSERT/OPENROWSET、CLR、DBCC、分布式事务、已扩展事件、文件流和文件表、全文语义搜索、链接服务器、Polybase、复制、还原、Service Broker、存储过程、函数和触发器。
- 环境设置,例如 VNet 和子网配置。
其中的大多数功能都是体系结构约束,代表服务功能。
新功能中介绍了已在 SQL 托管实例中发现并且将来会解决的临时已知问题。
注意
Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。
可用性
AlwaysOn 可用性组
高可用性内置在 SQL 托管实例中,用户无法控制。 不支持以下语句:
- CREATE ENDPOINT … FOR DATABASE_MIRRORING
- CREATE AVAILABILITY GROUP
- ALTER AVAILABILITY GROUP
- DROP AVAILABILITY GROUP
- ALTER DATABASE 语句的 SET HADR 子句
备份
Azure SQL 托管实例包含自动备份,因此用户可以创建完整数据库 COPY_ONLY
备份。 不支持差异、日志和文件快照备份。
- 使用 SQL 托管实例,可以只将实例数据库备份到 Azure Blob 存储帐户:
- 仅支持
BACKUP TO URL
。 - 不支持
FILE
、TAPE
和备份设备。
- 仅支持
- 支持大多数常规
WITH
选项。COPY_ONLY
是必需的。FILE_SNAPSHOT
和CREDENTIAL
不受支持。- 不支持磁带选项
REWIND
、NOREWIND
、UNLOAD
和NOUNLOAD
。 - 不支持日志特定的选项
NORECOVERY
、STANDBY
和NO_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。
安全性
审核
在审核方面,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 CERTIFICATE 和 BACKUP CERTIFICATE。
解决方法:请勿在创建证书备份后再还原该备份,而应先获取证书二进制文件内容和私钥,将其存储为 .sql 文件,然后从二进制文件创建证书:
CREATE CERTIFICATE
FROM BINARY = asn_encoded_certificate
WITH PRIVATE KEY (<private_key_options>);
凭据
支持托管标识、Azure Key Vault 和 SHARED ACCESS SIGNATURE
标识。 不支持 Windows 用户。
请参阅 CREATE CREDENTIAL 和 ALTER CREDENTIAL。
加密提供程序
由于 SQL 托管实例无法访问文件,因此无法创建加密提供程序:
- 不支持
CREATE CRYPTOGRAPHIC PROVIDER
。 请参阅 CREATE CRYPTOGRAPHIC PROVIDER。 - 不支持
ALTER CRYPTOGRAPHIC PROVIDER
。 请参阅 ALTER CRYPTOGRAPHIC PROVIDER。
登录名和用户
支持使用
FROM CERTIFICATE
、FROM ASYMMETRIC KEY
和FROM SID
创建的 SQL 登录名。 请参阅 CREATE LOGIN。 服务器主体(登录名)是在服务器级别创建的,用户(数据库主体)是在数据库级别创建的。 支持使用 CREATE LOGIN 语法创建的 Microsoft Entra 登录名和使用 CREATE USER FROM LOGIN 语法创建的 Microsoft Entra 用户。 创建用户并指定FROM LOGIN
时,该用户将与登录名关联,并继承分配给它的服务器角色和权限。SQL 托管实例支持使用语法
CREATE USER [AADUser/AAD group] FROM EXTERNAL PROVIDER
基于 Microsoft Entra 标识创建包含的数据库用户。 以这种方式创建的用户不与服务器主体关联,即使master
数据库中存在同名的服务器主体。不支持使用
CREATE LOGIN ... FROM WINDOWS
语法创建的 Windows 登录名。 使用 Microsoft Entra 登录名和用户。实例的 Microsoft Entra 管理员具有不受限制的管理员权限。
某些功能不支持在跨实例交互中使用 Microsoft Entra 登录名,而仅支持在单个 SQL 托管实例中使用,例如 SQL Server 复制。 链接服务器功能支持使用 Microsoft Entra 服务器主体(登录名)进行跨实例身份验证。
不支持将映射到 Microsoft Entra 组的 Microsoft Entra 登录名设置为数据库所有者。 Microsoft Entra 组的成员可以是数据库所有者,即使尚未在数据库中创建登录名。
支持使用其他 Microsoft Entra 主体(如 EXECUTE AS 子句)模拟 Microsoft Entra 服务器级别主体。 EXECUTE AS 限制如下:
当名称与登录名不同时,Microsoft Entra 用户不支持 EXECUTE AS USER。 例如,如果用户是通过语法
CREATE USER [myAadUser] FROM LOGIN [john@contoso.com]
创建的,则会尝试通过EXEC AS USER = myAadUser
进行模拟。 基于 Microsoft Entra 登录名创建 USER 时,请将 user_name 指定为与 LOGIN 中相同的 login_name。只有属于
sysadmin
角色的 SQL 服务器级别主体(登录名)才能执行以下针对 Microsoft Entra 主体的操作:- EXECUTE AS USER
- EXECUTE AS LOGIN
若要使用 EXECUTE AS 语句模拟用户,需要将用户直接映射到 Microsoft Entra 登录名。 即使调用方对指定用户名具有模拟权限,也无法有效使用 EXECUTE AS 语句模拟映射到 Microsoft Entra 服务器主体中 Microsoft Entra 组的成员用户。
SQL 托管实例中的 Microsoft Entra 用户在使用 SSMS V18.4 或更高版本或 SqlPackage 时,可以使用 bacpac 文件进行数据库导出/导入。
- 使用数据库 bacpac 文件时,可以使用以下配置:
- 在同一 Microsoft Entra 域的不同托管实例之间导出/导入数据库。
- 在同一 Microsoft Entra 域中将数据库从 SQL 托管实例导出并导入 SQL 数据库。
- 在同一 Microsoft Entra 域中从 SQL 数据库导出数据库并导入 SQL 托管实例。
- 将数据库从 SQL 托管实例导出以及将其导入 SQL Server(2012 或更高版本)。
- 在此配置中,所有 Microsoft Entra 用户都创建为无登录名的 SQL Server 数据库主体(用户)。 用户类型为
SQL
,在sys.database_principals
中以SQL_USER
的形式呈现。 其权限和角色保留在 SQL Server 数据库元数据中,可以用于模拟。 但是,不能使用它们的凭据来访问和登录 SQL Server。
- 在此配置中,所有 Microsoft Entra 用户都创建为无登录名的 SQL Server 数据库主体(用户)。 用户类型为
- 使用数据库 bacpac 文件时,可以使用以下配置:
只有服务器级别主体登录名(由 SQL 托管实例预配进程创建)、服务器角色的成员(如
securityadmin
或sysadmin
)或者在服务器级别拥有 ALTER ANY LOGIN 权限的其他登录名可以在 SQL 托管实例的master
数据库中创建 Microsoft Entra 服务器主体(登录名)。必须为基于 SQL 身份验证的登录名分配
sysadmin
角色,以便为 Microsoft Entra 标识创建登录名。登录名必须是托管Azure SQL 托管实例的同一 Microsoft Entra 租户的成员。
从 SQL Server Management Studio 18.0 预览版 5 开始,Microsoft Entra 服务器主体(登录名)将显示在对象资源管理器中。
在实例上启用 Microsoft Entra 管理员后,系统会自动创建具有 sysadmin 访问级别的服务器主体。
在身份验证期间,将应用以下顺序来解析身份验证主体:
- 如果 Microsoft Entra 帐户直接映射到 Microsoft Entra 登录名(在
sys.server_principals
中显示为类型“E”),则授予访问权限并应用该登录名的权限。 - 如果 Microsoft Entra 帐户是映射到 Microsoft Entra 登录名(在
sys.server_principals
中显示为类型“X”)的组成员,则授予访问权限并应用该登录名的权限。 - 如果 Microsoft Entra 帐户直接映射到数据库中的 Microsoft Entra 用户(在
sys.database_principals
中显示为类型“E”),则授予访问权限并应用 Microsoft Entra 数据库用户的权限。 - 如果 Microsoft Entra 帐户是映射到数据库中 Microsoft Entra 用户(在
sys.database_principals
中显示为类型“X”)的 Microsoft Entra 组成员,则授予访问权限并应用 Microsoft Entra 组用户的权限。
- 如果 Microsoft Entra 帐户直接映射到 Microsoft Entra 登录名(在
服务密钥和服务主密钥
- 不支持主密钥备份(由 SQL 数据库服务管理)。
- 不支持主密钥还原(由 SQL 数据库服务管理)。
- 不支持服务主密钥备份(由 SQL 数据库服务管理)。
- 不支持服务主密钥还原(由 SQL 数据库服务管理)。
配置
缓冲池扩展
- 不支持缓冲池扩展。
- 不支持
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION
。 请参阅 ALTER SERVER CONFIGURATION。
排序规则
默认实例排序规则为 SQL_Latin1_General_CP1_CI_AS
并可以被指定为创建参数。 请参阅排序规则。
兼容级别
- 支持的兼容级别:100、110、120、130、140、150 和 160。
- 不支持低于 100 的兼容级别。
- 新数据库的默认兼容级别为 150。 对于已还原的数据库,如果其兼容级别在还原之前为 100 或更高,则还原后保持不变。
请参阅 ALTER DATABASE 兼容级别。
数据库镜像
不支持数据库镜像。
- 不支持
ALTER DATABASE SET PARTNER
和SET WITNESS
选项。 - 不支持
CREATE ENDPOINT … FOR DATABASE_MIRRORING
。
有关详细信息,请参阅 ALTER DATABASE SET PARTNER 和 SET WITNESS 以及 CREATE ENDPOINT … FOR DATABASE_MIRRORING。
数据库选项
- 不支持多个日志文件。
- “常规用途”服务层级不支持内存中对象。
- 每个“常规用途”实例限制为 280 个文件,这意味着,每个数据库最多只能有 280 个文件。 “常规用途”层级中的数据文件和日志文件都会计入此限制。 “业务关键”层级支持每个数据库 32,767 个文件。
- 数据库中不能有包含 FILESTREAM 数据的文件组。 如果
.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。
- 用户必须直接映射到 Microsoft Entra 服务器登录名,才能创建、修改或执行 SQL 代理作业。 未直接映射的用户(例如,属于有权创建、修改或执行 SQL 代理作业的 Microsoft Entra 组的用户)将无法有效地执行这些操作。 这是由于 SQL 托管实例模拟和 EXECUTE AS 限制的缘故。
- 不支持主/目标 (MSX/TSX) 作业的多服务器管理功能。
有关 SQL Server 代理的信息,请参阅 SQL Server 代理。
表
不支持以下表类型:
- FILESTREAM
- FILETABLE
- EXTERNAL TABLE(PolyBase 除外)
- MEMORY_OPTIMIZED(仅在“常规用途”层级中不受支持)
若要了解如何创建和更改表,请参阅 CREATE TABLE 和 ALTER 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 文件夹,因此存在以下约束:
- 仅支持
CREATE ASSEMBLY FROM BINARY
。 请参阅 CREATE ASSEMBLY FROM BINARY。 - 不支持
CREATE ASSEMBLY FROM FILE
。 请参阅 CREATE ASSEMBLY FROM FILE。 ALTER ASSEMBLY
不能引用文件。 请参阅 ALTER ASSEMBLY。
数据库邮件 (db_mail)
sp_send_dbmail
无法使用 @file_attachments 参数发送附件。 在此过程中无法访问本地文件系统和外部共享或 Azure Blob 存储。- 请参阅与
@query
参数和身份验证相关的已知问题。
DBCC
SQL 托管实例不支持 SQL Server 中启用的未记录 DBCC 语句。
- 仅支持有限数量的全局跟踪标志。 不支持会话级
Trace flags
。 请参阅跟踪标志。 - DBCC TRACEOFF 和 DBCC TRACEON 使用有限数量的全局跟踪标志。
- 无法使用带有 REPAIR_ALLOW_DATA_LOSS、REPAIR_FAST 和 REPAIR_REBUILD 选项的 DBCC CHECKDB,因为无法在
SINGLE_USER
模式中设置数据库 - 请参阅 ALTER DATABASE 差异。 潜在的数据库损坏将由 Azure 支持团队负责处理。 如果发生数据库损坏,请联系 Azure 支持人员。
分布式事务
跨托管实例的基于 T-SQL 和 .NET 的分布式事务已正式发布。
扩展事件
不支持对扩展事件 (XEvent) 使用某些特定于 Windows 的目标:
- 不支持
etw_classic_sync
目标。 在 Azure Blob 存储中存储.xel
文件。 请参阅 etw_classic_sync 目标。 - 不支持
event_file
目标。 在 Azure Blob 存储中存储.xel
文件。 请参阅 event_file 目标。
FILESTREAM 和 FileTable
- 不支持 FILESTREAM 数据。
- 数据库中不能有包含
FILESTREAM
数据的文件组。 - 不支持
FILETABLE
。 - 表不能采用
FILESTREAM
类型。 - 不支持以下函数:
GetPathLocator()
GET_FILESTREAM_TRANSACTION_CONTEXT()
PathName()
GetFileNamespacePat)
FileTableRootPath()
有关详细信息,请参阅 FILESTREAM 和文件表。
全文语义搜索
不支持语义搜索。
链接的服务器
SQL 托管实例中的链接服务器支持有限数量的目标:
- 支持的目标包括 SQL 托管实例、SQL 数据库、Azure Synapse SQL 无服务器和专用池,以及 SQL Server 实例。
- 不支持的目标为文件、Analysis Services 和其他 RDBMS。 尝试使用
BULK INSERT
或OPENROWSET
作为文件导入的替代方法从 Azure Blob 存储中进行本机 CSV 导入,或尝试使用 Azure Synapse Analytics 中的无服务器 SQL 池加载文件。
操作:
- 支持使用
sp_dropserver
删除链接服务器。 请参阅 sp_dropserver。 OPENROWSET
函数只能用于在 SQL Server 实例上执行查询。 它们可以是托管的、位于本地或位于虚拟机中。 请参阅 OPENROWSET。- OPENDATASOURCE 函数只能用于在 SQL Server 实例上执行查询。 它们可以是托管的、位于本地或位于虚拟机中。 示例为
SELECT * FROM OPENDATASOURCE('SQLNCLI', '...').AdventureWorks2022.HumanResources.Employee
。 仅支持将SQLNCLI
、SQLNCLI11
、SQLOLEDB
和MSOLEDBSQL
值用作提供程序。 已从 SQL Server 2022 和 SQL Server Management Studio 19 (SSMS) 中删除 SQL Server Native Client(通常缩写为 SNAC)。 不建议在新的开发中使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。 请在此后切换为使用新版 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新版的 Microsoft OLE DB Driver for SQL Server。 - 链接服务器不能用于从网络共享读取文件(Excel、CSV)。 尝试使用从 Azure Blob 存储读取 CSV 文件的 BULK INSERT、OPENROWSET,或使用引用 Synapse Analytics 中的无服务器 SQL 池的链接服务器。
Azure SQL 托管实例上的链接服务器支持 SQL 身份验证和 Microsoft Entra 身份验证。
PolyBase
借助 Azure SQL 托管实例的数据虚拟化,可以对存储在 Azure Data Lake Storage Gen2 或 Azure Blob 存储的文件中的数据执行 Transact-SQL (T-SQL) 查询,并使用联接将其与本地存储的关系数据相结合。 直接支持 (CSV) 文件格式的 Parquet 和分隔文本。 通过指定 CSV 文件格式(其中的查询以单独的行形式返回每个文档),间接支持 JSON 文件格式。 可以使用 JSON_VALUE
和 OPENJSON
进一步分析行。 有关 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 托管实例,但存在一些约束:
有关配置事务复制的详细信息,请参阅以下教程:
RESTORE 语句
- 支持的语法:
RESTORE DATABASE
RESTORE FILELISTONLY
RESTORE HEADERONLY
RESTORE LABELONLY
RESTORE VERIFYONLY
- 不支持的语法:
RESTORE LOGONLY
RESTORE REWINDONLY
- 来源:
FROM URL
(Azure Blob 存储)是唯一受支持的选项。- 不支持
FROM DISK
/TAPE
/备份设备。 - 不支持备份集。
- 不支持
WITH
选项。 还原尝试(包括WITH
,如DIFFERENTIAL
、STATS
、REPLACE
等)将失败。
数据库还原操作是异步的,并且可以在 Azure SQL 托管实例中重试。 如果连接失败或超时过期,可能会在 SSMS 中得到一个错误。 Azure SQL 托管实例会在后台继续尝试还原数据库,并且你可以使用 sys.dm_exec_requests 和 sys.dm_operation_status 动态管理视图来跟踪还原过程的进度。
将设置或重写以下数据库选项,以后无法更改:
NEW_BROKER
(如果未在 .bak 文件中启用代理)。ENABLE_BROKER
(如果未在 .bak 文件中启用代理)。AUTO_CLOSE=OFF
(如果 .bak 文件中的数据库采用AUTO_CLOSE=ON
)。RECOVERY FULL
.bak 文件中的数据库是否具有SIMPLE
或BULK_LOGGED
恢复模式。- 添加源 .bak 文件中不包含内存优化文件组,则会添加名为 XTP 的内存优化文件组。
- 任何现有的内存优化文件组将重命名为 XTP。
SINGLE_USER
和RESTRICTED_USER
选项将转换为MULTI_USER
。
的限制:
- 根据损坏类型,有时可以还原损坏数据库的备份,但在修复损坏之前,不会进行自动备份。 确保在源 SQL 托管实例上运行
DBCC CHECKDB
,并使用备份WITH CHECKSUM
来避免此问题。 - 无法在 SQL 托管实例上还原包含本文档所述任何限制的数据库的
.BAK
文件(例如FILESTREAM
或FILETABLE
对象)。 - 无法还原包含多个备份集的
.BAK
文件。 - 无法还原包含多个日志文件的
.BAK
文件。 - 在“常规用途”实例上,无法还原包含 8 TB 以上的数据库、活动的内存中 OLTP 对象或每个实例有 280 个以上的文件的备份。
- 无法在业务关键实例上还原包含 4 TB 以上数据库的备份,或总大小超过资源限制中所述大小的内存中 OLTP 对象的备份。 有关 restore 语句的信息,请参阅 RESTORE 语句。
重要
这些限制同样适用于内置的时间点还原操作。 例如,在“业务关键”实例上,无法还原大于 4 TB 的“常规用途”数据库。 在“常规用途”实例上,无法还原包含内存中 OLTP 文件或 280 个以上的文件的“业务关键”数据库。
服务代理
仅在 Azure SQL 托管实例之间支持跨实例 Service Broker 消息交换:
CREATE ROUTE
:不能将CREATE ROUTE
与LOCAL
以外的ADDRESS
或其他 SQL 托管实例的 DNS 名称一起使用。 端口始终为 4022。ALTER ROUTE
:不能将ALTER ROUTE
与LOCAL
以外的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
。 请参阅 sp_execute_external_scripts。 - 不支持
xp_cmdshell
。 请参阅 xp_cmdshell。 - 不支持
Extended stored procedures
,其中包括sp_addextendedproc
和sp_dropextendedproc
。 此功能不受支持,因为它位于 SQL Server 的弃用路径中。 有关详细信息,请参阅扩展存储过程。 - 不支持
sp_attach_db
、sp_attach_single_file_db
和sp_detach_db
。 请参阅 sp_attach_db、sp_attach_single_file_db 和 sp_detach_db。
系统函数和变量
以下变量、函数和视图返回不同的结果:
SERVERPROPERTY('EngineEdition')
返回值 8。 此属性唯一标识 SQL 托管实例。 请参阅 SERVERPROPERTY。SERVERPROPERTY('InstanceName')
返回 NULL,因为 SQL Server 存在的实例概念并不适用于 SQL 托管实例。 请参阅 SERVERPROPERTY('InstanceName')。@@SERVERNAME
返回完整的 DNS“可连接”名称,例如my-managed-instance.wcus17662feb9ce98.database.chinacloudapi.cn
。 请参阅 @@SERVERNAME。SYS.SERVERS
返回完整的 DNS“可连接”名称,例如,为属性“name”和“data_source”返回myinstance.domain.database.chinacloudapi.cn
。请参阅 SYS.SERVERS。@@SERVICENAME
返回 NULL,因为 SQL Server 存在的服务概念并不适用于 SQL 托管实例。 请参阅 @@SERVICENAME。- 支持
SUSER_ID
。 如果 Microsoft Entra 登录名不在sys.syslogins
中,则返回 NULL。 请参阅 SUSER_ID。 - 不支持
SUSER_SID
。 将返回错误数据,这是暂时性的已知问题。 请参阅 SUSER_SID。
环境约束
子网
- 在部署 SQL 托管实例的子网中,不能放置其他任何资源(例如虚拟机)。 请使用其他子网部署这些资源。
- 子网必须有足够数量的可用 IP 地址。 子网中至少要有 32 个 IP 地址。
- 可以在某个区域部署的 vCore 数和实例类型存在一些约束和限制。
- 有一个必须应用于子网的网络配置。
虚拟网络
- 可以使用资源模型部署虚拟网络。 经典模型不支持虚拟网络 (VNet) 部署。
- 创建 SQL 托管实例后,不支持将 SQL 托管实例或 VNet 移到另一个资源组或订阅。
- 对于 2020 年 9 月 22 日之前创建的虚拟群集中托管的 SQL 托管实例,不支持 VNet 全球对等互连。 可以通过 VPN 网关经由 ExpressRoute 或 VNet-to-VNet 连接到这些资源。
故障转移组
系统数据库不会复制到故障转移组中的辅助实例。 因此,除非在辅助实例上手动创建系统数据库中的对象,否则依赖于该对象的方案不可能在辅助实例上出现。
tempdb
- 在“常规用途”层上,
tempdb
系统数据库的最大文件大小不能超过每核心 24 GB。 在“业务关键”层级上,最大tempdb
大小根据 SQL 托管实例存储大小受到限制。 在“常规用途”层级上,tempdb
日志文件大小限制为 120 GB。 如果某些查询需要在tempdb
中为每个核心提供 24 GB 以上的空间,或者生成 120 GB 以上的日志数据,则这些查询可能会返回错误。 tempdb
始终拆分为 12 个数据文件:1 个主要数据文件(也称为master
)和 11 个非主要数据文件。 无法更改文件结构,也无法将新文件添加到tempdb
。- 不支持内存优化的 TempDB 元数据(一项新的 SQL Server 2019 内存中数据库功能)。
- 重启或故障转移后,无法在
tempdb
中自动创建在tempdb
数据库中已创建的对象,因为model
不能从model
数据库中获取其初始对象列表。 每次重启或故障转移后,必须在tempdb
中手动创建对象。
msdb
SQL 托管实例中的 msdb
系统数据库的以下架构必须由其相应的预定义角色拥有:
- 常规角色
- TargetServersRole
- 固定数据库角色
- SQLAgentUserRole
- SQLAgentReaderRole
- SQLAgentOperatorRole
- DatabaseMail 角色:
- DatabaseMailUserRole
- 集成服务角色:
- msdb
- db_ssisltduser
- db_ssisoperator
重要
客户更改预定义的角色名称、架构名称和架构所有者将会影响服务的正常运行。 如果对这些属性进行任何更改,在检测到此类更改后会立即将其还原到预定义值,或者最迟在下次更新服务时还原,以确保服务正常运行。
错误日志
SQL 托管实例将详细信息放在错误日志中。 有很多内部系统事件记录在错误日志中。 使用自定义过程读取已筛选出某些不相关条目的错误日志。 有关详细信息,请参阅 SQL 托管实例 - sp_readmierrorlog 或用于 Azure Data Studio 的 SQL 托管实例扩展(预览版)。
不支持更改保留的错误日志数。