Chcę wymusić resetowanie AppDomain przez SQLCLR. Jak mogę to zrobić oprócz zrestartowania instancji SQL Server?
sql-server
sql-clr
Justin Dearing
źródło
źródło
Odpowiedzi:
Wiem, że to trochę brutalne, ale co z wyłączeniem CLR i ponownym włączeniem?
źródło
ALTER ASSEMBLY
propagowany przez wysyłanie dziennika, który nie przeładował (lub przynajmniej rozładował) domeny aplikacji. Tak czy inaczej, znalazłem jeszcze łatwiejszą metodę, którą dodałem tutaj do mojej odpowiedzi. Jeśli miałbyś możliwość przetestowania tej nowej metody, byłoby świetnie, ponieważ jestem bardzo ciekawy, czy działa ona w opisanym scenariuszu wysyłania dziennika.Istnieje bardziej eleganckie rozwiązanie, które nie wpłynie na wszystkie inne zestawy: wystarczy zmienić PERMISSION_SET jednego z zestawów w domenie aplikacji (domeny aplikacji są na użytkownika).
Pamiętaj tylko, że musisz ustawić PERMISSION_SET z powrotem na to, co było. Musisz także uzyskać dostęp do metody w zespole, zanim zmiana PERMISSION_SET spowoduje jej rozładowanie; zmiana zestawu, który nie jest aktualnie ładowany do domeny aplikacji, która jest aktywna, ale z innym zestawem, nie ma wpływu na domenę aplikacji (Domeny aplikacji są na DB, na użytkownika, a nie na zestaw).
AKTUALIZACJA
Opisana powyżej metoda jest najbardziej szczegółowym podejściem, w którym zwalnia tylko jedną domenę aplikacji. Wymaga to jednak ustawienia zestawu na jednym z dwóch pozostałych poziomów. W przypadku zespołów oznaczonych jako
SAFE
będzie to możliwe tylko wtedy, gdy jedno z nichTRUSTWORTHY ON
, lubEXTERNAL ACCESS ASSEMBLY
czyUNSAFE ASSEMBLY
zezwolenieW takim przypadku możesz po prostu zmienić
TRUSTWORTHY
ustawienie,ON
a następnie natychmiastOFF
ponownie powrócić, a to zwolni wszystkie Domeny aplikacji w tej konkretnej bazie danych:Jeśli i tak masz tylko jedną domenę aplikacji w bazie danych (i podejrzewam, że tak jest w 95% lub więcej przypadków), wówczas obie opisane tutaj metody mają ten sam efekt netto. W tej sytuacji
ALTER DATABASE
metoda wydaje się prostsza, ponieważ nie wymaga podania nazwy konkretnego obiektu ani znajomości oryginalnego obiektuPERMISSION_SET
.RÓWNIEŻ, jeśli masz tylko jedną domenę aplikacji,
ALTER DATABASE
metoda jest prostsza, nawet w przypadku, gdy baza danych jest już ustawiona naTRUSTWORTHY ON
lub skonfigurowano logowanie do bazy kluczy z odpowiednim uprawnieniem. Jeśli używasz logowania opartego na kluczach, możesz ustawićTRUSTWORTHY
na,ON
a następnieOFF
ponownie, jak wspomniano powyżej. Ale jeśli jużTRUSTWORTHY
ustawiłeśON
, po prostu odwróć go i ustaw na,OFF
a następnie natychmiast z powrotem naON
:źródło
SELECT * FROM sys.dm_clr_appdomains;
. Słodkie.