症状
假设您使用的是 Microsoft SQL Server 2012、2014或2016。 将数据库备份到 Microsoft Azure Blob 存储服务 URL 时,操作可能会失败,并且你将在客户端和 SQL Server 错误日志中收到以下错误消息。
SQL Server 客户端错误
消息3271、级别16、状态1、行 LineNumber 文件 "https://" 上出现不可恢复的 i/o 错误:> blob.core.windows.net/sqlbackup/<DB_Backup_Name 的 <> "备份到 URL 收到来自远程终结点的异常。 异常消息:基础连接已关闭:接收时发生意外错误。 消息3013、级别16、状态1、行 LineNumber 备份数据库异常终止。
SQL Server 错误日志
<DateTime> ======== BackupToUrl Initiated =========
<DateTime> Inputs: Backup = True, PageBlob= True, URI = https://<BlobStorageServerName>.blob.core.windows.net/sqlbackup/<DB_Backup_Name.bak>, Acct= lbtesting2096, Key= KeyValue, FORMAT= False, Instance Name = MSSQLSERVER, DBName = <DB_Name> LogPath = C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log
<DateTime> Process Id: 3668
<DateTime> Time for Initialization = 202.7451 ms
<DateTime> BackupToUrl Client is getting configuration from SqlServr
<DateTime> Time for Handshake and VDI config = 31.2507 ms
<DateTime> Time for Get BlobRef = 15.6263 ms
<DateTime> Time for - EXCEPTION Get Fetchattributes = 45364.4979 ms
<DateTime> An exception occurred during communication with Azure Storage, exception information follows
<DateTime> Exception Info: The underlying connection was closed: An unexpected error occurred on a receive.
<DateTime> Stack: at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](StorageCommandBase`1 cmd, IRetryPolicy policy, OperationContext operationContext)
at BackupToUrl.Program.MainInternal(String[] args)
<DateTime> The Active queue had 1 requests until we got a clear error.
如果你的客户端服务器通过以下注册表启用了传输层安全(TLS)协议版本1.2,则会发生此错误。
注册表项名称:
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2 \ 客户端 值0 名称:已启用 类型: REG_DWORD 数据:0x1
解决方案
在 SQL Server 2014 和2016的以下累积更新中修复了此问题:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
SQL Server 2012 的解决方法
如果安装的 .Net Framework 具有适用于 TLS 1.0 的首选项(尽管它支持 TLS 1.2),则会出现此问题。
没有适用于 SQL Server 2012 的修补程序。 若要解决 SQL Server 2012 启用强加密的此问题,可以执行以下操作:
-
备份注册表
-
打开注册表编辑器,然后导航到以下注册表子项: HKLM\software\Wow6432Node\Microsoft.NETFramework\ 和 HKLM\software\microsoft.NETFramework\
-
在这些项的每个项下,有一个版本号(如 v 4.5,v 4.5.1)存在。 为每个版本添加一个名为 SchUseStrongCrypto 的 DWORD 值,值为 1 。
-
在 "HKLM\Software\Microsoft.NetFramework" 下,密钥名称不必正好是4.5 或4.5.1。 大多数情况下,它们将从 v XXX xxx,v 3.0 xxx 和 v 4.0 xxx开始。 应为所有可用版本添加值为1的名为 "SchUseStrongCrypto" 的 DWORD 值。
-
重新启动 SQL Server 计算机。
提示您也可以尝试安装 .Net Framework 4.8。 默认情况下,.NET Framework 4.7 和更高版本配置为使用 TLS 1.2 并允许使用 TLS 1.1 或 TLS 1.0 的连接。
参考
了解 Microsoft 用于描述软件更新的 术语。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。