In den folgenden Abschnitten wird beschrieben, wie bestimmte Produkte zur Verwendung von DB2 als Ressourcenmanager konfiguriert werden. Möglich sind:
Informationen zur Konfiguration von IBM TXSeries CICS zur Verwendung von DB2 als Ressourcenmanager finden Sie im Handbuch IBM TXSeries CICS Administration Guide. Die TXSeries-Dokumentation steht online unter http://www.transarc.com/Library/documentation/websphere/WAS-EE/en_US/html/ zur Verfügung.
Host- und AS/400-Datenbank-Server können an CICS-koordinierten Transaktionen teilnehmen.
Im folgenden werden die verschiedenen APIs und Konfigurationsparameter aufgeführt, die für die Integration von Encina Monitor und DB2 Universal Database-Servern oder DB2 für MVS, DB2 für OS/390, DB2 für AS/400 oder DB2 für VSE&VM erforderlich sind, wenn über DB2 Connect darauf zugegriffen wird. Die TXSeries-Dokumentation steht online unter http://www.transarc.com/Library/documentation/websphere/WAS-EE/en_US/html/ zur Verfügung.
Host- und AS/400-Datenbank-Server können an CICS-koordinierten Transaktionen teilnehmen.
Gehen Sie wie folgt vor, um DB2 zu konfigurieren:
DB2 CATALOG DATABASE inventdb AS inventdb AT NODE host1 AUTH SERVER DB2 CATALOG TCPIP NODE host1 REMOTE hostname1 SERVER svcname1
db2 update dbm cfg using tp_mon_name ENCINA
Bei der Konfiguration von Encina für jeden Ressourcenmanager (RM) muß ein Administrator die Zeichenfolge zum Öffnen, die Zeichenfolge zum Schließen und den Thread der Steuerungsvereinbarung für jede DB2-Datenbank als Ressourcenmanager definieren, damit der Ressourcenmanager für Transaktionen in einer Anwendung registriert werden kann. Die Konfiguration kann mit der Enconcole-Gesamtanzeigeschnittstelle oder mit der Encina-Befehlszeilenschnittstelle ausgeführt werden. Beispiel:
monadmin create rm inventdb -open "db=inventdb,uid=benutzer1,pwd=kennwort1"
Es gibt eine Ressourcenmanagerkonfiguration für jede DB2-Datenbank, und jede Konfiguration eines Ressourcenmanagers(RM) muß einen rm-Namen ("logischen RM-Namen") haben. Dieser sollte zur Vereinfachung mit dem Datenbanknamen übereinstimmen.
Die XA-Zeichenfolge zum Öffnen (xa_open) enthält Informationen, die erforderlich sind, um eine Verbindung zur Datenbank herzustellen. Der Inhalt der Zeichenfolge ist RM-spezifisch. Die XA-Zeichenfolge zum Öffnen von DB2 UDB enthält den Aliasnamen der Datenbank, die geöffnet werden soll, und wahlweise eine Benutzer-ID und ein Kennwort, die der Verbindung zugeordnet werden sollen. Beachten Sie, daß der hier definierte Datenbankname auch in dem normalen Datenbankverzeichnis katalogisiert werden muß, das für alle Datenbankzugriffe erforderlich ist. Informationen über die XA-Zeichenfolge zum Öffnen von DB2 finden Sie in Einrichten einer Datenbank als Ressourcenmanager.
Die XA-Zeichenfolge zum Schließen (xa_close) wird von DB2 nicht verwendet.
Der Thread der Steuerungsvereinbarung (Thread of Control Agreement) bestimmt, ob ein Anwendungsagent-Thread mehrere Transaktionen gleichzeitig verarbeiten kann. DB2 UDB unterstützt den Standardwert von TMXA_SERIALIZE_ALL_OPERATIONS, wonach ein Thread nur dann wiederverwendet werden kann, wenn eine Transaktion vollständig beendet ist.
Wenn Sie auf DB2 für OS/390, DB2 für MVS, DB2 für AS/400 oder DB2 für VSE&VM zugreifen, müssen Sie den DB2-Synchronisationspunktmanager verwenden. Weitere Informationen zur Konfiguration finden Sie im Handbuch DB2 Connect Enterprise Edition für OS/2 und Windows Einstieg.
Gehen Sie wie folgt vor, um auf eine DB2-Datenbank aus einer Encina-Anwendung zu verweisen:
rc = mon_SetSchedulingPolicy (MON_EXCLUSIVE)
Für DB2 (DB2 Universal Database, Host- oder AS/400-Datenbank-Server) müssen Sie die Standardeinstellung MON_EXCLUSIVE verwenden. Damit wird sichergestellt, daß:
Anmerkung: | Wenn Sie ODBC oder DB2 Call Level Interface verwenden, müssen Sie die Multithreading-Unterstützung inaktivieren. Sie können dazu den Konfigurationsparameter der Befehlszeilenschnittstelle folgendermaßen einstellen: DISABLEMULTITHREAD = 1 (inaktiviert das Multithreading). Der Standardwert für DB2 Universal Database ist DISABLEMULTITHREAD = 0 (aktiviert das Multithreading). Weitere Informationen finden Sie im Handbuch CLI Guide and Reference. |
rc = mon_RegisterRmi ( &db2xa_switch, /* xa-Schalter */ "inventdb", /* logischer RM-Name */ &rmiId ); /* interne RM-ID */
Der XA-Schalter enthält die Adressen der XA-Routinen im RM, die der TM aufrufen kann. Er gibt auch die Funktionalität an, die vom RM bereitgestellt wird. Der XA-Schalter von DB2 Universal Database ist db2xa_switch, und er befindet sich in der DB2-Client-Bibliothek (db2app.dll auf Windows-Betriebssystemen und OS/2 sowie libdb2 auf UNIX-basierten Systemen).
Von Encina wird der logische RM-Name und nicht der eigentliche Name der Datenbank verwendet, die von der SQL-Anwendung verwendet wird, die unter Encina ausgeführt wird. Der tatsächliche Name der Datenbank wird in der XA-Zeichenfolge zum Öffnen in der Encina RM Registration-API angegeben. Der logische RM-Name in diesem Beispiel stimmt mit dem Datenbanknamen überein.
Der dritte Parameter gibt eine interne Kennung zurück, die vom TM verwendet wird, um auf diese Verbindung zu verweisen.
Anmerkung: | Wenn Encina für die Transaktionsverarbeitung mit DB2 über die TM-XA-Schnittstelle verwendet wird, ist zu beachten, daß verschachtelte Encina-Transaktionen von der DB2-XA-Schnittstelle zur Zeit nicht unterstützt werden. Eine Verwendung dieser Transaktionen sollte nach Möglichkeit vermieden werden. Wenn dies nicht möglich ist, stellen Sie sicher, daß die SQL-Arbeit in nur einem Mitglied der Encina-Transaktionsfamilie durchgeführt wird. |
Führen Sie die folgenden Schritte aus, um Tuxedo zur Verwendung von DB2 als Ressourcenmanager zu konfigurieren:
Sie benötigen auch einen Compiler und das DB2 Application Development Client. Installieren Sie diese, falls erforderlich.
# DB2 UDB UDB_XA:db2xa_switch:-L${DB2DIR} /lib -ldb2Dabei ist {TUXDIR} das Verzeichnis, in dem Sie Tuxedo installiert haben, und {DB2DIR} das Verzeichnis des DB2-Exemplars.
# DB2 UDB UDB_XA;db2xa_switch;%DB2DIR%\lib\db2api.libDabei ist %TUXDIR% das Verzeichnis, in dem Sie Tuxedo installiert haben, und %DB2DIR% das Verzeichnis des DB2-Exemplars.
${TUXDIR}/bin/buildtms -r UDB_XA -o ${TUXDIR}/bin/TMS_UDBDabei ist {TUXDIR} das Verzeichnis, in dem Sie Tuxedo installiert haben.
%TUXDIR%\bin\buildtms -r UDB_XA -o %TUXDIR%\bin\TMS_UDB
${TUXDIR}/bin/buildserver -r UDB_XA -f svcfile.o -s SVC1,SVC2 -o UDBserverDabei ist {TUXDIR} das Verzeichnis, in dem Sie Tuxedo installiert haben.
%TUXDIR%\bin\buildserver -r UDB_XA -f svcfile.o -s SVC1,SVC2 -o UDBserverDabei ist %TUXDIR% das Verzeichnis, in dem Sie Tuxedo installiert haben.
UDB_GRP LMID=simp GRPNO=3 TMSNAME=TMS_UDB TMSCOUNT=2 OPENINFO="UDB_XA:db=sample,uid=db2_benutzer,pwd=db2_benutzer_kwt"Dabei gibt der Parameter TMSNAME das Transaktionsmonitor-Server-Programm an, das Sie zuvor erstellt haben, und der Parameter OPENINFO gibt den Ressourcenmanagernamen an. Darauf folgen der Datenbankname und DB2-Benutzer und Kennwort, die für die Authentifizierung verwendet werden.
Die Anwendungs-Server, die Sie zuvor erstellt haben, werden im Abschnitt *SERVERS der Tuxedo-Konfigurationsdatei angegeben.
tmboot -yNach Beendigung des Befehls sollten Tuxedo-Nachrichten angeben, daß die Server gestartet wurden. Außerdem sollten Sie, wenn Sie den DB2-Befehl LIST APPLICATIONS ALL absetzen, zwei Verbindungen sehen (in diesem Fall die vom Parameter TMSCOUNT in der UDB-Gruppe in der Tuxedo-Konfigurationsdatei UDBCONFIG angegebenen).
DB2 UDB Version 5.2 und spätere Versionen können vollständig mit Microsoft Transaction Server (MTS) Version 2.0 integriert werden. Anwendungen, die unter MTS auf 32-Bit-Windows-Betriebssystemen ausgeführt werden, können MTS verwenden, um eine zweiphasige Festschreibung mit mehreren DB2 UDB-, Host- und AS/400-Datenbank-Servern sowie mit anderen MTS-konformen Ressourcenmanagern zu koordinieren.
Die MTS-Unterstützung wird automatisch aktiviert. Obgleich Sie den Konfigurationsparameter tp_mon_name des Datenbankmanagers auf MTS setzen können, ist dies nicht notwendig und wird ignoriert.
Anmerkung: | Zusätzliche technische Informationen stehen eventuell auf der IBM Web-Site bereit, um Ihnen bei der Installation und Konfiguration der MTS-Unterstützung von DB2 zu helfen. Geben Sie die URL-Adresse http://www.ibm.com/software/data/db2/library/ an, und suchen Sie nach einem DB2 Universal Database-Artikel ("Technote") mit dem Suchbegriff MTS. |
Die MTS-Unterstützung benötigt DB2 Client Application Enabler (CAE) Version 5.2 oder später, und MTS muß Version 2.0 mit Hotfix 0772 oder höheren Releases haben.
Bei der Installation des DB2-ODBC-Treibers auf 32-Bit-Windows-Betriebssysteme wird automatisch ein neues Schlüsselwort in die Registrierdatenbank eingefügt:
HKEY_LOCAL_MACHINE\software\ODBC\odbcinit.ini\IBM DB2 ODBC Driver: Wert des Schlüsselworts: CPTimeout Datentyp: REG_SZ Wert: 60
Der folgende Abschnitt bietet eine Zusammenfassung von Überlegungen zur Installation und Konfiguration von MTS. Zur Verwendung der MTS-Unterstützung von DB2 müssen folgende Voraussetzungen erfüllt werden:
Wenn Sie CLI/ODBC-Anwendungen ausführen, dürfen die Standardwerte der folgenden Konfigurationsschlüsselwörter (die in der Datei db2cli.ini festgelegt sind) nicht geändert werden:
CLI-Anwendungen, die für die Verwendung der MTS-Unterstützung geschrieben wurden, dürfen nicht die Attributwerte ändern, die den obigen Schlüsselwörtern entsprechen. Außerdem dürfen die Anwendungen nicht die Standardwerte der folgenden Attribute ändern:
Anmerkung: | Zusätzliche technische Informationen stehen eventuell auf der IBM Web-Site bereit, um Ihnen bei der Installation und Konfiguration der MTS-Unterstützung von DB2 zu helfen. Geben Sie die URL-Adresse http://www.ibm.com/software/data/db2/library/ an, und suchen Sie nach einem DB2 Universal Database-Artikel ("Technote") mit dem Suchbegriff MTS. |
Die folgenden Server werden für die Aktualisierung auf mehreren Systemen mit Hilfe von MTS-koordinierten Transaktionen unterstützt:
Sie können den Wert für das Transaktionszeitlimit im MTS Explorer-Tool festlegen. Weitere Informationen finden Sie online im MTS Administrator Guide.
Wenn eine Transaktion länger dauert als das Transaktionszeitlimit (der Standardwert ist 60 Sekunden), setzt MTS asynchron eine Abbruchanforderung an alle betroffenen Ressourcenmanager ab, und die gesamte Transaktion wird abgebrochen.
Für die Verbindung zu einem DB2-Server wird die Abbruchanforderung in eine DB2-Anforderung ROLLBACK übersetzt. Wie alle anderen Datenbankanforderungen wird die ROLLBACK-Anforderung auf der Verbindung serialisiert, um die Integrität der Daten auf dem Datenbank-Server zu gewährleisten.
Ergebnis:
Der Verbindungspool erlaubt es einer Anwendung, eine Verbindung aus einem Pool von Verbindungen zu verwenden, so daß die Verbindung nicht für jede Verwendung erneut erstellt werden muß. Nachdem eine Verbindung erstellt und einem Pool hinzugefügt wurde, kann eine Anwendung diese Verbindung erneut verwenden, ohne einen vollständigen Verbindungsprozeß ausführen zu müssen. Die Verbindung wird dem Pool hinzugefügt, wenn die Anwendung die Verbindung zur ODBC-Datenquelle trennt, und einer neuen Verbindung übergeben, deren Attribute identisch sind.
Der Verbindungspool ist eine Funktion des ODBC-Treibermanagers 2.x. Beim neuesten ODBC-Treibermanager (Version 3.5), der mit MTS geliefert wurde, gibt es für den Verbindungspool einige Konfigurationsänderungen und eine neue Funktionsweise für ODBC-Verbindungen von MTS COM-Objekten für Transaktionen (siehe Wiederverwenden von ODBC-Verbindungen zwischen COM-Objekten, die an der gleichen Transaktion teilnehmen).
Der ODBC-Treibermanager 3.5 verlangt, daß der ODBC-Treiber ein neues Schlüsselwort in der Registrierdatenbank registriert, damit der Verbindungspool aktiviert werden kann. Das Schlüsselwort ist:
Schlüsselwort: SOFTWARE\ODBC\ODBCINST.INI\IBM DB2 ODBC DRIVER Name: CPTimeout Typ: REG_SZ Wert: 60
Der DB2-ODBC-Treiber ab Version 6 für das 32-Bit-Betriebssystem Windows unterstützt vollständig den Verbindungspool. Daher wird dieses Schlüsselwort registriert. Clients unter Version 5.2 müssen das FixPak 3 (WR09024) oder höher installieren.
Der Standardwert 60 bedeutet, daß eine Verbindung für 60 Sekunden im Pool behalten wird, bevor sie getrennt wird.
In einer Umgebung mit hoher Auslastung ist es besser, den Wert CPTimeout möglichst hoch zu setzen (Microsoft schlägt für bestimmte Umgebungen 10 Minuten vor), um zu häufiges Herstellen und Trennen physischer Verbindungen zu verhindern, weil diese große Mengen an Systemressourcen, einschließlich Systemspeicher- und Übertragungsstapelressourcen, beanspruchen.
Darüber hinaus müssen Sie auf einer Mehrprozessormaschine die Unterstützung für mehrere Pools pro Prozessor inaktivieren, um sicherzustellen, daß dieselbe Verbindung zwischen Objekten in der gleichen Transaktion verwendet wird. Dazu kopieren Sie die folgende Registrierdatenbankeinstellung in eine Datei namens odbcpool.reg, sichern diese Datei als Textdatei und setzen den Befehl odbcpool.reg ab. Das Windows-Betriebssystem importiert daraufhin diese Registrierdatenbankeinstellungen.
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Connection Pooling] "NumberOfPools"="1"
Wenn dieses Schlüsselwort nicht auf den Wert 1 gesetzt ist, kann MTS Verbindungen in verschiedenen Pools anlegen, so daß nicht dieselbe Verbindung wiederverwendet wird.
Wenn die MTS-COM-Objekte mit Hilfe von ADO auf die Datenbank zugreifen, muß die Poolfunktion für OLEDB-Ressourcen inaktiviert werden, so daß der Microsoft-OLEDB-Anbieter für ODBC (MSDASQL) keinen störenden Einfluß auf die ODBC-Verbindungspoolfunktion hat. Diese Einrichtung wird mit dem Wert OFF in ADO 2.0, in ADO 2.1 jedoch mit dem Wert ON initialisiert. Zum Ausschalten der OLEDB-Ressourcenpoolfunktion kopieren Sie die folgenden Zeilen in eine Datei namens oledb.reg, sichern die Datei als Textdatei und setzen den Befehl oledb.reg ab. Das Windows-Betriebssystem importiert daraufhin diese Registrierdatenbankeinstellung.
REGEDIT4 [HKEY_CLASSES_ROOT\CLSID\{c8b522cb-5cf3-11ce-ade5-00aa0044773d}] @="MSDASQL" "OLEDB_SERVICES"=dword:fffffffc
Für ODBC-Verbindungen in MTS COM-Objekten ist der Verbindungspool automatisch eingeschaltet (unabhängig davon, ob es sich um ein COM-Objekt für Transaktionen handelt).
Wenn mehrere MTS COM-Objekte an der gleichen Transaktion teilnehmen, kann die Verbindung zwischen zwei oder mehr COM-Objekten auf folgende Weise wiederverwendet werden.
Angenommen, es gibt zwei COM-Objekte, COM1 und COM2, die eine Verbindung zur gleichen ODBC-Datenquelle herstellen und an der gleichen Transaktion teilnehmen.
Nachdem COM1 die Verbindung hergestellt und seine Arbeit ausgeführt hat, trennt es die Verbindung, und die Verbindung wird im Pool behalten. Diese Verbindung wird jedoch für die Verwendung durch andere COM-Objekte der gleichen Transaktion reserviert. Sie ist für andere Transaktionen erst dann verfügbar, wenn die aktuelle Transaktion beendet ist.
Wenn COM2 in der gleichen Transaktion aufgerufen wird, erhält es die gleiche Verbindung aus dem Pool. MTS stellt sicher, daß die Verbindung nur die COM-Objekte erhalten, die an der gleichen Transaktion teilnehmen.
Wenn andererseits COM1 die Verbindung nicht explizit trennt, belegt es die Verbindung, bis die Transaktion beendet ist. Wenn COM2 in der gleichen Transaktion aufgerufen wird, wird eine separate Verbindung hergestellt. Als Folge belegt diese Transaktion zwei Verbindungen statt einer.
Die Funktion zur Wiederverwendung von Verbindungen für COM-Objekte, die an der gleichen Transaktion teilnehmen, ist aus folgenden Gründen vorteilhaft:
Wenn ein kleiner CPTimeout-Wert in einer Umgebung mit hoher Auslastung verwendet wird, in der zu viele physische Verbindungen zur gleichen Zeit hergestellt und getrennt werden, kann es beim TCP/IP-Stapel zu Ressourcenknappheit kommen.
Zur Milderung dieses Problems sollten Sie die TCP/IP-Registrierungseinträge verwenden. Diese werden im Handbuch Windows NT Resource Guide, Volume 1 beschrieben. Die Registrierungsschlüsselwerte befinden sich in HKEY_LOCAL_MACHINE-> SYSTEM-> CurrentControlSet-> Services-> TCPIP-> Parameters.
Die Standardwerte und die vorgeschlagenen Einstellungen sind:
Name | Standardwert | Vorgeschlagener Wert |
---|---|---|
KeepAlive time | 7200000 (2 Stunden) | Derselbe |
KeepAlive interval | 1000 (1 Sekunde) | 10000 (10 Sekunden) |
TcpKeepCnt | 120 (2 Minuten) | 240 (4 Minuten) |
TcpKeepTries | 20 (20 Wiederholungen) | Derselbe |
TcpMaxConnectAttempts | 3 | 6 |
TcpMaxConnectRetransmission | 3 | 6 |
TcpMaxDataRetransmission | 5 | 8 |
TcpMaxRetransmissionAttempts | 7 | 10 |
Wenn der Registrierungswert nicht definiert ist, erstellen Sie ihn. |
Sie können das mit MTS gelieferte Beispielprogramm "BANK" verwenden, um die Konfiguration der Client-Produkte und von MTS zu testen.
Führen Sie die folgenden Schritte aus:
[ODBC] DRIVER=IBM DB2 ODBC DRIVER UID=ihre_benutzer_id PWD=ihr_kennwort DSN=ihr_datenbank_aliasname Description=MTS Samples
Dabei gilt folgendes:
db2 bind @C:\sqllib\bnd\db2cli.lst blocking all grant public
Wenn der Server ein DRDA-Host-Server ist, binden Sie die Datei ddcsmvs.lst, ddcs400.lst oder ddcsvm.lst, je nach Host, zu dem Sie eine Verbindung herstellen (OS/390, AS/400 oder VSE&VM). Beispiel:
db2 bind @C:\sqllib\bnd\@ddcsmvs.lst blocking all grant public
Binden Sie andernfalls die Datei db2ubind.lst:
db2 bind @C:\sqllib\bnd\@db2ubind.lst blocking all grant public
db2 create table account (accountno int, balance int) db2 insert into account values(1, 1)