Symptomy
Załóżmy, że korzystasz z programu Microsoft SQL Server 2012, 2014 lub 2016. Podczas tworzenia kopii zapasowej bazy danych w adresie URL usługi Magazyn obiektów blob platformy Microsoft Azure operacja może się nie udać i zostaną wyświetlone następujące komunikaty o błędach zarówno po stronie klienta, jak i w dzienniku błędów programu SQL Server.
Błąd klienta programu SQL Server
Msg 3271, poziom 16, stan 1, wiersz LineNumber Wystąpił nieodwracalny błąd wejścia/wyjścia w pliku "https://<BlobStorageServerName>. blob.core.windows.net/sqlbackup/<DB_Backup_Name. bak>" Backup to URL odebrał wyjątek ze zdalnego punktu końcowego. Komunikat wyjątku: Połączenie podstawowe zostało przerwane: Wystąpił nieoczekiwany błąd podczas odbierania. Msg 3013, poziom 16, stan 1, wiersz LineNumber Wykonywanie kopii zapasowej bazy danych jest nienormalnie zakończone.
Dziennik błędów programu 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.
Ten błąd występuje, jeśli serwer klienta włączył protokół TLS ( Transport Layer Security) w wersji 1,2 z następującym rejestrem.
Nazwa klucza rejestru:
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2 \ klient Wartość 0 Nazwa: włączone Wpisz: REG_DWORD Dane: 0x1
Rozwiązanie
Ten problem został rozwiązany w następujących zbiorczych aktualizacjach programów SQL Server 2014 i 2016:
Zbiorcza aktualizacja 7 dla programu SQL Server 2016 RTM
Zbiorcza aktualizacja 4 dla programu SQL Server 2016 z dodatkiem SP1
Zbiorcza aktualizacja 5 dla programu SQL Server 2014 z dodatkiem SP2
Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla programu SQL Server:
Najnowsza Zbiorcza aktualizacja dla programu SQL Server 2016
Najnowsza Zbiorcza aktualizacja dla programu SQL Server 2014
Obejście dotyczące programu SQL Server 2012
Ten problem występuje, jeśli zainstalowany program .NET Framework ma preferencję dla protokołu TLS 1,0, ale obsługuje protokół TLS 1,2.
Nie jest dostępna poprawka dla programu SQL Server 2012. Aby obejść ten problem dotyczący programu SQL Server 2012 umożliwiającego silne Kryptografia, możesz wykonać następujące czynności:
-
Wykonywanie kopii zapasowej rejestru
-
Otwórz Edytor rejestru i przejdź do następujących podkluczy rejestru: HKLM\software\Wow6432Node\Microsoft.NETFramework\ i HKLM\software\microsoft.NETFramework\
-
W przypadku każdego z tych klawiszy podkluczy występują numery wersji (takie jak v 4.5, v 4.5.1). Dodaj wartość DWORD o nazwie SchUseStrongCrypto z wartością 1 dla każdej wersji.
-
W obszarze HKLM\Software\Microsoft.NetFramework nazwy kluczy nie muszą być równe 4,5 lub 4.5.1. Najczęściej rozpoczynają się one od v 2.0 XXX, v 3.0 XXX i v 4.0 XXX. Wartość DWORD o nazwie "SchUseStrongCrypto" z wartością 1 powinna zostać dodana dla wszystkich dostępnych wersji.
-
Uruchom ponownie komputer programu SQL Server.
WartoMożesz również spróbować zainstalować program .NET Framework 4,8. Program .NET Framework 4,7 i nowsze wersje są domyślnie skonfigurowane do korzystania z protokołu TLS 1,2 i zezwalają na połączenia przy użyciu protokołu TLS 1,1 lub TLS 1,0.
Informacje
Informacje o terminologiiużywanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".