Quero forçar o AppDomain usado pelo SQLCLR a ser redefinido. Como posso fazer isso além de reiniciar a instância do SQL Server?
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Existe uma solução mais elegante que não afetará todos os outros assemblies: basta alterar o PERMISSION_SET de um dos assemblies no domínio do aplicativo (os domínios do aplicativo são por usuário).
Lembre-se de que você precisará definir o PERMISSION_SET de volta ao que era. Além disso, você precisa acessar um método no assembly antes de alterar o PERMISSION_SET para descarregá-lo; alterar um assembly que não está carregado no momento em um domínio de aplicativo que está ativo, mas com outro assembly, não tem efeito no domínio de aplicativo (os domínios de aplicativo são por banco de dados, por usuário, não por assembly).
ATUALIZAÇÃO
O método descrito acima é a abordagem mais refinada em que descarregará apenas aquele domínio de aplicativo. Porém, requer que a montagem possa ser definida para um dos outros dois níveis. Para montagens marcadas como
SAFE
só será possível seTRUSTWORTHY ON
, ouEXTERNAL ACCESS ASSEMBLY
ouUNSAFE ASSEMBLY
Nesse caso, você pode simplesmente ativar a
TRUSTWORTHY
configuraçãoON
e, em seguida, voltar imediatamenteOFF
e isso descarregará todos os domínios de aplicativos nesse banco de dados específico:Se você tiver apenas um domínio de aplicativo no banco de dados (e eu suspeito que esse seja o caso em 95% ou mais das vezes), ambos os métodos descritos aqui têm o mesmo efeito líquido. E nessa situação, o
ALTER DATABASE
método parece mais simples, pois não requer a especificação de um nome de objeto específico nem requer saber qualPERMISSION_SET
era o original.TAMBÉM, se você tiver apenas um único domínio de aplicativo, o
ALTER DATABASE
método é mais simples, mesmo no caso em que o banco de dados já esteja definidoTRUSTWORTHY ON
ou você tenha configurado o login de base de chave com a permissão apropriada. Se você estiver usando um login baseado em chave, poderá definir e,TRUSTWORTHY
emON
seguida,OFF
novamente, conforme mencionado acima. Mas se você jáTRUSTWORTHY
configurou paraON
, basta invertê-lo e defini-loOFF
e, em seguida, voltar imediatamente paraON
:Eu sei que isso é um pouco brutal, mas que tal desabilitar o CLR e reativá-lo?