Программирование в 1СВоскресенье, 22.12.2024, 14:10

| RSS
Главная | Каталог статей
Меню сайта

Категории раздела
Обзор платформы [8]
Архитектура 1С Предприятия [4]
Средства разработки [8]
Работа пользователей с 1С Предприятием 8.0 [8]
Установка и настройка [10]
Особенности администрирования Windows XP SP2 [5]
Особенности использования HASP [5]
Особенности настройки SQL Server 2000 [9]
Администрирование [18]

Поиск

Поиск по сайту

Главная » Статьи » 1С v.8.x » Администрирование

Пояснения к сообщениям об ошибках SQL сервера
В процессе работы 1С:Предприятия в клиент-серверном варианте можно встретить сообщения об ошибках, возникших при обращении сервера 1С:Предприятия к базе данных SQL сервера (Microsoft SQL Server 2000). Например, сообщение об ошибке может выглядеть так:
 
 
В этом разделе даны пояснения к наиболее часто встречающимся сообщениям об ошибках, источником которых является Microsoft SQL Server 2000.
 
Ошибки доступа к SQL серверу и базе данных

Если сообщение об ошибке возникает при попытке подсоединения клиентского приложения 1С:Предприятия к клиент-серверной информационной базе, то наиболее вероятной причиной его является отказ со стороны Microsoft SQL Server 2000 в доступе сервера 1С:Предприятия к соответствующей базе данных от имени пользователя SQL сервера, заданного при создании этой информационной базы. К этой группе относятся следующие ошибки.
 
Microsoft OLE DB Provider for SQL Server: [DBNETLIB][Connection Write (WrapperWrite()).]General network error.Check your network documentation.
HRESULT=80004005, SQLSTATE=08S01, native=11

Ошибка может возникать при подсоединении к SQL серверу при выполнении следующих условий:
  1. используются клиентские компоненты доступа к данным от Microsoft SQL Server 7.0 (MDAC 2.1);
  2. на клиентском компьютере для доступа к SQL серверу используется протокол "Multiprotocol";
  3. на SQL сервере установлен режим аутентификации "Windows only".
Для решения проблемы желательно настроить доступ к SQL серверу так, как описано в разделе "Сервер 1С:Предприятия и SQL-сервер".
 
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 секундам. Появление этого сообщения свидетельствует об исполнении другим пользователем длительной транзакции над теми же самыми данными. При частом появлении таких сообщений желательно проанализировать конфигурацию с целью выявления неоправданно длительных транзакций. Кроме того, это может свидетельствовать о выполнении интерактивного действия при незакрытой транзакции.
Категория: Администрирование | Добавил: Spacer (31.10.2009)
Просмотров: 19778
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика

    Copyright 1C:Programmer © 2024
    Бесплатный конструктор сайтов - uCoz