Saya ingin memaksa AppDomain yang digunakan oleh SQLCLR untuk diatur ulang. Bagaimana saya bisa melakukan itu selain memulai kembali contoh SQL Server?
sql-server
sql-clr
Justin Dearing
sumber
sumber
Jawaban:
Saya tahu ini agak brutal, tetapi bagaimana dengan menonaktifkan CLR dan mengaktifkannya kembali?
sumber
ALTER ASSEMBLY
diperbanyak melalui pengiriman log yang tidak memuat ulang (atau setidaknya membongkar) App Domain adalah bug. Either way, saya menemukan metode yang lebih mudah yang saya tambahkan ke jawaban saya di sini. Jika Anda memiliki kemampuan untuk menguji metode baru ini, itu akan menjadi hebat karena saya sangat ingin tahu apakah itu berfungsi dalam skenario pengiriman log yang Anda jelaskan.Ada solusi yang lebih elegan yang tidak akan memengaruhi semua majelis lain: cukup ubah PERMISSION_SET dari salah satu majelis dalam domain aplikasi (domain aplikasi adalah per pengguna).
Ingatlah bahwa Anda perlu mengatur PERMISSION_SET kembali ke seperti semula. Selain itu, Anda perlu mengakses metode dalam perakitan sebelum mengubah PERMISSION_SET akan membongkar itu; mengubah rakitan yang saat ini tidak dimuat ke domain aplikasi yang aktif, tetapi dengan rakitan lain, tidak berpengaruh pada domain aplikasi (Domain Aplikasi adalah per-DB, per-Pengguna, bukan per-Majelis).
PEMBARUAN
Metode yang dijelaskan di atas adalah pendekatan yang paling tepat di mana ia hanya akan membongkar satu Domain Aplikasi itu. Tapi, itu memang mengharuskan perakitan dapat diatur ke salah satu dari dua level lainnya. Untuk majelis yang ditandai karena
SAFE
hanya akan dimungkinkan jika salah satunyaTRUSTWORTHY ON
, atauEXTERNAL ACCESS ASSEMBLY
atauUNSAFE ASSEMBLY
izinDalam hal ini Anda dapat dengan mudah mengubah
TRUSTWORTHY
pengaturanON
dan kemudian segera kembaliOFF
lagi dan itu akan membongkar semua Domain Aplikasi dalam database tertentu:Jika Anda hanya memiliki satu App Domain dalam basis data (dan saya kira ini adalah kasus 95%, atau lebih, pada saat itu), maka kedua metode yang dijelaskan di sini memiliki efek bersih yang sama. Dan dalam situasi itu,
ALTER DATABASE
metode ini tampak lebih sederhana karena tidak memerlukan menentukan nama objek tertentu juga tidak perlu mengetahui apa yang asliPERMISSION_SET
.JUGA, jika Anda hanya memiliki satu App Domain maka
ALTER DATABASE
metodenya lebih sederhana bahkan dalam kasus di mana database sudah diaturTRUSTWORTHY ON
atau Anda telah mengatur login basis-kunci dengan izin yang sesuai. Jika Anda menggunakan login berbasis kunci maka Anda dapat mengaturTRUSTWORTHY
keON
dan kemudianOFF
lagi seperti yang disebutkan di atas. Tetapi jika Anda sudahTRUSTWORTHY
menyetel keON
, maka balikkan dan atur keOFF
lalu segera kembali keON
:sumber
SELECT * FROM sys.dm_clr_appdomains;
. Manis.