Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008:la protezione dagli arresti anomali è una stored procedure CLR che carica le librerie non gestite

Poiché questo codice è stato originariamente utilizzato con stored procedure estese, sembra che si tratti di codice non gestito. I bug nel codice non gestito possono facilmente causare l'arresto anomalo del processo.

L'integrazione CLR è molto più solida rispetto alle stored procedure estese, ma il codice viene ancora eseguito in-process, quindi gli errori possono bloccare o danneggiare SQL Server. (Per fare un confronto, in teoria, una routine SAFE CLR non sarà in grado di corrompere SQL Server, anche se potrebbe causare problemi che riducono la disponibilità del tuo server senza eliminare completamente SQL Server.)

Fondamentalmente, gli unici modi per non arrestare in modo anomalo SQL Server in questo scenario sono:

  1. Evita di utilizzare la funzionalità che si arresta in modo anomalo.
  2. Correggi il codice difettoso.
  3. Esegui il codice in un processo separato (avvia un eseguibile, chiama un servizio Windows, chiama un servizio Web, ecc.). È possibile scrivere una DLL .NET gestita per eseguire questa interazione. Molto probabilmente, dovrai comunque caricarlo UNSAFE, ma, se è scritto correttamente, in realtà può essere abbastanza sicuro.