Восстанавливал рабочую базу данных до вчерашнего состояния. Во время восстановления начал выдавать ошибку «ошибка чтения данных». Сама рабочая база зависла в состоянии восстановления. Попытка вывести из него запросом «restore database [name_db] with recovery» заканчивается другой ошибкой The database cannot be recovered because the log was not restored. Как восстановить хотябы какую то версию базы?
Полный текст первой ошибки:
System.Data.SqlClient.SqlError: Read on «E:\Другой обмен\SQLBase\Lombard2015\Lombard2015_backup_2017_11_02_230009_7349536.bak» failed: 23(Ошибка в данных (CRC).) (Microsoft.SqlServer.SmoExtended)
-
Вопрос задан
-
1038 просмотров
Сама рабочая база зависла в состоянии восстановления. Попытка вывести из него запросом «restore database [name_db] with recovery» заканчивается другой ошибкой The database cannot be recovered because the log was not restored.
То есть вы не можете закончить восстановление без журнала.
Восстанавливайте без него (NORECOVERY).
Пригласить эксперта
-
Показать ещё
Загружается…
22 сент. 2023, в 22:00
1000 руб./за проект
22 сент. 2023, в 21:27
300 руб./за проект
22 сент. 2023, в 19:59
5000 руб./за проект
Минуточку внимания
The log shipping backup job for one of our databases is failing with the error message:
Read on «D:\Data\Filename.mdf» failed: 1(failed to retrieve text for this error. Reason: 15105)
Attempting to run the job out of schedule (to see if this gleans any additional data) results in a failure with the same message.
What is the cause of this message and how would I resolve it?
Select @@VERSION
:
Microsoft SQL Server 2008 R2 (SP3) — 10.50.6220.0 (X64) Mar 19 2015
12:32:14 Copyright (c) Microsoft Corporation Standard Edition (64-bit)
on Windows NT 6.1 (Build 7601: Service Pack 1)
DB Compatibility Level: SQL Server 2008 (100)
Recovery model: Bulk-logged
Results of DBCC CHECKDB:
DBCC CHECKDB ('DatabaseName') WITH PHYSICAL_ONLY
reports:
DBCC results for 'DatabaseName'.
Msg 8966, Level 16, State 2, Line 1
Unable to read and latch page (1:2112497) with latch type SH. 1(failed to retrieve text for this error. Reason: 15105) failed.
Msg 8966, Level 16, State 2, Line 1
Unable to read and latch page (1:2112498) with latch type SH. 1(failed to retrieve text for this error. Reason: 15105) failed.
Msg 8966, Level 16, State 2, Line 1
Unable to read and latch page (1:2112499) with latch type SH. 1(failed to retrieve text for this error. Reason: 15105) failed.
Msg 8966, Level 16, State 2, Line 1
Unable to read and latch page (1:2112500) with latch type SH. 1(failed to retrieve text for this error. Reason: 15105) failed.
CHECKDB found 0 allocation errors and 4 consistency errors not associated with any single object.
Msg 2533, Level 16, State 1, Line 1
Table error: page (1:2112497) allocated to object ID 557349150, index ID 1, partition ID 72057601138884608, alloc unit ID 72057601177681920 (type In-row data) was not seen. The page may be invalid or may have an incorrect alloc unit ID in its header.
Msg 2533, Level 16, State 1, Line 1
Table error: page (1:2112498) allocated to object ID 557349150, index ID 1, partition ID 72057601138884608, alloc unit ID 72057601177681920 (type In-row data) was not seen. The page may be invalid or may have an incorrect alloc unit ID in its header.
Msg 2533, Level 16, State 1, Line 1
Table error: page (1:2112499) allocated to object ID 557349150, index ID 1, partition ID 72057601138884608, alloc unit ID 72057601177681920 (type In-row data) was not seen. The page may be invalid or may have an incorrect alloc unit ID in its header.
Msg 2533, Level 16, State 1, Line 1
Table error: page (1:2112500) allocated to object ID 557349150, index ID 1, partition ID 72057601138884608, alloc unit ID 72057601177681920 (type In-row data) was not seen. The page may be invalid or may have an incorrect alloc unit ID in its header.
CHECKDB found 0 allocation errors and 4 consistency errors in table 'schemaname.tablename' (object ID 557349150).
CHECKDB found 0 allocation errors and 8 consistency errors in database 'DatabaseName'.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (DatabaseName).
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Aprobator
26.04.10
✎
12:02
День добрый! Проблема следующая — стоит 1С 8.1 клиент — сервер.
Бэкап настроен непосредственно на SQL. Работало все без проблем.
Сегодня обнаружил, что не могу восстановить базу из бэкапа, причем пробовал на двух базах (хорошо вовремя заметил и бэкапнулся средствами 1С). Долго долго загружается и в конце концов пишет ошибка в данных CRC. Размер бэкапов где то 1.4 гиг. Первое что приходит в голову — надо проверить диск на ошибки — сделать его дефрагментацию и т.п.. Что — то кроме этого еще может быть? Сопутствующая инфа: на сервер 1С запущен в режиме отладки (мало ли).
Aprobator
26.04.10
✎
12:03
+(0) места на дисках хватает, в журналах ошибок нет.
shadow_sw
26.04.10
✎
12:04
сделай бэк со скуля в текущий момент и попробуй восстановить
Aprobator
26.04.10
✎
12:15
делал — не восстанавливается.
Masquerade
26.04.10
✎
12:17
Мда. Вот вам и надежность скуля.
el-gamberro
26.04.10
✎
12:17
Полный текст ошибки напиши сюда.
el-gamberro
26.04.10
✎
12:17
(4) да нет, скорее у кого-то руки кривые.
Aprobator
26.04.10
✎
12:27
дословно сейчас выложу. До 70 проц доходит и потом долго висит, пока ошибку выдает. Диск, на котором лежат архивы, просит дефрагментации.
el-gamberro
26.04.10
✎
12:28
ты resore в ssms делаешь?
el-gamberro
26.04.10
✎
12:28
*restore
Aprobator
26.04.10
✎
12:38
(8) да из дерева баз правой кнопкой мыши — Восттановить базу и т. д..
Описание ошибки:
Действие восстановления завершилось неудачно для объекта «Сервер» «SA-SERVER2»
(Microsoft.SqlServer.Smo)
Дополнительные сведения.
System.Data.SqlClient.SqlError: ошибка считывания с «путь к архивному файлу» (Ошибка в данных (CRC.)) »
(Microsoft.SqlServer.Smo)
PowerBoy
26.04.10
✎
12:41
scandisk сделай
Aprobator
26.04.10
✎
12:42
(11) ну я тож на это грешу (в (0) описано). Просто уточняю мало ли что еще.
Aprobator
26.04.10
✎
12:47
+(12) процесс то уже идет.
Aprobator
26.04.10
✎
12:48
кстати надо попробовать сделать архив на другой диск и восстановиться с него.
Aprobator
26.04.10
✎
17:37
вечером проверю точно, но похоже проблема в том, что 1 диск в raid сыпанулся.
Aprobator
27.04.10
✎
09:20
Если кому интересно — все так и оказалось — диск в рейде глюкнулся. Вывели его из работы и все стало опять нормально. Повезло что вовремя заметили.
Vladal
27.04.10
✎
10:01
(16) Это хоршо, когда вовремя заметили
Aprobator
27.04.10
✎
11:13
(17) не то слово — срочно пробежался по заданиям Скула и поставил галку Проверять целостность резервной копии.
Summary: In this blog, we are going to discuss SQL Database Cyclic Redundancy Check (CRC) error. Also, we will discuss the possible reasons behind the error, and scenarios in which you can encounter the CRC error. Plus, we will look at a few solutions to fix SQL CRC error. You may also try Stellar Repair for MS SQL software to repair and restore your SQL database in a few simple steps, without having to spend several hundreds of man-hours and IT resources.
Contents
- What is CRC?
- Occurrences of SQL CRC Error
- How to Fix SQL CRC Error?
- Conclusion
SQL Server operations are highly dependent on the disk subsystem. It is without a doubt a key component to SQL Server performance and availability as storage. Sometimes, an issue with the I/O subsystem can lead to Cyclic Redundancy Check (CRC) error. The error message reads as:
Encountered error: Msg 823, Level 24, State 2, Line 1
I/O error 23(Data error (cyclic redundancy check).) detected during read at offset 0x000001ac1c4000 in file ‘C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\DATA\MoreData.mdf’.
You may encounter CRC data error in SQL database when performing any of these actions:
- Backup and restoring of the database
- Querying the database
- Starting SQL Server
Before we jump into identifying the root cause for this error and find its solution, let us first understand what does cyclic redundancy check means.
What is CRC?
A Cyclic Redundancy Check (CRC) is a data verification algorithm that computers use to check the data on storage devices like SSD, HDD, CDs, Magnetic tapes, and more.
What Causes Cyclic Redundancy Check Error in SQL Database?
SQL cyclic redundancy check error may occur due to any of these reasons:
- Registry Corruption
- Cluttered hard disk
- Unsuccessful program installation
- Misconfigured files
- File written on bad sector of hard disk
Regardless of the specific cause, the cyclic redundancy check error is a serious error and must be addressed immediately to avoid potential data loss or even total system failure.
Occurrences of SQL CRC Error
Following are two scenarios in which you may encounter the CRC error:
Scenario 1: You may get the error when backing up a database. When you encounter the error during a backup, you can revisit the SQL Server error logs to get more details on the error.
Example of verbose log is shown below:
10/18/2016 12:00:19 AM Creating backup of MoreData to C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\Backup\
10/18/2016 12:00:32 AM ERROR: Read on “C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\DATA\MoreData.MDF” failed: 23(Data error (cyclic redundancy check).)
BACKUP DATABASE is terminating abnormally.
10/18/2016 12:00:32 AM ERROR: Job finished (With Errors)
Scenario 2: The next scenario is when you are querying the SQL database and it stops abruptly with the data check error. When querying the database, you will receive CRC error on SQL Server Management Studio (SSMS) error pane. The error message reads as:
Server: Msg 823, Level 24, State 2, Line 1
I/O error 23(Data error (cyclic redundancy check).) detected during read at offset 0x000001ac1c4000 in file ‘C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\DATA\MoreData.mdf’.
How to Fix SQL CRC Error?
Follow the steps in the sequence given below to resolve the error:
Step 1: Since the root cause behind the CRC error is an I/O subsystem issue, it is important to fix the underlying storage issues. That, in turn, would most likely fix the cyclic redundancy check error in SQL.
Run the CHKDSK utility on the disk in question and allow it to fix any error by using the /F parameter. Below is a screenshot of the command to check and fix the F: drive:
Step 2: A complete disk defragmentation is recommended after the “chkdsk” is completed with a successful repair of any errors.
Step 3: Perform a data integrity check on the SQL database to make sure that data is not corrupt. Run the command as highlighted below and analyze the results:
DBCC CHECKDB (MoreData) WITH NO_INFOMSGS, ALL_ERRORMSGS
Running the above command, detected 2 allocation errors and 1 consistency error as shown below:
Server: Msg 8946, Level 16, State 12, Line 2
Table error: Allocation page (1:72864) has invalid PFS_PAGE page header values. Type is 0. Check type, object ID and page ID on the page.
Server: Msg 8921, Level 16, State 1, Line 1
CHECKTABLE terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Server: Msg 8966, Level 16, State 1, Line 1
Could not read and latch page (1:72864) with latch type UP. failed.
Server: Msg 8966, Level 16, State 1, Line 1
Could not read and latch page (1:72864) with latch type UP. failed.
Server: Msg 8998, Level 16, State 1, Line 1
Page errors on the GAM, SGAM, or PFS pages do not allow CHECKALLOC to verify database ID 8 pages from (1:72864) to (1:80879). See other errors for cause.
CHECKDB found 2 allocation errors and 1 consistency errors not associated with any single object.
CHECKDB found 2 allocation errors and 1 consistency errors in database ‘MoreData’
Step 4: At this point, we are facing database corruption, and our options are to either restore the most recent backup or repair the database either by using SQL native repair commands or third-party tools. Now let’s look at both these options:
Restore database from Clean Backup
When trying to restore the db from backup, it is highly recommended to perform a RESTORE VERIFYONLY on the backup file to know if the backup is in a consistent state.
RESTORE VERIFYONLY FROM DISK = C:\BackupFile\MoreData.BAK GO
Repair the Corrupt SQL database
If the restore does not come out clean, then we are running out of options and would need to start looking into repairing the database. We can attempt to repair SQL database by using the DBCC CHECKDB with REPAIR OPTION.
For detailed information on DBCC CHECKDB, read this: How to Repair SQL Database using DBCC CHECKDB Command
Try repairing the db with DBCC CHECKDB ‘Repair_Allow_Data_Loss’ option by running the following code:
USE master; ALTER DATABASE [CorruptDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DBCC CHECKDB ('CorruptDB', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS; GO ALTER DATABASE [CorruptDB] SET MULTI_USER; GO
What If DBCC CHECKDB Fails to Repair SQL Database?
Repairing the database using the DBCC CHECKDB with ‘Repair_Allow_Data_Loss’ involves data loss risk during the repair process. It may also not deliver expected results. Use Stellar Database repair tool to fix a corrupt SQL database. The tool serves as the best Alternative of DBCC CHECKDB Repair Allow Data Loss that helps repair a SQL database from all types of common SQL database corruption errors. It repairs corrupt MDF and NDF files and restores all the database objects. Also, it helps restore the database back to its original state without any risk of data loss.
Essentially, the software helps repair corrupt SQL Server database (.mdf and .ndf) files, while maintaining the original structure and integrity of database objects.
Conclusion
So, there you have it! If you have a good disaster recovery plan set up, then you should have no problems when your production database or any other database gets corrupted due to SQL Database Cyclic Redundancy Check (CRC) error. Now let’s say you find yourself in a situation where a proper DR plan was not established and you do not have any backups to restore. You can consider utilizing the minimal repair level reported by the DBCC CHECKDB when you run the integrity check on the suspect database.
Remember that the repair feature of SQL Server is not robust and not a guaranteed solution. For a faster, more versatile repair that would bring your SQL corrupt database back into a working start with minimal data loss, look no further than Stellar Repair for MS SQL software. It repairs the database faster by using a more sophisticated repair algorithm. It can even recover deleted data in your database.
About The Author
Samuel Okudjeto (SQL Server DBA)
Samuel Okudjeto is a technology enthusiast with great interest in database administration and analytics. He has many certifications including the Microsoft Certified Expert Professional. Along with 6+ years of hands-on experience, he holds a Masters of Science degree in Business Analytics. Read more
Содержание
- Sql Error Class
- Definition
- Examples
- Remarks
- Properties
- Methods
- Sql Error Класс
- Определение
- Примеры
- Комментарии
- Свойства
- Методы
- Sql Error Класс
- Определение
- Примеры
- Комментарии
- Свойства
- Методы
- Руководство по устранению неполадок с SqlClient
- Исключения при подключении к SQL Server
- Не удалось загрузить нативную библиотеку SNI (указание имени сервера)
- Проблемы в приложениях .NET Framework
- Проблемы в приложениях .NET Core
- Ошибки нативной функции SNI (не удалось найти PDB)
- Ошибки разрешения имени узла
- Возможные причины
- Ошибки на этапе входа
- Возможные причины и решения
- Проблема, вызванная тем, что пул подключений исчерпан
- Возможные причины и решения
- Обращение в службу поддержки
Sql Error Class
Definition
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Collects information relevant to a warning or error returned by SQL Server.
Examples
The following example displays each SqlError within the SqlErrorCollection collection.
This class is created by the .NET Framework Data Provider for SQL Server when an error occurs. An instance of SqlError is created and managed by the SqlErrorCollection, which in turn is created by the SqlException class.
Messages with a severity level of 10 or less are informational and indicate problems caused by mistakes in information that a user has entered. Severity levels from 11 through 16 are generated by the user, and can be corrected by the user. Severity levels from 17 through 25 indicate software or hardware errors. When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement.
The SqlConnection remains open when the severity level is 19 or less. When the severity level is 20 or greater, the server usually closes the SqlConnection. However, the user can reopen the connection and continue. In both cases, a SqlException is generated by the method executing the command.
For more information about errors generated by SQL Server, see Database Engine Errors. For more information about severity levels, see Database Engine Error Severities.
Properties
Gets the severity level of the error returned from SQL Server.
Gets the line number within the Transact-SQL command batch or stored procedure that contains the error.
Gets the text describing the error.
Gets a number that identifies the type of error.
Gets the name of the stored procedure or remote procedure call (RPC) that generated the error.
Gets the name of the instance of SQL Server that generated the error.
Gets the name of the provider that generated the error.
Gets the unique state code for the error.
Methods
Determines whether the specified object is equal to the current object.
(Inherited from Object) GetHashCode()
Serves as the default hash function.
(Inherited from Object) GetType()
Gets the Type of the current instance.
(Inherited from Object) MemberwiseClone()
Creates a shallow copy of the current Object.
(Inherited from Object) ToString()
Gets the complete text of the error message.
Источник
Sql Error Класс
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Собирает сведения, относящиеся к предупреждению или ошибке, возвращаемой сервером SQL Server.
Примеры
В следующем примере каждый из них SqlError отображается в SqlErrorCollection коллекции.
Комментарии
Этот класс создается поставщиком данных платформа .NET Framework для SQL Server при возникновении ошибки. Экземпляр SqlError создается и управляется классом SqlErrorCollection, который, в свою очередь, создается классом SqlException .
Сообщения с уровнем важности 10 и менее являются информационными и обозначают неполадки, вызванные ошибками во введенных пользователем данных. Уровни серьезности от 11 до 16 создаются пользователем и могут быть исправлены пользователем. Уровни важности с 17 по 25 указывают на ошибки программного обеспечения или оборудования. При возникновении ошибки уровня 17, 18 или 19 вы можете продолжить работу, хотя выполнить определенную инструкцию не удастся.
SqlConnection остается открытым, если уровень важности не превышает 19. Когда уровень важности превышает 20, сервер обычно закрывает SqlConnection. Тем не менее, пользователь может опять открыть подключение и продолжить работу. В обоих случаях выполняющим команду методом создается SqlException.
Дополнительные сведения об ошибках, создаваемых SQL Server, см. в разделе Ошибки ядра СУБД. Дополнительные сведения об уровнях серьезности см. в разделе Серьезность ошибок ядра СУБД.
Свойства
Возвращает уровень важности ошибки, возвращаемой SQL Server.
Возвращает номер содержащей ошибку строки пакета команд Transact-SQL или хранимой процедуры.
Возвращает текст, описывающий ошибку.
Возвращает число, определяющее тип ошибки.
Возвращает имя вызвавшей ошибку хранимой процедуры или удаленного вызова процедур (RPC).
Возвращает имя вызвавшего ошибку экземпляра SQL Server.
Возвращает имя вызвавшего ошибку поставщика.
Возвращает уникальный код состояния для ошибки.
Методы
Определяет, равен ли указанный объект текущему объекту.
(Унаследовано от Object) GetHashCode()
Служит хэш-функцией по умолчанию.
(Унаследовано от Object) GetType()
Возвращает объект Type для текущего экземпляра.
(Унаследовано от Object) MemberwiseClone()
Создает неполную копию текущего объекта Object.
(Унаследовано от Object) ToString()
Возвращает полный текст сообщения об ошибке.
Источник
Sql Error Класс
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Собирает сведения, относящиеся к предупреждению или ошибке, возвращаемой сервером SQL Server.
Примеры
В следующем примере каждый из них SqlError отображается в SqlErrorCollection коллекции.
Комментарии
Этот класс создается поставщиком данных платформа .NET Framework для SQL Server при возникновении ошибки. Экземпляр SqlError создается и управляется классом SqlErrorCollection, который, в свою очередь, создается классом SqlException .
Сообщения с уровнем важности 10 и менее являются информационными и обозначают неполадки, вызванные ошибками во введенных пользователем данных. Уровни серьезности от 11 до 16 создаются пользователем и могут быть исправлены пользователем. Уровни важности с 17 по 25 указывают на ошибки программного обеспечения или оборудования. При возникновении ошибки уровня 17, 18 или 19 вы можете продолжить работу, хотя выполнить определенную инструкцию не удастся.
SqlConnection остается открытым, если уровень важности не превышает 19. Когда уровень важности превышает 20, сервер обычно закрывает SqlConnection. Тем не менее, пользователь может опять открыть подключение и продолжить работу. В обоих случаях выполняющим команду методом создается SqlException.
Дополнительные сведения об ошибках, создаваемых SQL Server, см. в разделе Ошибки ядра СУБД. Дополнительные сведения об уровнях серьезности см. в разделе Серьезность ошибок ядра СУБД.
Свойства
Возвращает уровень важности ошибки, возвращаемой SQL Server.
Возвращает номер содержащей ошибку строки пакета команд Transact-SQL или хранимой процедуры.
Возвращает текст, описывающий ошибку.
Возвращает число, определяющее тип ошибки.
Возвращает имя вызвавшей ошибку хранимой процедуры или удаленного вызова процедур (RPC).
Возвращает имя вызвавшего ошибку экземпляра SQL Server.
Возвращает имя вызвавшего ошибку поставщика.
Возвращает уникальный код состояния для ошибки.
Методы
Определяет, равен ли указанный объект текущему объекту.
(Унаследовано от Object) GetHashCode()
Служит хэш-функцией по умолчанию.
(Унаследовано от Object) GetType()
Возвращает объект Type для текущего экземпляра.
(Унаследовано от Object) MemberwiseClone()
Создает неполную копию текущего объекта Object.
(Унаследовано от Object) ToString()
Возвращает полный текст сообщения об ошибке.
Источник
Скачать ADO.NET
Исключения при подключении к SQL Server
Есть несколько причин, по которым не удается установить подключение. Ниже приведено несколько советов по устранению неполадок. Эти советы можно использовать для анализа и решения многих проблем.
Не удалось загрузить нативную библиотеку SNI (указание имени сервера)
Проблемы в приложениях .NET Framework
Отслеживаемая трассировка стека:
SNI — это нативная библиотека C++, на основе которой в SqlClient выполняются различные сетевые операции при работе в Windows. В приложениях .NET Framework, созданных с помощью пакета SDK для проекта MSBuild, управление нативными библиотеками DLL не осуществляется с помощью команд восстановления. Таким образом, файл .targets включается в пакет NuGet Microsoft.Data.SqlClient.SNI, который определяет необходимые операции копирования.
Для включаемого файла .targets при установке прямой зависимости от библиотеки Microsoft.Data.SqlClient создается автоматическая ссылка. В сценариях, где создается транзитная (косвенная) ссылка, необходимо вручную ссылаться на этот файл .targets, чтобы при необходимости могли выполняться операции копирования.
Рекомендуемое решение. Убедитесь, что в файле .csproj приложения есть ссылка на файл .targets, чтобы обеспечить выполнение операций копирования.
Среди этих целевых объектов только известные и часто используемые целевые объекты Майкрософт. Если внешний инструмент или приложение определяет пользовательские целевые объекты для копирования двоичных файлов, то средства обслуживания инструмента должны определить новые целевые объекты, чтобы обеспечить копирование нативных DLL-библиотек SNI вместе с двоичными файлами Microsoft.Data.SqlClient.dll и доступность таких библиотек при выполнении клиентских приложений.
Проблемы в приложениях .NET Core
Отслеживаемая трассировка стека:
Эта ошибка может возникать только в Windows-приложениях. Если это происходит в среде Unix, убедитесь, что приложение создано для среды выполнения UNIX, а не для Windows.
SNI — это нативная библиотека C++, на основе которой в SqlClient выполняются различные сетевые операции при работе в Windows. Microsoft.Data.SqlClient не управляет загрузкой этой библиотеки в ПО .NET Core и ее выгрузкой из него.
Рекомендуемое решение. Обеспечьте для файловой системы, где нативные библиотеки среды выполнения загружаются в процесс .NET Core, разрешения на выполнение. Если это не помогло решить проблему, можно зарегистрировать ее в репозитории dotnet/runtime, чтобы получить дальнейшую поддержку.
Ошибки нативной функции SNI (не удалось найти PDB)
Отслеживаемая трассировка стека:
Рекомендуемое решение. Убедитесь, что клиентское приложение ссылается на минимальную версию 2.1.0 пакета Microsoft.Data.SqlClient. При использовании EF Core добавьте ссылку на эту версию пакета Microsoft.Data.SqlClient напрямую, чтобы переопределить зависимость.
Ошибки разрешения имени узла
Отслеживаемая трассировка стека:
Возможные причины
В SQL Server не включен протокол TCP или протокол именованных каналов
Рекомендуемое решение. Включите протокол TCP или протокол именованных каналов в экземпляре SQL Server из консоли диспетчера конфигурации SQL Server.
Имя узла неизвестно
Рекомендуемое решение. Убедитесь, что имя узла разрешается в IP-адрес сервера от клиента, в котором инициируется подключение.
Ошибки на этапе входа
Отслеживаемые трассировки стека:
Возможные причины и решения
SQL Server не поддерживает TLS 1.2
Эта ошибка обычно происходит в клиентских средах, таких как контейнеры образов Docker, клиенты Unix или клиенты Windows, где TLS 1.2 является минимальной поддерживаемой версией протокола TLS.
Рекомендуемое решение. Установите последние обновления для поддерживаемых версий SQL Server 1 и убедитесь, что на сервере включен протокол TLS 1.2.
1 Список поддерживаемых версий SQL Server с разными версиями Microsoft.Data.SqlClient см. в статье Жизненный цикл поддержки драйвера SqlClient.
Небезопасное решение. Настройте параметры TLS/SSL в среде образа или клиента Docker для подключения к TLS 1.0.
При подключении к Microsoft.Data.SqlClient версии 2.0 и выше из среды Windows или Linux с использованием TLS 1.0 или TLS 1.1 будет активировано предупреждение системы безопасности, если целевому объекту SQL Server и клиенту не удается согласовать минимальную версию TLS 1.2 при установке соединения: Security Warning: The negotiated is an insecure protocol and is supported for backward compatibility only. The recommended protocol version is TLS 1.2 and later.
Принудительное шифрование SQL Server
Если целевой сервер является экземпляром Azure SQL или локальной SQL Server с включенным свойством «Принудительное шифрование», будет установлено зашифрованное подключение, для которого клиент должен установить доверие с сервером.
Рекомендуемое решение. Есть два варианта устранения этой проблемы:
- Установите сертификат TLS/SSL для целевого экземпляра SQL Server в клиентской среде. Будет выполнена проверка на предмет того, нужно ли шифрование.
- Задайте свойство TrustServerCertificate=true в строке подключения.
Небезопасное решение. Отключите параметр принудительного шифрования в SQL Server.
Сертификаты TLS/SSL не подписаны с помощью SHA-256 или более поздней версии.
Рекомендуемое решение. Создайте новый сертификат TLS/SSL для сервера, хэш которого подписывается по меньшей мере с помощью алгоритма хэширования SHA-256.
Строго ограниченный список комплектов шифров TLS для .NET 5 и более поздних версий в Linux
В .NET 5 представлено критическое изменение для клиентов Linux, которое заключается в использовании строго ограниченного списка разрешенных комплектов шифров по умолчанию. Если необходимо расширить список комплектов шифров по умолчанию для работы с устаревшими клиентами (или для взаимодействия с устаревшими серверами), укажите значение CipherSuitePolicy или измените файл конфигурации OpenSSL.
Дополнительные сведения о рекомендуемых действиях см. в статье Комплекты шифров TLS по умолчанию для .NET в Linux.
Проблема, вызванная тем, что пул подключений исчерпан
Отслеживаемая трассировка стека:
Возможные причины и решения
Клиентское приложение открывает больше подключений, чем пул соединений может сохранить в текущий момент.
Рекомендуемое решение. Задайте для свойства соединения Max Pool Size большее значение и своевременно закрывайте неиспользуемые подключения.
Обращение в службу поддержки
Если это не помогло устранить проблемы с подключением, вы можете просмотреть сведения о существующих проблемах в репозитории dotnet/sqlclient и при необходимости открыть новую проблему.
Источник