SQL Anywhere stellt Unterstützung für sechs externe Laufzeitumgebungen bereit. Diese umfassen Embedded SQL und ODBC-Anwendungen, die in C/C++ geschrieben wurden, sowie in Java, Perl, PHP oder in Sprachen wie C# und Visual Basic geschriebene Anwendungen, die auf der Common Language Runtime (CLR) von Microsoft basieren.
SQL Anywhere besaß für einige Zeit die Fähigkeit, kompilierte native Funktionen, die in C oder C++ geschrieben waren, aufzurufen. Wenn diese Prozeduren vom Server ausgeführt wurden, wurde die dynamische Verknüpfungsbibliothek (DLL) oder das gemeinsam genutzte Objekt (Shared Object) immer vom Datenbankserver geladen und die Aufrufe der nativen Funktion wurden immer vom Datenbankserver durchgeführt. Dadurch bestand das Risiko, dass der Datenbankserver abstürzte, wenn die native Funktion einen Fehler verursachte. Durch die Ausführung kompilierter nativer Funktionen außerhalb des Datenbankservers in einer externen Umgebung wird dieses Risiko nun vermieden.
Es folgt ein Überblick über die Unterstützung von externen Umgebungen in SQL Anywhere.
Eine Systemkatalogtabelle speichert die Informationen, die zum Identifizieren und Starten der jeweiligen externen Umgebungen benötigt werden. Die Definition dieser Tabelle lautet folgendermaßen:
SYS.SYSEXTERNENV ( object_id unsigned bigint not null, name varchar(128) not null, scope char(1) not null, supports_result_sets char(1) not null, location long varchar not null, options long varchar not null, user_id unsigned int ) |
object_id Ein eindeutiger Bezeichner, der vom Datenbankserver generiert wird.
name Die name-Spalte enthält den Namen der externen Umgebung oder Sprache. Namen können sein: java, perl, php, clr, c_esql32, c_esql64, c_odbc32 oder c_odbc64.
scope Die scope-Spalte ist C für CONNECTION oder D für DATABASE. Die Bereichsspalte zeigt an, ob die externe Umgebung einmal pro Verbindung oder einmal pro Datenbank gestartet wird.
Externe Umgebungen, die einmal pro Verbindung gestartet werden (wie PERL, PHP, C_ESQL32, C_ESQL64, C_ODBC32 und C_ODBC64), läuft eine Instanz der externen Umgebung für jede Verbindung, die die externe Umgebung verwendet. Eine einmal pro Verbindung gestartete externe Umgebung wird hingegen beendet, wenn die Verbindung beendet wird.
Bei einmal pro Datenbank gestarteten externen Umgebungen (wie JAVA und CLR) läuft eine Instanz für jede Datenbank, die die externe Umgebung verwendet. Die einmal pro Datenbank aufgerufene externe Umgebung wird beendet, wenn die Datenbank gestoppt wird.
supports_result_sets Die supports_result_sets-Spalte identifiziert die externen Umgebungen, die Ergebnismengen zurückgeben können. Alle externe Umgebungen können Ergebnismengen zurückgeben, ausgenommen Perl und PHP.
location Die location-Spalte gibt an, wo sich das Programm oder die Binärdatei für die externe Umgebung auf dem Datenbankservercomputer befindet. Sie enthält den Namen des Programms oder der Binärdatei. Der Pfad kann voll qualifiziert oder relativ sein. Wenn der Pfad relativ ist, muss sich das Programm oder die Binärdatei an einem Speicherort befinden, an dem sie der Datenbankserver finden kann.
options Die options-Spalte enthält Optionen, die in der Befehlszeile zum Starten des Programms, das der externen Umgebung zugeordnet ist, eingegeben werden müssen. Diese Spalte sollte nicht geändert werden.
user_id Die user_id-Spalte identifiziert eine Benutzer-ID mit DBA-Berechtigung in der Datenbank. Wenn eine externe Umgebung erstmals aufgerufen wird, muss sie sich mit der Datenbank verbinden, um die für die externe Umgebung erforderlichen Einstellungen einzurichten. Standardmäßig wird diese Verbindung mit der DBA-Benutzer-ID hergestellt. Wenn der Datenbankadministrator die externe Umgebung unter einer anderen Benutzer-ID mit DBA-Berechtigung laufen lassen will, enthält die user_id-Spalte der Tabelle SYS.SYSEXTERNENV diese andere Benutzer-ID. In den meisten Fällen enthält diese Spalte in SYS.SYSEXTERNENV einen NULL-Wert und der Datenbankserver verwendet standardmäßig die DBA-Benutzer-ID.
Eine weitere Systemkatalogtabelle speichert die externen Nicht-Java-Objekte. Die Definition der Tabelle lautet folgendermaßen:
SYS.SYSEXTERNENVOBJECT ( object_id unsigned bigint not null, extenv_id unsigned bigint not null, owner unsigned int not null, name long varchar not null, contents long binary not null, update_time timestamp not null ) |
object_id Ein eindeutiger Bezeichner, der vom Datenbankserver generiert wird.
extenv_id Die extenv_id-Spalte enthält den Typ der externen Umgebung (wie in SYS.SYSEXTERNENV gespeichert).
owner Die owner-Spalte identifiziert den Ersteller/Eigentümer des externen Objekts.
name Die name-Spalte enthält den Namen des externen Objekts, wie er in der Anweisung INSTALL EXTERNAL OBJECT angegeben wurde.
contents Die contents-Spalte identifiziert den Inhalt des externen Objekts.
update_time Die update_time-Spalte enthält den Zeitpunkt, an dem das Objekt zuletzt geändert (oder installiert) wurde.
Mit der Einführung der Tabelle SYS.SYSEXTERNENV sind nun einige Java-spezifische Optionen veraltet. Diese nicht mehr weiterentwickelten Optionen sind:
java_location java_main_userid |
Anwendungen, die diese Optionen verwendet haben, um anzugeben, welche Java VM oder welche Benutzer-ID bei der Installation von Klassen oder anderen Java-bezogenen administrativen Aufgaben verwendet werden soll, sollten stattdessen die Anweisung ALTER EXTERNAL ENVIRONMENT verwenden, um die location- und user_id-Werte in der Tabelle SYS.SYSEXTERNENV für Java einzurichten.
Mit der folgenden SQL-Syntax können Sie Werte in der Tabelle SYS.SYSEXTERNENV einstellen oder ändern.
ALTER EXTERNAL ENVIRONMENT Umgebungsname [ USER Benutzername ] [ LOCATION Standort-Zeichenfolge ] |
Umgebungsname Der Umgebungsname ist ein Bezeichner, der den Namen der Umgebung in SYS.SYSEXTERNENV darstellt. Er kann sein: PERL, PHP, JAVA, CLR, C_ESQL32, C_ESQL64, C_ODBC32 oder C_ODBC64.
Benutzername Die Benutzernamen-Zeichenfolge identifiziert einen Benutzer mit DBA-Berechtigung in der Datenbank. Wenn eine externe Umgebung erstmals aufgerufen wird, muss sie sich mit der Datenbank verbinden, um die für die externe Umgebung erforderlichen Einstellungen einzurichten. Standardmäßig wird diese Verbindung mit der DBA-Benutzer-ID hergestellt. Wenn der Datenbankadministrator die externe Umgebung unter einer anderen Benutzer-ID mit DBA-Berechtigung laufen lassen will, kann er hier die andere Benutzer-ID festlegen. In den meisten Fällen muss diese Option nicht angegeben werden.
Standort-Zeichenfolge Die Standort-Zeichenfolge gibt an, wo sich das Programm oder die Binärdatei für die externe Umgebung auf dem Datenbankservercomputer befindet. Sie enthält den Namen des Programms oder der Binärdatei. Der Pfad kann voll qualifiziert oder relativ sein. Wenn der Pfad relativ ist, muss sich das Programm oder die Binärdatei an einem Speicherort befinden, an dem sie der Datenbankserver finden kann.
Wenn eine externe Umgebung für die Verwendung auf dem Datenbankserver eingerichtet ist, können Sie Objekte in der Datenbank installieren und gespeicherte Prozeduren und Funktionen erstellen, die diese Objekte innerhalb der externen Umgebung nutzen. Die Installation, Erstellung und Nutzung dieser Objekte, gespeicherten Prozeduren und gespeicherten Funktionen ist der Methode sehr ähnlich, mit der derzeit Java- Klassen installiert und gespeicherte Java-Prozeduren und -Funktionen erstellt und verwendet werden.
Um einen Kommentar für eine externe Umgebung hinzuzufügen, verwenden Sie die folgende Syntax:
COMMENT ON EXTERNAL ENVIRONMENT Umgebungsname IS Kommentar_Zeichenfolge |
Um ein externes Objekt (z.B. ein Perl-Skript) von einer Datei oder einem Ausdruck in der Datenbank zu installieren, müssen Sie die Anweisung INSTALL EXTERNAL OBJECT in der folgenden Form verwenden:
INSTALL EXTERNAL OBJECT Objektname-Zeichenfolge [ Aktualisierungsmodus ] FROM { FILE Dateipfad | VALUE Ausdruck } ENVIRONMENT Umgebungsname |
Objektname-Zeichenfolge Die Objektname-Zeichenfolge ist der Name, unter dem das installierte Objekt in der Datenbank gefunden wird.
Aktualisierungsmodus Der Aktualisierungsmodus ist NEW oder UPDATE. Wenn der Aktualisierungsmodus nicht angegeben ist, wird NEW angenommen.
Dateipfad Der Dateipfad ist der Speicherort auf dem Datenbankservercomputer, von dem aus das Objekt installiert wird.
Umgebungsname Der Umgebungsname ist: JAVA, PERL, PHP, CLR, C_ESQL32, C_ESQL64, C_ODBC32 oder C_ODBC64.
Um einen Kommentar für ein installiertes externes Objekt hinzuzufügen, können Sie Folgendes ausführen:
COMMENT ON EXTERNAL ENVIRONMENT OBJECT Objektname-Zeichenfolge IS Kommentar-Zeichenfolge |
Um ein installiertes externes Objekt aus der Datenbank zu entfernen, verwenden Sie die Anweisung REMOVE EXTERNAL OBJECT.
REMOVE EXTERNAL OBJECT Objektname-Zeichenfolge |
Objektname-Zeichenfolge Die Objektname-Zeichenfolge ist dieselbe Zeichenfolge, die in der entsprechenden Anweisung INSTALL EXTERNAL OBJECT angegeben wurde.
Wenn die externen Objekte in der Datenbank installiert sind, können sie in Definitionen für externe gespeicherte Prozeduren und Funktionen verwendet werden (ähnlich dem derzeitigen Mechanismus zur Erstellung von gespeicherten Java-Prozeduren und -Funktionen).
CREATE PROCEDURE Prozedurname(...) EXTERNAL NAME '...' LANGUAGE Umgebungsname |
CREATE FUNCTION Funktionsname(...) RETURNS ... EXTERNAL NAME '...' LANGUAGE Umgebungsname |
Umgebungsname Der Umgebungsname ist: JAVA, PERL, PHP, CLR, C_ESQL32, C_ESQL64, C_ODBC32 oder C_ODBC64.
Wenn diese gespeicherten Prozeduren und Funktionen erstellt sind, können sie wie jede andere gespeicherte Prozedur oder Funktion in der Datenbank verwendet werden. Wenn der Datenbankserver auf eine gespeicherte Prozedur oder Funktion einer externen Umgebung trifft, startet er automatisch die externe Umgebung (falls sie noch nicht gestartet ist) und übersendet alle erforderlichen Informationen, damit die externe Umgebung das externe Objekt in der Datenbank abruft und ausführt. Daraus resultierende Ergebnismengen und Rückgabewerte werden nach Bedarf zurückgegeben.
Wenn Sie eine externe Umgebung explizit starten oder stoppen wollen, können Sie die Anweisung START EXTERNAL ENVIRONMENT bzw. STOP EXTERNAL ENVIRONMENT verwenden (vergleichbar mit den Anwendungen START JAVA und STOP JAVA):
START EXTERNAL ENVIRONMENT Umgebungsname STOP EXTERNAL ENVIRONMENT Umgebungsname |
Umgebungsname Der Umgebungsname ist: JAVA, PERL, PHP, CLR, C_ESQL32, C_ESQL64, C_ODBC32 oder C_ODBC64.
Weitere Hinweise finden Sie unter:
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |