SQL Server прекращает загрузку сборки

Мы разработали сборку для SQL Server 2008 R2.

Сборка работала уже неделю. Управляемая хранимая процедура внутри сборки работала нормально всю неделю, а затем перестала работать. Мы наблюдали эту проблему пару раз. Чтобы заставить его снова работать, нужно перезапустить SQL Server.

Msg 10314, Level 16, State 11, Line 4
An error occurred in the Microsoft .NET Framework while trying to load assembly id 65536. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error: 
  System.IO.FileLoadException: Could not load file or assembly 'myAssembly, Version=2.0.0.490, Culture=neutral, PublicKeyToken=5963130873dd3a75' or one of its dependencies. Exception from HRESULT: 0x80FC0E21 System.IO.FileLoadException:
  at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
  at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
  at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
  at System.Reflection.Assembly.Load(String assemblyString)

Я нашел разные статьи в Интернете.

В этом KB говорилось, что я мог восстановить базу данных с другого SQL Server, чего, клянусь, я не делал.

В этом блоге сказано, что я могу столкнуться с этим, если установлю .NET 3.5 на SQL Server 2005, но у меня был SQL Server 2008 R2, и я ничего не устанавливал, когда возникает эта проблема.

Суть в том, что он может продолжаться какое-то время. Просто перестает работать хаотично. Затем, если мы перезапустим SQL Server, он снова заработает. Я думал, что моему серверу действительно не хватает памяти, но теперь я снова вижу проблему. SQL Server использует только 300 МБ ОЗУ, а мой сервер имеет 16 ГБ ОЗУ. Звучит невероятно, потому что у меня заканчивается память.

Теперь я хочу собрать больше информации по этой проблеме. Любой журнал, который я могу включить и посмотреть? Любые предложения, которые помогут устранить эту проблему, приветствуются.

Я выполнил несколько запросов SQL.

SELECT * from sys.dm_clr_properties
=============================================
directory   C:\Windows\Microsoft.NET\Framework64\v2.0.50727\
version v2.0.50727
state   CLR is initialized

.

SELECT * from sys.dm_clr_appdomains
======================================================
0x0000000087160240  3   mydatabase.dbo[runtime].2   2011-08-12 08:44:08.940 10  1   E_APPDOMAIN_SHARED  1   1

.

SELECT * from sys.dm_clr_tasks
======================================================
0x000000008185A080  0x00000000818562C8  0x0000000000000000  E_TASK_ATTACHED_TO_CLR  E_ABORT_NONE    E_TYPE_ADUNLOAD 0   0
0x00000000818CE080  0x00000000818CA2C8  0x0000000000000000  E_TASK_ATTACHED_TO_CLR  E_ABORT_NONE    E_TYPE_FINALIZER    0   0
0x0000000081AD4C30  0x000000000400D048  0x0000000000000000  E_TASK_ATTACHED_TO_CLR  E_ABORT_NONE    E_TYPE_USER 0   0

.

SELECT * from sys.dm_clr_loaded_assemblies

* UPDATE *

На моем SQL Server я создал четыре базы данных. К каждому из них прикреплен один и тот же узел. Теперь SQL Server отказался загрузить сборку и дал мне указанную выше ошибку.

SELECT * from sys.dm_clr_appdomains показывает мне, что в тот момент был загружен только один appdomain и SELECT * из sys.dm_clr_loaded_assemblies показал, что сборки не загружены вообще.

Затем я запустил ту же хранимую процедуру в трех других базах данных. Он сработал, успешно загрузил сборки и успешно выполнил сохраненную процедуру. После выполнения сохраненной процедуры. SELECT * из sys.dm_clr_appdomains теперь показывает мне, что загружены только четыре appdomains, а SELECT * из sys.dm_clr_loaded_assemblies показал мне, что теперь загружены три сборки.

Это имеет смысл. Теперь я надеюсь, что если я снова запустил сохраненную процедуру в исходной базе данных, сборка должна быть загружена как есть. Угадай, что. Нет, это не так. Это все еще дает мне ту же ошибку. Похоже, эта база данных полностью зависла. Единственный способ исправить это - перезагрузить SQL Server. Я надеюсь, что где-то в системной таблице есть флаг / блокировка, поддерживающая это. Я не могу найти это. Любая идея приветствуется.

Теперь мой SQL Server находится в состоянии, требующем от меня перезагрузки, чтобы он снова заработал.

* ОБНОВЛЕНИЕ (31.08.2011) *

Похоже, это связано с владельцем базы данных. Это довольно сложно. У нас есть два сайта и два леса AD. Компьютер с SQL Server присоединен к лесу A, но владелец базы данных находится в лесу B. Соединение между лесом A и лесом B не так стабильно, поскольку они находятся на двух разных сайтах, физически связанных глобальной сетью.

Как только я изменю базу данных владелец учетной записи SQL (учетная запись не в Windows), моя хранимая процедура работает уже пару недель без перебоев.

Я приму ответ, если кто-нибудь сможет его объяснить.

43
задан LittleBobbyTables 8 August 2013 в 14:00
поделиться

1 ответ

Я восстановил DB с сервера на мою локальную машину и столкнулся с этой ошибкой. Попробуйте ниже двух запросов. Для меня работал первый запрос:

- Первый Запрос

ALTER DATABASE [database_name] SET TRUSTWORTHY ON;
GO

USE [database_name]
GO

EXEC sp_changedbowner 'sa'
GO

- Второй Запрос - Включение Интеграции CLR, если это имеет значение false

IF ((SELECT [value] FROM sys.configurations WHERE [name] = 'clr enabled') = 0)
BEGIN
EXEC sp_configure 'clr enabled', 1
RECONFIGURE
END
GO

- Отключение CLR строгая безопасность, если это имеет значение true

IF EXISTS(SELECT 1 FROM SYS.CONFIGURATIONS WHERE name = 'clr strict security' AND [value] = 1)
BEGIN
IF EXISTS(SELECT 1 FROM SYS.CONFIGURATIONS WHERE name = 'show advanced options' AND [value] = 0)
BEGIN
EXEC sp_configure 'show advanced options', 1
RECONFIGURE 
END
EXEC sp_configure 'clr strict security', 0
RECONFIGURE 
END
GO
GO
0
ответ дан 26 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: