2010-06-03 4 views
1

У меня есть небольшое приложение, которое использует SQL Server 2005 Express с хранимыми процедурами CLR. Он был успешно установлен и работает на многих компьютерах под управлением XP и Vista.CREATE ASSEMBLY не удалось проверить: недостаточно данных для завершения этой операции

Для создания сборки следующий SQL выполняется (имена изменены, чтобы защитить невинных):

CREATE ASSEMBLY myAssemblyName FROM 'C:\PathToAssembly\myAssembly.dll 

На одном компьютере (тест машины, который отражает другие компьютеры, предназначенные для установки), работающем под управлением Vista, и имеет некоторые очень агрессивные ограничения политики безопасности, я получаю следующее сообщение об ошибке:

Msg 6218, Level 16, State 2, Server domain\servername, Line 2
CREATE ASSEMBLY for assembly 'myAssembly' failed because assembly 'myAssembly' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message

[ : myProcSupport.Axis::Proc1][mdToken=0x6000004] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc2][mdToken=0x6000005] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc3][mdToken=0x6000006] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::.ctor][mdToken=0x600000a] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc4][mdToken=0x6000001] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc5][mdToken=0x6000002] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc6][mdToken=0x6000007] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc7][mdToken=0x6000008] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc8][mdToken=0x6000009] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc8][mdToken=0x600000b] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation.

[ : myProcSupport.Axis::Proc9][mdToken=0x600000c] [HRESULT 0x8007000E] - Not enough storage is available to complete this operation....

C# DLL определяется как SAFE, как он использует только данные, содержащиеся в базе данных. DLL обычно не подписывается, но я предоставил подписанную версию для тестирования и получения тех же результатов.

Установка выполняется кем-то еще, и у меня нет доступа к коробке, но они выполняют скрипты, которые я предоставил, и работаю на других компьютерах.

Я попытался найти информацию об этой ошибке, кроме того, что дает результат сценария, но я ничего не нашел.

Лицо, выполняющее скрипт для создания сборки, регистрируется с учетной записью администратора, запускает CMD в качестве администратора, подключается к БД через проверку подлинности Windows, добавляется в роль dbo_owner и добавляется в роль сервера SysAdmin с надеждой, что это проблема с разрешениями. Это ничего не изменило.

Нужно ли настраивать SQL Server 2005 Express по-разному для этой среды?

Эта ошибка регистрируется где угодно, кроме как только выход SQLCMD? Что может вызвать эту ошибку? Могли ли политики безопасности Vista вызывать это?

У меня нет доступа к компьютеру (клиент проводит тестирование), поэтому я не могу сам изучить коробку.

ТИА

+1

'Недостаточно места для хранения этой операции.' Ваш SQL Server с низким уровнем дискового пространства случайно? –

+0

Нет, это недавно обработанная машина со множеством концертов свободного места на жестком диске. Первое, что установлено, - SQL Server 2005 Express. Когда база данных создается, два концерта предварительно выделяются для роста. Сборка, которая не установлена, составляет 52 КБ. Я имел в виду, что «недостаточно места для хранения» было остаточной ошибкой «неудачной проверки». –

+0

Все эти ссылки на «myProcSupport» - это настоящая ссылка или вы защищаете больше невинных? Сколько памяти имеет сервер, и SQL, возможно, настроен так, чтобы не использовать все это? –

ответ

1

Если этот код работает как SAFE на других серверах, то я бы сначала проверить, чтобы убедиться, что .NET установлена ​​правильная версия (включая обновления). Также может возникнуть проблема с одной из DLL-библиотек .NET, и ее необходимо устранить.

Относительно следующее сообщение об ошибке:

Not enough storage is available to complete this operation.

, что на самом деле является «из памяти» ошибка (код = ERROR_OUTOFMEMORY): либо не имея достаточно или не имеющие разрешения (как-то), чтобы использовать его, или нет доступные файлы и т. д.

Другие упоминания об этой ошибке:

Так что, если это про я проблема действительно памяти связаны, то это, вероятно, будет связано с:

  • Сколько физической памяти на сервере
  • Какую версию SQL Server (были внесены изменения, начиная с SQL Server 2012). Этот вопрос рассматривался как SQL Server 2005, но другие могут столкнуться с тем, кто находится на другой версии. В 32-разрядном SQL Server 2005 SQL CLR AppDomains управляются в области «MemToLeave», которая не огромна (см. Ссылку ниже).
  • Является ли это 32-разрядным или 64-разрядным SQL Server? Если 32-разрядный SQL Server работает на 32-разрядной или 64-битной Windows?
  • Если используется 32-разрядный SQL Server на 32-разрядном, используется ли переключатель /3GB?
  • Вот некоторые ресурсы, чтобы узнать больше о SQL Server и памяти:

Если конфигурация сервера с ошибкой совпадает с машинами, которые не получают ошибку:

  • же объем памяти
  • же 32-бит против 64-битных ОС
  • же 32-бит против 64-разрядного SQL Server
  • же настройки памяти для SQL Server
  • же не- программы SQL Server, работающих на ОС
  • же количество свободного места на диске, который может быть использован для виртуальной памяти, и т.д.)
  • и т.д ....

, то если настройка безопасности на компьютере, который не работает, отличается, вам нужно проверить учетную запись «Вход в систему» ​​для службы SQL Server NT. Это локальная системная учетная запись? Это локальный логин? Это вход в домен? Если проблема связана с настройкой безопасности, тогда я начну искать. Если служба использует локальную системную учетную запись, попробуйте использовать локальный или доменный логин (что в любом случае является лучшей практикой). Если логин уже является локальным или доменным пользователем, проверьте, как политики безопасности влияют на этого пользователя и на любые группы Windows, в которых входит логин.

+0

Спасибо srutzky ... эта процедура больше не используется. Я не помню, какова была резолюция. Я проверю свои заметки (электронную почту) и посмотрю, смогу ли я выяснить, что стало с этой проблемой. Я предполагаю, что компьютер, у которого была проблема, был заменен тем, который этого не сделал, и реальная причина так и не была найдена. –

+0

@turnip_cyberveggie Да, я понял, что через 5 лет было бы трудно подтвердить, так или иначе, но если вы сможете найти что-нибудь в своих заметках, это будет полезно для других, которые могут столкнуться с этим. В любом случае я, по крайней мере, смог добавить некоторую информацию к проблеме, чтобы указать направление, которое должно помочь кому-либо еще (то есть, это память, а не диск, проблема, хотя это может и не быть основной причиной). –