Я получаю следующую ошибку из веб-приложения VB NET, написанного в VS 2003, в фреймворке 1.1. Веб-приложение работает на Windows Server 2000, IIS 5 и читает из базы данных SQL Server 2000, запущенной на том же компьютере.Проблема с загадочными ограничениями с SQL Server 2000
System.Data.ConstraintException: Не удалось включить ограничения. Один или строк содержат значения, нарушающие непустые, уникальные или внешние ключи . на System.Data.DataSet.FailedEnableConstraints() в System.Data.DataSet.EnableConstraints() на System.Data.DataSet.set_EnforceConstraints (булевых значение) при System.Data.DataTable.EndLoadData()
на System.Data.Common.DbDataAdapter.FillFromReader (Object данных, String srcTable, IDataReader DataReader, Int32 startRecord, Int32 MaxRecords, DataColumn parentChapterColumn, объект parentChapterValue) в System.Data.Common.DbDataAdapter.Fill (DataSet dataSet, String s rcTable, IDataReader DataReader, Int32 startRecord, Int32 MaxRecords) в System.Data.Common.DbDataAdapter.FillFromCommand (Object данных, Int32 startRecord, Int32 MaxRecords, String srcTable, команды IDbCommand, CommandBehavior поведение) в системе .Data.Common.DbDataAdapter.Fill (DataSet DATASET, Int32 startRecord, Int32 MaxRecords, String srcTable, команда IDbCommand, CommandBehavior поведение) при System.Data.Common.DbDataAdapter.Fill (DataSet DATASET)
Проблема возникает, когда веб-приложение находится под высокой нагрузкой. Система работает нормально, когда уровень громкости низкий, но когда количество запросов становится высоким, система начинает отклонять входящие запросы с указанным выше сообщением об исключении. Как только проблема появляется, очень немногие запросы действительно проходят через и обрабатываются нормально, около 2 за каждые 30. Подавляющее большинство запросов завершается с ошибкой, пока не перезагрузится SQL Server или перезагрузка IIS. Затем система начинает обработку запросов обычно, и через некоторое время она начинает бросать ту же ошибку.
Ошибка возникает, когда адаптер данных запускает метод Fill() в отношении оператора SELECT, чтобы заполнить сильно типизированный набор данных. Похоже, что набор данных не нравится данные, которые он задает, и выбрасывает это исключение. Эта ошибка возникает в разных операторах SELECT, действующих на разные таблицы.
Я восстановил набор данных и проверил соответствующие ограничения, а также таблицу, из которой считываются данные. Как определение набора данных, так и данные в таблице являются точными.
Правда, оборудование работает как веб-приложение и SQL Server 2000 серьезно устарел, учитывая количество входящих запросов в настоящее время он получает. Объем оперативной памяти, потребляемой SQL Server, динамически распределяется, и в пиковые времена SQL Server может потреблять до 2.8 ГБ из общей суммы 3,5 ГБ на сервере.
Сначала я подозревал какой-то индекс или повреждение базы данных, но после запуска DBCC CHECKDB в базе данных ошибок не обнаружено.Поэтому теперь мне интересно, является ли эта ошибка результатом аппаратных ограничений системы. Возможно ли, что SQL Server каким-то образом испортил данные, которые он должен передать в набор данных, что приводит к нарушению ограничения из-за несоответствия типа данных/длины?
Я попытался получить доступ к сообщениям RowError строк данных в полученных наборах наборов данных, но я продолжал получать пустые строки. Я знаю, что HasErrors = true для данных, о которых идет речь. Я не установил EnableConstraints = false, и я не хочу этого делать.
Заранее спасибо.
Ray