Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » Unterstützung für externe Umgebungen in SQL Anywhere

 

Übersicht über externe Umgebungen

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.

Katalogtabellen

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.

Veraltete Optionen

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.

SQL-Anweisungen

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: