Ich bin kürzlich von einem Java-Entwickler zu einem tatsächlichen DBA in unserem Unternehmen gewechselt. Ich lerne sozusagen, wie man ein DBA ist (was für unser Unternehmen eigentlich eine neue Position ist).
Ich habe mehrere Skripte gesehen, in denen wir den Befehl ausführen DB2 BIND bind_file other_parameters
.
Ich bin verwirrt darüber, was diese tun. Ich habe unsere anderen Datenbankadministratoren gefragt, aber sie konnten es mir nicht auf sinnvolle Weise erklären. Ich habe im IBM Information Center nach dem Befehl BIND gesucht , aber es war mir auch nicht klar.
Ich weiß, dass das Binden irgendwie wichtig ist, da wir REORGS, STATS und BIND regelmäßig in unseren Datenbanken ausführen sollen, um die Leistung zu verbessern.
Da ich immer noch ein n00b-DBA bin, habe ich mich gefragt, ob jemand ein "Was ist bindend für Dummies?" Erläuterung?
BEARBEITEN : In der Ausgabe der folgenden Antwort bin ich kürzlich auf den folgenden Developerworks-Artikel gestoßen : "DB2-Pakete: Konzepte, Beispiele und häufig auftretende Probleme: Grundlegendes zu DB2-System- und Benutzeranwendungspaketen" . Sehr hilfreich. Besonders für die Systempakete, auf die wir meistens gestoßen sind.
20130905 EDIT : Dieser Blogeintrag von DB2 DBA Ember Crooks ist in Bezug auf die Bindung und deren Bedeutung hervorragend . Sie schrieb auch einen vorherigen Eintrag über nicht gefundene Pakete und wann die CLIPKG-Nummer für die Bindungen erhöht werden muss und was das bedeutet. Diese Artikel sind sehr gut erklärt. Grundsätzlich wie das Lesen von "DB2-Bindung und Pakete für Dummies", wenn so etwas existiert.
Antworten:
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 vonEXEC SQL
bisEND-EXEC.
), wird das SQL sorgfältig herausgerissen und durch a ersetzt Aufruf der COBOL-DB2-Schnittstelle. Danach gibt es zwei Ausgaben vonPRECOMPILE
, die COBOL-Quelle, bei der das gesamte eingebettete SQL entfernt wurde (A
von nun an), und eineDBRM
, 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 findenB
, die gleichzeitig generiert wurden.Zu diesem Zeitpunkt
A
wird kompiliert und mit dem Standard-COBOL-Compiler verknüpftload module
und in eine Ladebibliothek gestellt, um später verwendet zu werden.Es gibt jedoch noch viel zu tun mit
B
dem DBRM. HierBIND
kommtBIND
es ins Spiel . Es ist wie ein Compiler für den eingebetteten SQL-Code, und die Ausgabe der "Kompilierung" ist apackage
.Um die SQL in ein ausführbares "Paket" zu binden, wird der BIND-Prozess an DB2 angehängt und führt einige Aktionen aus:
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 eineBIND 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+
:quelle
.bnd
s die Bindedateien und die.lst
s Listen der Bindedateien.db2ubind.lst
und / oderdb2cli.lst
. Diese Dateien werden automatisch erstellt, wenn eine neue Datenbank auf dem Server erstellt wird. Mit diesen Dateien können verschiedene Remoteclient-Dienstprogramme ausgeführt werden (CLI / ODBC-Unterstützung; DB2 CLP; Import / Export-Dienstprogramme). Überprüfen Sie heraus diesen Link