Ошибка может возникать при подсоединении к SQL серверу при выполнении следующих условий:
-
используются клиентские компоненты доступа к данным от Microsoft SQL Server 7.0 (MDAC 2.1);
-
на клиентском компьютере для доступа к SQL серверу используется протокол "Multiprotocol";
-
на SQL сервере установлен режим аутентификации "Windows only".
Microsoft OLE DB Provider for SQL Server: Connection failure.
HRESULT=80004005, SQLSTATE=08501, native=0
Причиной ошибки могла послужить перезагрузка SQL сервера при работающем сервере 1С:Предприятия. При получении такой ошибки сервер 1С:Предприятия также нужно перезагрузить.
Microsoft OLE DB для SQL Server: [DBNMPNTW] ConnectionOpen(CreateFile()).
HRESULT=80004005, SQLSTATE=01000 native=1326
Во-первых, следует обратить внимание на идентификатор библиотеки, записанный в квадратных скобках. Список некоторых из них приведен ниже:
-
DBNETLIB - библиотека, используемая на клиенте SQL сервера для доступа к SQL-серверу по любому протоколу.
-
dbnmpntw - протокол Named Pipes для Win32
-
dbmssocn - протокол Winsock TCP/IP для Win32
-
dbmsspxn - протокол SPX/IPX для Win32
-
dbmsvinn - протокол Banyan Vines для Win32
-
dbmsrpcn - протокол Multi-Protocol (Windows RPC) для Win32
-
dbnmp3 - протокол Named Pipes для Win16
-
dbmssoc3 - протокол Winsock TCP/IP для Win16
-
dbmsspx3 - протокол SPX/IPX для Win16
-
dbmsvin3 - протокол Banyan Vines для Win16
-
dbmsrpc3 - протокол Multi-Protocol (Windows RPC) для Win16
В приведенном примере сообщения об ошибке при попытке обращения к серверу 1С:Предприятия по протоколу "Named Pipes" пользователю USER1CV8SERVER (от его имени работает сервер 1С:Предприятия) отказано в доступе системой безопасности того компьютера, на котором установлен SQL сервер. Для решения проблемы необходимо либо использовать другой протокол (TCP/IP, например), либо обеспечить компьютеру с SQL сервером возможность аутентификации пользователя USER1CV8SERVER компьютера с сервером 1С:Предприятия.
Microsoft OLE DB provider for SQL Server: Cannot open database request in Login "upp" . Login fails.
Это сообщение обычно возникает после нештатного завершения сервера 1С:Предприятия, когда информационная база находилась в монопольном режиме. При этом база данных SQL сервера остается в однопользовательском режиме и сервер 1С:Предприятия не может к ней присоединиться. Запустите Microsoft SQL Server Enterprise Manager, откройте свойства базы данных, в которой располагается информационная база и выключите однопользовательский режим:
Microsoft OLE DB Provider for SQL Server: The database could not be exclusively locked to perform the operation. HRESULT=80040E14, HRESULT=80040E14, SQLSTATE=42000, native=5030
Это сообщение может выдаваться в том случае, если для выполнения некоторого действия в 1С:Предприятии требуется перевод информационной базы в режим монопольного доступа, а перевод базы данных в однопользовательский режим невозможен из-за того, что к ней наряду с сервером 1С:Предприятия подсоединено еще какое-нибудь приложение, например, Microsoft SQL Server Query Analyzer. Для успешного выполнения в 1С:Предприятии действий, требующих монопольного доступа к информационной базе, необходимо отсоединиться от соответствующей базы данных всеми другими приложениями. Список приложений, подсоединенных к базе данных можно посмотреть в Microsoft SQL Server Query Analyzer. Для этого необходимо базу данных Master сделать текущей и выполнить следующий запрос:
SELECT DISTINCT pr.hostname, pr.program_name, pr.hostprocess
FROM sysdatabases db
INNER JOIN sysprocesses pr
ON db.dbid = pr.dbid
WHERE db.name = 'TEST'
где 'TEST' - имя базы данных, для которой необходимо определить подключенные к ней приложения.
Особенности исполнения запросов SQL сервером
Причиной возникновения следующих ошибок являются особенности исполнения запросов SQL сервером Microsoft SQL Server 2000. Они могут проявляться либо при достижении недокументированных программных ограничений SQL сервера, либо в случае проявления на конкретном SQL запросе ошибок Microsoft SQL Server 2000. Такие ошибки встречаются достаточно редко. Свести вероятность их возникновения к минимуму можно лишь посредством тестирования разрабатываемых конфигураций в клиент-серверном варианте работы. Если при исполнении некоторого запроса встретилась подобная ошибка, то устранить ее обычно можно, переписав запрос несколько по-другому. Среди известных особенностей Microsoft SQL Server 2000 следующие:
Microsoft OLE DB Provider for SQL Server: Cannot perform an aggregate function on an expression containing an aggregate or a
subquery.
HRESULT=80040E14, SQLSTATE=42000, native=130
Выражение, вложенное в агрегатные функции или использованное в разделе СГРУППИРОВАТЬ ПО, содержит вложенные запросы. Начиная с 1С:Предприятия 8.0.9.32, данную ошибку диагностирует компилятор языка запросов.
Microsoft OLE DB provider for SQL Server: only text pointer are allowed in work tables, never text, ntext or image column. The query processor produced a query plan that reqied text, ntext or image column in work table.
HRESULT=80040E14, SQLSTATE=42000, native=8226
Ошибка возникает при построении планов некоторых запросов, включающих операцию объединения таблиц и вложенные запросы. Для ее предотвращения избегайте объединения полей типа Строка неограниченной длины с полями типа Строка ограниченной длины, если они являются результатами вложенных запросов. Платформа 1С:Предприятия, начиная с версии 8.0.11.3, обходит данную особенность SQL сервера, не накладывая никаких ограничений на пользовательские запросы.
Microsoft OLE DB Provider for SQL Server: SqlDumpExceptionHandler: Process 52 generated fatal exception c0000005
EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
HRESULT=80040E14, SQLSTATE=42000, native=0
Эта ошибка может проявиться при исполнении некоторых достаточно сложных запросов. При получении такой ошибки необходимо несколько видоизменить запрос. Точно сформулировать условия, при которых возникает данная ошибка не представляется возможным.
Microsoft OLE DB Provider for SQL Server: Too many table names in the query. The maximum allowable is 256.
HRESULT=80040E14, SQLSTATE=42000, Native=106
Microsoft SQL Server 2000 позволяет использовать в простом запросе (не содержащем UNION), включая все вложенные в него запросы, не более 256 таблиц базы данных. Если количество таблиц, использованных в запросе, превышает 256, то выдается сообщение об ошибке. Платформа 1С:Предприятия, начиная с версии 8.0.11.3, выдает соответствующую диагностику, не приводящую к завершению клиентского приложения 1С:Предприятия. При написании запроса необходимо учитывать, что обращение к полям по ссылке составного типа может привести к использованию большого количества таблиц.
Microsoft OLE DB Provider for SQL Server: ORDER BY items must appear in the select list if the statement contains a UNION operator.
HRESULT=80040E14, SQLSTATE=42000, native=104
Ошибка связана с неверным поведением SQL сервера при использовании запроса с операцией UNION в случае, если во вложенных запросах используется раздел ORDER BY совместно с ключевым словом TOP. Такой запрос будет построен, например, при выполнении следующего запроса 1С:Предприятия:
ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Ссылка В ИЕРАРХИИ
(ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Справочник.Номенклатура УПОРЯДОЧИТЬ ПО Код)
Для обхода данной ошибки необходимо избегать использования вложенных запросов с разделами "УПОРЯДОЧИТЬ ПО", если исходный запрос содержит операцию "ОБЪЕДИНИТЬ". Необходимо учитывать, что операция "ОБЪЕДИНИТЬ" используется неявно при вычислении операции сравнения "В ИЕРАРХИИ".
Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes. Resubmit your query without the ROBUST PLAN hint.
HRESULT=80040E14, SQLSTATE=42000, native=8618
Ошибка возникает при группировке записей и вычислении агрегатных функций, если группировка выполняется над результатом вложенного запроса и максимальная длина записи результата вложенного запроса превышает 4000 байт. Одной из причин возникновения такой ошибки является неправильное вычисление SQL сервером максимальной длины результата операции SUBSTRING над полем неограниченной длины. Например, максимальная длина значения функции ПОДСТРОКА(ДокументКемВыдан, 1, 200) будет равняться 4000 символов, а не 200 символам. Функция ПОДСТРОКА может использоваться таким образом, в частности, для приведения значения поля неограниченной длины к значению ограниченной длины. Рекомендуется в этом случае использовать вместо "ПОДСТРОКА(ДокументКемВыдан, 1, 200)" оператор "ВЫРАЗИТЬ(ДокументКемВыдан КАК СТРОКА(200))". Максимальная длина результата этого оператора "ВЫРАЗИТЬ" будет равна 200 символов, а не 4000, как у функции "ПОДСТРОКА".
Ошибки при выполнении операций над данными
Ошибки из этой группы возникают при выполнении запросов SQL сервером в случае, если значениями выражений оказываются данные, недопустимые для объявленных типов.
Microsoft OLEDB Provider for SQL Server: Adding a value to a 'datetime' column caused overflow. HRESULT=80040E07, SQLSTATE=22077, native=517
Возникает при выполнении функций над датами в том случае, если в качестве их результата получается слишком большая или слишком маленькая дата. Для Microsoft SQL Server 2000 минимально допустимой является дата 1 января 1753 года, а максимально допустимой - 31 декабря 9999 года.
Ошибки размещения базы данных
Причиной сообщений об ошибках из этой группы является аварийная ситуация на компьютере, на котором установлен SQL сервер. Наиболее распространенным случаем является нехватка ресурсов.
Microsoft OLE DB Provider for SQL Server: Could not allocate space for object '_AccumReg224NG' in database '...' because the 'PRIMARY' filegroup is full. HRESULT=80004500, SQLSTATE=42000, native=1105
Подобное сообщение может возникнуть при загрузке информационной базы или при ее реструктуризации в случае, если диск, на котором расположен файл базы данных SQL сервера, имеет недостаточно свободного пространства.
Ошибки исполнения транзакций
Сообщения из следующей группы могут возникнуть при высокой загрузке сервера 1С:Предприятия из-за возможных конфликтов транзакционных блокировок записей. При получении одного из таких сообщений обычно достаточно повторить выполнение того же самого интерактивного действия.
Microsoft OLE DB Provider for SQL Server: Transaction (Process ID 53) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
HRESULT=80004005, SQLSTATE=40001, native=1205
Сообщение означает взаимную блокировку транзакций, начатых двумя или большим количеством пользователей. Частое появление такого сообщения свидетельствует о неудачных решениях, реализованных в конфигурации. Для борьбы со взаимной блокировкой, в частности, предназначено ключевое слово "ДЛЯ ИЗМЕНЕНИЯ" в языке запросов.
Microsoft OLE DB Provider for SQL Server: Lock request time out period expired.
HRESULT = 80040E31, SQLSTATE = HYT00, native = 1222
Время ожидания освобождения записей, заблокированных другой транзакцией, превысило максимально допустимое время ожидания, равное 20 секундам. Появление этого сообщения свидетельствует об исполнении другим пользователем длительной транзакции над теми же самыми данными. При частом появлении таких сообщений желательно проанализировать конфигурацию с целью выявления неоправданно длительных транзакций. Кроме того, это может свидетельствовать о выполнении интерактивного действия при незакрытой транзакции.