Dokumentation eines riesigen Netzes miteinander verbundener gespeicherter Prozeduren in einer MS SQL-Datenbank: Welches Tool oder Format?

11

Ich hoffe, dies ist eine Frage mit einer kürzeren Antwort als "Ein 1000-Seiten-Buch lesen", aber wenn das die wirkliche Situation ist, dann schlagen Sie mich damit.

Ich bin kein echter DBA, ich bin ein Softwareentwickler, der erkennt, dass wir einen DBA brauchen, und dennoch hat der Shop, in dem ich arbeite, keine DBAs. Unser MS SQL-Datenbankdesign mit mehreren gespeicherten Kernprozeduren ist jedoch ein großes Durcheinander. Die gespeicherten Prozeduren sind langsam, wir vermuten, dass sie Fehler aufweisen, aber wir wissen nicht einmal, wie sie funktionieren sollen, daher wissen wir nicht, wie sie behoben werden können.

Zunächst habe ich beschlossen, zu dokumentieren, wie alles funktionieren soll. Dann werden wir mit Unit-Tests beginnen und eine Reihe von Unit-Tests erstellen, die beweisen, dass die gespeicherten Prozeduren tatsächlich funktionieren. Die Logik, die sie ausführen, ist ein wesentlicher Bestandteil unserer Anwendung. Man könnte sagen, es sind die "Kronjuwelen" des Hauptprodukts unseres Unternehmens, und die Funktionsweise ist völlig undokumentiert.

Ich suche nach der spezifischen technischen Dokumentation, die ein professioneller DBA möglicherweise erwartet, oder schreibt sich selbst, wenn er muss, um ein riesiges Netz gespeicherter Prozeduren zu verstehen, die sich gegenseitig aufrufen.

  1. Was ist das übliche Format für die Dokumentation einer großen gespeicherten Prozedur? Beschreibung der erwarteten Werte für jeden In-Parameter (dh "Vorbedingungen", "Nachbedingungen", dh für boolesche Parameter, was ändert sich, wenn Sie ihn ein- oder ausschalten usw.?)

  2. Wie dokumentiert man das normalerweise? Nur SQL-Kommentare? Externe Werkzeuge, die spezifisch für den Zweck sind? Externe "Dokumentation"? Wir haben keine anderen SQL-Tools als MS SQL Management Studio, aber wir fragen uns, ob es ein Tool gibt, mit dem wir unsere Umgebung besser verstehen, dokumentieren und testen können. Vielleicht ist das eine bessere Möglichkeit, meine Frage zu stellen. Welches Tool brauche ich, um unser Durcheinander zu lösen?

Unser Ziel ist es, in der Lage zu sein:

A. Verwenden Sie die von uns generierte Dokumentation oder die Tools, die wir unserer Umgebung hinzufügen, um zu verstehen, wie die Prozeduren funktionieren sollen, und erstellen Sie anschließend eine Unit-Test-Abdeckung für die gespeicherten Prozeduren.

B. Zeigen Sie den Client-App-Entwicklern, wie jede dieser komplexen gespeicherten Prozeduren ordnungsgemäß aufgerufen wird.

C. Testen Sie unsere gespeicherten Prozeduren.

Warren P.
quelle

Antworten:

4

Das Wichtigste an der Dokumentation ist, dass sie für Sie sinnvoll ist. Es gibt keinen wirklich üblichen Weg, dies zu tun.

Wenn Sie viele gespeicherte Prozeduren haben, die alle miteinander verbunden sind, beginnend mit einem Visio-Diagramm mit einem Objekt für jede Prozedur, dann sind Verknüpfungen zwischen ihnen, damit Sie verfolgen können, wie die Dinge von Prozedur zu Prozedur verlaufen, wahrscheinlich ein ziemlich guter Anfang.

mrdenny
quelle
4

Das RedGate SQL Dependency Tracker- Tool kann hilfreich sein. Es kann Ihnen grafisch zeigen, welche Datenbankobjekte (SPs / Ansichten / Tabellen) voneinander abhängen. Ich habe es verwendet, während ich mit einigen Tabellen gearbeitet habe, mit denen ich nicht vertraut war, um die Reihenfolge zu bestimmen, in der Einschränkungen deaktiviert werden sollen.

Ich habe es auch nur zum Spaß auf der gesamten Datenbank ausgeführt und es war übrigens TMI. Wenn Sie es auf bestimmte Bereiche der Datenbank konzentrieren können, die nicht verrückt voneinander abhängig sind, kann es hilfreich sein. Der Abhängigkeitsbaum bietet Optionen, um sich mithilfe verschiedener Algorithmen visuell zu organisieren, und das allein macht eine Auswertung lohnenswert.

Rückverfolgung. Eine weitere Option ist das Schreiben von Protokollzeilen am Anfang und Ende kritischer gespeicherter Prozeduren. Jede Zeile kann ein Datum, eine "Detailebene", einen "Kontext", einen "Unterkontext" und einen Prozessnamen enthalten. und Reihenzählungen. Es wird wahrscheinlich ein Chaos sein (denken Sie an das Windows-Ereignisprotokoll), aber vielleicht in einigen Abschnitten nützlich. Wenn ein SP verwendet wird, um das Protokoll tatsächlich einzufügen, kann es ohne viel zusätzliche Last (ymmv) einfach ein- und ausgeschaltet werden.

Nebenbei bemerkt, ich habe den Drucker einmal mit dem coolen 11 x 17-Papier geladen, eine schöne winzige Schriftart und eine logische Einrückung gefunden, um einen komplexen Daten- / SP-Fluss in ~ 5 Seiten eines Pseudo-SQL zusammenzufassen. Ich bin mir ziemlich sicher, dass ich mich nur ein paar Mal darauf bezogen habe und niemand sonst hat es gewagt, sich ihm zu nähern, da es dort nicht Standard war und es schwierig ist, etwas zu vertrauen, das nicht integriert ist und veraltet sein kann. Der Dokumentationsprozess erzwang jedoch eine Vertrautheit mit dem Code!

crokusek
quelle
Ich habe dies und eine Reihe anderer Tools bewertet. Bisher mache ich es immer noch von Hand. Daher akzeptierte ich die Antwort, die das widerspiegelt, was ich getan habe. Aber das ist cool.
Warren P
3

Paul White hat mich auf das kostenlose Tool Atlantis Schema Surf von Atlantis Interactive aufmerksam gemacht, das Ihnen möglicherweise weiterhelfen kann.

RBarryYoung
quelle