it-swarm-eu.dev

Was genau ist Bindung in DB2?

Ich bin kürzlich von einem Java Entwickler] zu einem tatsächlichen DBA in unserem Unternehmen übergegangen. Ich lerne sozusagen, wie man ein DBA ist (was eigentlich eine neue Position für ist unsere Firma).

Ich habe mehrere Skripte gesehen, in denen wir den Befehl DB2 BIND bind_file other_parameters Ausführen.

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 mir IBMs Information Center für den Befehl BIND angesehen, 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?

[~ # ~] edit [~ # ~] : In der Ausgabe auf die Antwort unten 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. Speziell für die Systempakete, auf die wir meistens gestoßen sind.


20130905 EDIT : This Blogeintrag von DB2 DBA Ember Crooks ist in Bezug auf hervorragend Bindung und was es bedeutet. Sie schrieb auch ein vorheriger Eintrag zu Paketen nicht gefunden und wann die CLIPKG-Nummer für die Bindungen zu erhöhen ist und was das bedeutet. Diese Artikel sind sehr gut erklärt. Grundsätzlich wie Lesen " DB2-Bindung und Pakete für Dummies "wenn so etwas existiert.

8
Chris Aldrich

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 wird PREPARE die Anweisung dynamisch.


Wenn Sie ein Programm über einen DB2-Pre-Compiler ausführen, wird PRECOMPILE durch Ihr Programm ausgeführt, und wenn es eingebettetes SQL findet (in COBOL sind dies Anweisungsblöcke, die von EXEC SQL bis END-EXEC.), es reißt das SQL sorgfältig heraus und ersetzt es durch einen Aufruf der COBOL-DB2-Schnittstelle. Danach gibt es zwei Ausgaben von PRECOMPILE, der COBOL-Quelle, bei der das gesamte eingebettete SQL entfernt wurde (A von nun an), und ein DBRM, das alle enthält die SQL, die 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 getrennt. Wenn Sie das COBOL-Programm ausführen, müssen Sie ein A und ein B finden, die gleichzeitig generiert wurden.

Zu diesem Zeitpunkt wird A kompiliert und mit dem Standard-COBOL-Compiler zu einem load module verknüpft und in eine Ladebibliothek gestellt, um später verwendet zu werden.

Es gibt jedoch noch viel zu tun mit B, dem DBRM. Hier kommt BIND ins Spiel. BIND ähnelt einem Compiler für den eingebetteten SQL-Code, und die Ausgabe der "Kompilierung" ist ein 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 wählt es den Pfad aus, der mit den niedrigsten Kosten verbunden ist (bei neueren Versionen von DB2 [DB2 10 für z/OS] . Es kann sich für "höhere Kosten" entscheiden, aber " Pfad mit geringerem Risiko). 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 einen weiteren BIND ausführen ( BIND PLAN ). 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 diese Schritte, um ein verwendbares BIND PLAN zu generieren:

Precompile -> Erstellt ein DBRM (mit C [++] gibt der Precompiler das vorkompilierte SQL in eine HFS-Datei aus, die über das Befehlszeilen-Bindungsprogramm gesendet werden kann -> - das DBRM ist optimiert und eine Reihe von Zugriffspfaden (ein package) wird erstellt -> Das Paket wird einem BIND PLAN hinzugefügt, einer Gruppe von Paketen, mit denen Sie einen "Suchpfad" für erstellen können Ihre Programme durchzusehen.

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 (Update für Kommentar): Wenn Sie den Befehlszeilenprozessor verwenden, können Sie entweder einen einzelnen übergeben Bindungspaket (.bnd) oder eine Liste von Bindungsdateinamen (.lst). Wenn Sie eine Liste übergeben, muss dem Dateinamen ein @ (z. B. /path/to/@packages.lst) vorangestellt werden. In der .lst-Datei können Sie entweder jedes Paket in eine einzelne Zeile einfügen oder sie mit + trennen:

package1.bnd
package2.bnd
package3.bnd+package4.bnd+package5.bnd
3
bhamby