Ich sehe, dass Ihr Info Center-Link zu LUW 9.7 führt und Sie erwähnen, dass Sie in Java programmiert haben, aber die meiste Erfahrung mit dem Binden habe ich mit DB2 auf dem Mainframe mit COBOL. Daher müssen Sie möglicherweise die Erklärung ein wenig anpassen (aber im Allgemeinen sollten die Konzepte dieselben sein).
Ich glaube, dass die Bindung nur relevant ist, wenn Sie Programme kompilieren, die eingebettetes SQL enthalten, das vorkompiliert ist (statisch gebundenes SQL). Wenn Sie beispielsweise JDBC verwenden, müssen Sie kein BIND ausführen. Der JDBC-Treiber gibt PREPARE
die Anweisung dynamisch aus.
Wenn Sie ein Programm über einen DB2-Pre-Compiler ausführen, PRECOMPILE
Ihr Programm ausführen und eingebettetes SQL finden (in COBOL sind dies Anweisungsblöcke von EXEC SQL
bis END-EXEC.
), wird das SQL sorgfältig herausgerissen und durch a ersetzt Aufruf der COBOL-DB2-Schnittstelle. Danach gibt es zwei Ausgaben von PRECOMPILE
, die COBOL-Quelle, bei der das gesamte eingebettete SQL entfernt wurde ( A
von nun an), und eine DBRM
, die das gesamte SQL enthält, das entfernt wurde ( B
).
Precompile führt einige grundlegende Syntaxprüfungen durch. Beachten Sie jedoch, dass die Überprüfungen nur auf Ihren Tabellendeklarationen innerhalb des Programms basieren. Es wird nicht an DB2 angehängt, um diese zu überprüfen!
Diese beiden Dateien sind vollständig voneinander getrennt. Wenn Sie das COBOL-Programm ausführen, muss es ein A
und ein finden B
, die gleichzeitig generiert wurden.
Zu diesem Zeitpunkt A
wird kompiliert und mit dem Standard-COBOL-Compiler verknüpft load module
und in eine Ladebibliothek gestellt, um später verwendet zu werden.
Es gibt jedoch noch viel zu tun mit B
dem DBRM. Hier BIND
kommt BIND
es ins Spiel . Es ist wie ein Compiler für den eingebetteten SQL-Code, und die Ausgabe der "Kompilierung" ist a package
.
Um die SQL in ein ausführbares "Paket" zu binden, wird der BIND-Prozess an DB2 angehängt und führt einige Aktionen aus:
- Überprüft, ob die aktuelle AuthID zum Ausführen einer Bindung berechtigt ist.
- Überprüft die Syntax Ihres SQL mithilfe der Daten im DB2-Katalog.
- Schließlich und vor allem optimiert die Bindung Ihr SQL
Im letzten Schritt wird Ihr gesamtes SQL über das Optimierungsprogramm ausgeführt, das alle Statistiken und verschiedenen Pfade berücksichtigt, die das DB2-Modul zum Abrufen Ihrer Daten verwenden könnte. Anschließend wird der Pfad ausgewählt, der die niedrigsten Kosten verursacht (bei neueren Versionen von DB2 [DB2 10 für z / OS] wird möglicherweise ein Pfad mit "höheren Kosten", aber "geringerem Risiko" gewählt). Sobald der Pfad ausgewählt ist, wird er kompiliert und zu einem Paket, das im Katalog gespeichert wird (Sie können alle Ihre aktuellen Pakete mit SELECT * FROM SYSIBM.SYSPACKAGE
(z / OS) anzeigen).
Schließlich gibt es ein letztes Stück, das es unseren Programmen ermöglicht, sich mit ihren Paketen wieder zu vereinen, das PLAN
. Sie erstellen einen Plan, indem Sie ein anderes BIND ( BIND PLAN
) ausführen . Ein Plan ist eine Sammlung von Paketen, die das Programm durchsuchen darf, um das Paket mit demselben Namen zu finden. Mit COBOL geben Sie an, in welchem Plan das Programm in Ihrer JCL suchen soll.
Kurz gesagt, kompilierter Code durchläuft die folgenden Schritte, um eine verwendbare Datei zu generieren BIND PLAN
:
Vorkompilieren -> Erstellt ein DBRM (mit C [++] gibt der Vorkompilierer das vorkompilierte SQL in eine HFS-Datei aus, die über das Befehlszeilen-Bindungsprogramm gesendet werden kann ) -> Das DBRM wird optimiert und eine Reihe von Zugriffspfaden ( a package
) wird erstellt -> Das Paket wird zu a hinzugefügt. Hierbei handelt es sich um eine BIND PLAN
Gruppe von Paketen, mit denen Sie einen "Suchpfad" für Ihre Programme erstellen können.
Da diese Programme statisch gebunden sind, ist der vom Optimierer zur Bindezeit gewählte Zugriffspfad möglicherweise nicht mehr der beste Pfad, wenn sich Ihre Tabellenstatistiken drastisch ändern. Durch erneutes Binden kann SQL neu bewertet und möglicherweise a ausgewählt werden besserer Weg.
Bearbeiten (für Kommentar aktualisieren): Wenn Sie den Befehlszeilenprozessor verwenden, können Sie entweder ein einzelnes Bindungspaket (.bnd
) oder eine Liste von Bindungsdateinamen (.lst
) übergeben. Wenn Sie eine Liste übergeben, muss dem Dateinamen ein@
(z/path/to/@packages.lst
.B.)vorangestellt werden. In der .lst-Datei können Sie entweder jedes Paket in eine einzelne Zeile einfügen oder sie trennen durch+
:
package1.bnd
package2.bnd
package3.bnd+package4.bnd+package5.bnd