Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server 2008:Wie absturzsicher ist eine gespeicherte CLR-Prozedur, die nicht verwaltete Bibliotheken lädt

Da dieser Code ursprünglich mit erweiterten gespeicherten Prozeduren verwendet wurde, klingt es wie nicht verwalteter Code. Fehler in nicht verwaltetem Code können Ihren Prozess leicht zum Absturz bringen.

Die CLR-Integration ist viel robuster als erweiterte gespeicherte Prozeduren, aber der Code wird immer noch prozessintern ausgeführt, sodass Fehler SQL Server zum Absturz bringen oder beschädigen können. (Zum Vergleich:Theoretisch ist eine SAFE CLR-Routine nicht in der Lage, SQL Server zu beschädigen, obwohl selbst sie Probleme verursachen könnte, die die Verfügbarkeit Ihres Servers verringern, ohne den SQL Server vollständig herunterzufahren.)

Grundsätzlich gibt es in diesem Szenario die einzigen Möglichkeiten, SQL Server nicht zum Absturz zu bringen:

  1. Vermeiden Sie die Verwendung der Funktion, die abstürzt.
  2. Beheben Sie den fehlerhaften Code.
  3. Führen Sie den Code in einem separaten Prozess aus (starten Sie eine ausführbare Datei, rufen Sie einen Windows-Dienst auf, rufen Sie einen Webdienst auf usw.). Sie können eine verwaltete .NET-DLL schreiben, um diese Interaktion auszuführen. Höchstwahrscheinlich müssen Sie es immer noch UNSAFE laden, aber – wenn es richtig geschrieben ist – kann es in Wirklichkeit ziemlich sicher sein.