Triệu chứng
Giả định rằng bạn đang sử dụng Microsoft SQL Server 2012, 2014 hoặc 2016. Khi bạn sao lưu cơ sở dữ liệu vào URL dịch vụ lưu trữ của Microsoft Azure blob, thao tác này có thể không thành công và bạn sẽ nhận được thông báo lỗi sau đây ở phía máy khách và trong Nhật ký lỗi SQL Server.
Lỗi máy khách SQL Server
Msg 3271, mức 16, bang 1, hàm Linenumber Lỗi I/O không khôi phục được xảy ra trên tệp "https://<BlobStorageServerName>. <blob.core.windows.net/sqlbackup/DB_Backup_Name. Bak>" sao lưu vào URL nhận được ngoại lệ từ điểm cuối từ xa. Thông báo ngoại lệ: kết nối cơ sở đã được đóng: một lỗi không mong muốn xảy ra khi nhận. Msg 3013, mức 16, bang 1, hàm Linenumber CƠ sở dữ liệu sao lưu đang chấm dứt thông thường.
Nhật ký lỗi 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.
Lỗi này xảy ra nếu máy chủ của bạn kích hoạt giao thức bảo mật Layer (TLS) phiên bản 1,2 với sổ đăng ký sau đây.
Tên khóa đăng ký:
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2 \ Client Giá trị 0 Tên: đã bật Loại: REG_DWORD Dữ liệu: 0x1
Giải pháp
Sự cố này đã được khắc phục trong các bản Cập Nhật tích lũy sau đây cho SQL Server 2014 và 2016:
Cập Nhật tích lũy 7 cho SQL Server 2016 RTM
Mỗi bản Cập Nhật tích lũy mới cho SQL Server chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản Cập Nhật tích lũy trước đó. Kiểm tra các bản Cập Nhật tích lũy mới nhất cho SQL Server:
Giải pháp thay thế cho SQL Server 2012
Sự cố này xảy ra nếu khuôn khổ .net đã cài đặt có ưu tiên cho TLS 1,0 mặc dù nó hỗ trợ TLS 1,2.
Không có bản sửa lỗi nào sẵn dùng cho SQL Server 2012. Để giải quyết sự cố này cho SQL Server 2012 để bật mã mật mã mạnh, bạn có thể thực hiện các thao tác sau:
-
Sao lưu sổ đăng ký
-
Mở trình soạn thảo sổ đăng ký và dẫn hướng đến các khóa đăng ký phụ sau đây: Hklm\software\wow6432node\microsoft.netframework\ và HKLM\software\microsoft.NETFramework\
-
Bên dưới mỗi phím này, hãy khóa các số phiên bản (như v 4,5, v 4.5.1) tồn tại. Thêm một giá trị DWORD có tên là Schusestrongcrypto với giá trị 1 cho mỗi phiên bản.
-
Bên dưới HKLM\Software\Microsoft.NetFramework, tên khóa không phải là chính xác 4,5 hoặc 4.5.1. Chủ yếu là chúng sẽ bắt đầu từ v 2.0 xxx, v 3.0 xxx và v 4.0 xxx. Giá trị DWORD có tên ' SchUseStrongCrypto ' với giá trị 1 nên được thêm vào cho tất cả các phiên bản sẵn dùng.
-
Khởi động lại máy chủ SQL.
YùBạn cũng có thể thử cài đặt .NET Framework 4,8. Theo mặc định, .NET Framework 4,7 và các phiên bản mới hơn được cấu hình để sử dụng TLS 1,2 và cho phép các kết nối bằng TLS 1,1 hoặc TLS 1,0.
Tham khảo
Tìm hiểu về thuật ngữmà Microsoft sử dụng để mô tả các bản cập nhật phần mềm.
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".