답변:
나는 이것이 약간 잔인하다는 것을 알고 있지만 CLR을 비활성화하고 다시 활성화하는 것은 어떻습니까?
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 0;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
ALTER ASSEMBLY
앱 도메인을 다시로드하지 않거나 최소한 언로드하지 않은 로그 전달을 통해 전파 된 것이 버그 라고 말하고 있었습니다. 어느 쪽이든, 나는 여기에 내 대답에 더 쉬운 방법을 찾았습니다. 이 새로운 방법을 테스트 할 수 있다면 설명 된 로그 전달 시나리오에서 작동하는지 궁금합니다.
다른 모든 어셈블리에 영향을 미치지 않는보다 우아한 솔루션이 있습니다. 앱 도메인에서 어셈블리 중 하나의 PERMISSION_SET을 변경하면됩니다 (앱 도메인은 사용자 당).
ALTER ASSEMBLY [AssemblyName] WITH PERMISSION_SET = {1 of the 2 levels that
this assembly is not current at}
PERMISSION_SET을 원래 상태로 다시 설정해야합니다. 또한 PERMISSION_SET을 변경하여 언로드하기 전에 어셈블리의 메소드에 액세스해야합니다. 현재 활성화 된 앱 도메인에로드되지 않은 어셈블리를 변경해도 다른 어셈블리와 함께 앱 도메인에는 영향을 미치지 않습니다 (앱 도메인은 DB 별, 사용자 별, 어셈블리 별이 아님).
업데이트
위에서 설명한 방법은 하나의 App Domain 만 언로드하는 가장 세분화 된 방법입니다. 그러나 어셈블리를 다른 두 레벨 중 하나로 설정할 수 있어야합니다. 표시된 것으로 표시된 어셈블리의 SAFE
경우
TRUSTWORTHY ON
있거나EXTERNAL ACCESS ASSEMBLY
또는 UNSAFE ASSEMBLY
권한 이 부여 된 경우이 경우 TRUSTWORTHY
설정 ON
을 변경 한 다음 즉시 다시 되돌릴 수 OFF
있으며 해당 데이터베이스에서 모든 앱 도메인 이 언로드 됩니다.
ALTER DATABASE CURRENT SET TRUSTWORTHY ON;
ALTER DATABASE CURRENT SET TRUSTWORTHY OFF;
어쨌든 데이터베이스에 하나의 App Domain 만있는 경우 (그리고 이것이 95 % 이상인 것으로 생각되는 경우) 여기에 설명 된 두 가지 방법 모두 동일한 효과를 나타냅니다. 그리고이 상황에서는 ALTER DATABASE
특정 객체 이름을 지정할 필요가없고 원본 PERMISSION_SET
이 무엇인지 알 필요가 없기 때문에이 방법이 더 단순 해 보입니다 .
또한 단일 App Domain 만 ALTER DATABASE
있는 경우 데이터베이스가 이미 설정되어 TRUSTWORTHY ON
있거나 적절한 권한으로 키베이스 로그인을 설정 한 경우에도 방법이 더 간단 합니다. 당신이 키 기반 로그인을 사용하는 경우에 당신은 설정할 수 있습니다 TRUSTWORTHY
에 ON
다음 OFF
다시 위에서 언급했다. 그러나 이미로 TRUSTWORTHY
설정 한 경우에는 ON
반대로 설정 OFF
한 다음 즉시 다시 설정하십시오 ON
.
ALTER DATABASE CURRENT SET TRUSTWORTHY OFF;
ALTER DATABASE CURRENT SET TRUSTWORTHY ON;
SELECT * FROM sys.dm_clr_appdomains;
. 단.