Quiero forzar el reinicio del AppDomain que SQLCLR está utilizando. ¿Cómo puedo hacer eso además de reiniciar la instancia de SQL Server?
sql-server
sql-clr
Justin Dearing
fuente
fuente

Respuestas:
Sé que esto es un poco brutal, pero ¿qué hay de deshabilitar el CLR y volver a habilitarlo?
fuente
ALTER ASSEMBLYpropagación a través del envío de registros que no volvió a cargar (o al menos no descargó) el dominio de la aplicación fue el error. De cualquier manera, encontré un método aún más fácil que agregué a mi respuesta aquí. Si tuviera la capacidad de probar este nuevo método, sería genial, ya que tengo mucha curiosidad por ver si funciona en el escenario de envío de registros que describió.Hay una solución más elegante que no afectará a todos los demás conjuntos: simplemente cambie el PERMISSION_SET de uno de los conjuntos en el dominio de la aplicación (los dominios de la aplicación son por usuario).
Solo recuerde que deberá volver a establecer el PERMISSION_SET a lo que era. Además, debe acceder a un método en el ensamblaje antes de cambiar el PERMISSION_SET para descargarlo; cambiar un ensamblaje que no está cargado actualmente en un dominio de aplicación que está activo, pero con otro ensamblaje, no tiene ningún efecto en el dominio de la aplicación (los dominios de aplicación son por DB, por usuario, no por ensamblaje).
ACTUALIZACIÓN
El método descrito anteriormente es el enfoque más detallado donde solo descargará ese dominio de aplicación. Pero sí requiere que el ensamblaje se pueda establecer en uno de los otros dos niveles. Para conjuntos marcados como
SAFEsolo será posible siTRUSTWORTHY ON, oEXTERNAL ACCESS ASSEMBLYelUNSAFE ASSEMBLYpermiso o el permisoEn este caso, simplemente puede cambiar la
TRUSTWORTHYconfiguraciónONe inmediatamente volver deOFFnuevo y eso descargará todos los dominios de aplicaciones en esa base de datos en particular:Si de todos modos solo tiene un dominio de aplicación en la base de datos (y sospecho que este es el caso el 95% o más del tiempo), entonces los dos métodos descritos aquí tienen el mismo efecto neto. Y en esa situación, el
ALTER DATABASEmétodo parece más simple, ya que no requiere especificar un nombre de objeto en particular ni requiere saber cuál era el originalPERMISSION_SET.TAMBIÉN, si solo tiene un único dominio de aplicación, entonces el
ALTER DATABASEmétodo es más simple incluso en el caso de que la base de datos ya esté configuradaTRUSTWORTHY ONo haya configurado el inicio de sesión de base de clave con el permiso apropiado. Si está utilizando un inicio de sesión basado en clave entonces se puede establecerTRUSTWORTHYqueONa continuación,OFFde nuevo como se mencionó anteriormente. Pero si ya loTRUSTWORTHYconfiguróON, simplemente inviértalo y configúreloOFFy luego vuelva inmediatamente aON:fuente
SELECT * FROM sys.dm_clr_appdomains;. Dulce.