Anwendungsentwicklung: Programmieren von Serveranwendungen

Modi zur Ausführungssteuerung von CLR-Routinen (Klausel EXECUTION CONTROL)

Als Datenbankadministrator oder Anwendungsentwickler können Sie die Baugruppen, die den externen DB2 Universal Database-Routinen zugeordnet sind, vor unerwünschtem Zugriff schützen, indem Sie die Aktionen von Routinen während der Ausführung beschränken. DB2 .NET-CLR-Routinen (Common Language Run Time) unterstützen die Angabe eines Modus zur Ausführungssteuerung, der angibt, welche Typen von Aktionen eine Routine zur Laufzeit ausführen darf. DB2 kann während der Ausführung erkennen, ob die Routine versucht, Aktionen auszuführen, die außerhalb des Bereichs des zugehörigen Modus zur Ausführungssteuerung sind; dies kann nützlich sein, wenn Sie bestimmen wollen, ob eine Baugruppe beeinträchtigt wurde.

Zum Festlegen des Modus zur Ausführungssteuerung für eine CLR-Routine geben Sie für die Routine in der Anweisung CREATE die optionale Klausel EXECUTION CONTROL an. Gültige Modi:

Wenn Sie den Modus zur Ausführungssteuerung in einer vorhandenen CLR-Routine modifizieren möchten, führen Sie die Anweisung ALTER PROCEDURE oder ALTER FUNCTION aus.

Wenn die Klausel EXECUTION CONTROL für eine CLR-Routine nicht angegeben ist, wird die CLR-Routine standardmäßig unter Verwendung des restriktivsten Modus zur Ausführungssteuerung, im Modus SAFE, ausgeführt. Routinen, die mit diesem Modus zur Ausführungssteuerung erstellt werden, können nur auf Ressourcen zugreifen, die vom Datenbankmanager gesteuert werden. Weniger restriktive Modi zur Ausführungssteuerung lassen zu, dass eine Routine auf Dateien im lokalen Dateisystem (FILEREAD oder FILEWRITE) oder im Netzwerk zugreift. Der Modus zur Ausführungssteuerung UNSAFE gibt an, dass für das Verhalten der Routine keine Einschränkungen gelten sollen. Routinen, die mit dem Modus zur Ausführungssteuerung UNSAFE definiert sind, können Binärcode ausführen.

Diese Steuerungsmodi stellen eine Hierarchie zulässiger Aktionen dar, und ein Modus einer höheren Ebene schließt Aktionen ein, die sich in der Hierarchie unterhalb von ihm befinden. Beispiel: Der Modus zur Ausführungssteuerung NETWORK lässt zu, dass eine Routine auf Dateien im Netzwerk, auf Dateien im lokalen Dateisystem und auf Ressourcen zugreift, die vom Datenbankmanager gesteuert werden. Verwenden Sie den restriktivsten Modus zur Ausführungssteuerung, und vermeiden Sie die Verwendung des Modus UNSAFE.

Wenn DB2 UDB zur Laufzeit erkennt, dass eine CLR-Routine versucht, eine Aktion außerhalb des Geltungsbereichs seines Modus zur Ausführungssteuerung auszuführen, gibt DB2 UDB einen Fehler zurück (SQLSTATE 38501).

Die Klausel EXECUTION CONTROL kann nur für CLR-Routinen angegeben werden. Der Bereich der Anwendbarkeit der Klausel EXECUTION CONTROL ist auf die .NET-CLR-Routine selbst begrenzt und kann nicht auf andere Routinen erweitert werden, die sie möglicherweise aufruft.

Maximale Dezimalgenauigkeit und Anzahl der Kommastellen in CLR-Routinen

Der Datentyp DECIMAL in DB2 Universal Database (UDB) wird mit einer Genauigkeit von 31 Stellen und mit 28 Kommastellen dargestellt. Der .NET-CLR-Datentyp System.Decimal ist auf eine Genauigkeit von 29 Stellen und 28 Kommastellen begrenzt. Deshalb dürfen externe DB2 UDB-CLR-Routinen höchstens den Wert (2^96)-1 zuordnen, den höchsten Wert, der mit der Genauigkeit von 29 Stellen und mit 28 Kommastellen in einer Variablen des Datentyps System.Decimal dargestellt werden kann. DB2 UDB verursacht den Laufzeitfehler (SQLSTATE 22003, SQLCODE -413), wenn eine solche Zuordnung erfolgt.

Wenn bei der Ausführung einer Anweisung zur Routinenerstellung ein Parameter mit dem Datentyp DECIMAL definiert wird, der mehr als 28 Kommastellen aufweist, verursacht DB2 UDB den Fehler (SQLSTATE 42611, SQLCODE -604).

[ Seitenanfang |Vorherige Seite | Nächste Seite | Inhaltsverzeichnis ]