Protokollierung von Schemaänderungen

Hallo,

Ich bin neu im Forum und bedanke mich schon für die möglichen Antworten.

Ich möchte Änderungen(Tabelle bzw Einträge Hinzufügen, löschen oder updaten), die ich in meinen Datenbanken vornehme, protokollieren. Dadurch möchte ich erreichen, dass ein Überblick bei Großen Datenbanken-Volumen im Fall einer Modifikation der Inhalte von Datenbanken leicht generiert werden kann.

Wie soll ich denn mit PostgreSQL anfangen? Paar Ideen?

Danke

Sandrine

Also du solltest vielleicht erst mal zwischen “Content” und “Design” trennen. Es sind zwei unterschiedliche Fragen, ob jemand die Struktur deiner Datenbank ändert (weil das Auswirkungen auf alle Applikationen hat, die diese Datenbank nutzen) oder ob jemand nur die Daten in deiner Datenbank ändert.

Für den Fall, das du die Struktur mitüberwachen möchtest, da fallen mir Möglichkeiten wie das Querylog von PostgreSQL oder auch das Point-In-Time-Recovery ein:

http://www.postgresql.org/docs/current/static/backup-online.html

Das ganze wird in jedem Fall etwas aufwändiger.

Ansonsten, wenn du nur bestimmte Daten überwachen möchtest, hätte ich noch das hier zu bieten:

http://pgfoundry.org/projects/tablelog/

vielen Danke für den Vorschlag, werde ich mit jetzt erstmal damit beschäftigen. Ich melde mich bald wieder.
Sandrine

Ads,

Ich habe mich mit deinen Linken beschäftigt aber es ist nicht, was ich gern haben möchte.
Es geht eigentlich um die Protokollierung von Schemaänderungen auf Relationen (Modifying Tables). Wie kann man die vorgenommenen Änderungen
(Add columns,Remove columns,Add constraints,Remove constraints,Change default values,Change column data types,Rename columns,Rename tables) speichern, um sie später abrufen zu können.

Kannst du mal einen Blick auf den Link werfen.

http://www.postgresql.org/docs/8.1/interactive/ddl-alter.html#AEN2280

Danke auch für Beiträge von anderen Nutzer.

Sandrine: Wie ich geschrieben hatte, Änderungen am Design der Datenbank lassen sich nicht einfach protokollieren.

Mir wäre aus dem Stehgreif auch nichts bekannt, was dies ermöglicht. Normalerweise steht die Struktur der Datenbank ja auch fest, wenn jeder diese einfach ändern kann, funktionieren möglicherweise die Applikationen nicht mehr, die noch darauf zugreifen.

Wie in meinem ersten Beitrag erwähnt: du könntest das Querylog mitspeichern und darin parsen, ob etwas für dich passendes drin wäre.

Was mich aber interessiert: aus welchem Grund möchtest du das erreichen?

Hallo Sandrine,

was Du suchst gibt es nicht und wird es wohl auch nicht geben. Was Du brauchst heißt schlicht und einfach Versionsverwaltung. Dazu gehört eine (Teil-) Auftrags bezogenen Entwicklung mit guter Dokumentation und entsprechender Versionsionierung der Software. Die Produktions-Versionen werden durch entsprechende Label in der Versionsverwaltung gekennzeichnet. Über die Label können dann die entsprechenden Versionen ausgecheckt und der Produktion zugeführt werden.


mfg

fristo

Danke für Ihre Bemühungen.

Die Aufgabe, die ich lösen will ist diese: Ich möchte die Schemaänderungen in PostgreSQL-Datenbanken protokollieren. Das heisst, wenn der Datenbankadministrator zum Beispiel eine Spalte hinzüfugt oder löscht, eine Aktion was auch immer, die aber die Struktur der Datenbank leicht modifiziert, mitprotokollieren (Versioning???)

Klar dass, wenn das Design der DB häufig geändert und angepasst werden müsste, würde man den Entwurf als nicht optimal bezeichnen und alles insgesamt wieder überdenken, dies ist aber nicht meinen Fall.

Es sollte stets fur den Nutzer dieser Datenbank(DB) möglich sein, den Unterschied zwischen dem aktuellsten Stand der Datenbank zum Vergleich mit dem vorletzen Zustand auf einen Blick erkennbar sein.(ist dass, was man Versioning nennt?) (Wie lange oder wie häufig, er auf die vorletzte Version zugreifen kann,habe ich mich noch keine Gedanke darüber gemacht. Ich denke aber dafür an eine Art “commit”-Button.)

Ich hoffe mich ein bisschen klar ausgedrückt zu haben. Deutsch ist nicht meine Muttersprache.

Danke noch mal für ihre Hilfe.

Zur Not können wir auch ins Englische wechseln :wink:

Wie fristo schon gesagt hat, da gibt es nichts fertiges und eigentlich wird derartiges auch nicht in der Datenbank gelöst, weil das die falsche Stelle dafür ist.

Versuch dich mal an einer Versionsverwaltung wie Subversion, CVS oder ähnlichen. Hier kannst du zumindest die Struktur ablegen und später schauen, was sich geändert hat. Das verlangt natürlich Disziplin von den Datenbankadministratoren, Änderungen auch und nach Möglichkeit zuerst dort durchzuführen.

Hallo Sandrine,

dein Deutsch ist vorzüglich und Du hast die Aufgabe auch sehr gut beschrieben.

Bei der Analyse der Aufgabe, die Du dir gestellt hast, solltest Du Überlegungen anstellen, wie es aussieht, wenn mehrere Entwickler an der gleichen Datenbank entwickeln. Da werden nicht nur Tabellen geändert, da ändern sich auch SQL-Scripte (Funktionen, Prozeduren, Trigger, …) und auch die Logik. Da nützt dir auch das beste Protokoll nichts. In der Regel sind zum Ändern einer Datenbank mehrere Scripts notwendig. Auch sind mehrere Tests notwendig, um die einwandfrei Funktion der Scripte zu gewährleisten. Woher soll ein Protokolle wissen, welche Scripts zu guter letzt angewendet werden sollen?

Das aktuelle Design einer Datenbank kann man jederzeit bei einer Datenbank erfagen. Bei PostgreSQL erhälst Du diese mit pgdump. Mit einem Diff-Tool kann auch der Unterschied zur vorherigen Version feststellen werden. Aber was nützt Dir das? Um von einer Version (Zustand) zur anderen Version (Zustand) zu gelangen, benötig man Scripte und die müssen auch noch in der Richtigen Reihenfolgen ablaufen. Das wird kein Protokoll leisten können. Zudem, Datenbanken gibt es seit 40 Jahren. Wenn Deine Vorstellung machbar wären, würde es schon längst entsprechende Tools auf dem Markt geben.

Kein Profi von Entwickler, auch kein DBA, wird Änderungen an einer Datenbank händisch vornehmen. Grundsätzlich erfolgen die Änderungen einer Datenbank immer mit Scripts. Schon alleine wegen der Nachvollziebarkeit der Änderung. Und die Änderungen sind in den Scripts dokumentiert.

Dem Nutzer, sprich Anwender, interessiert der Unterschied zwischen den einzelnen Versionen nicht. Er ist nur an der Funktionaltät interessiert und er arbeitet immer mit der aktuellen Version. Es ist die Aufgabe der Projektleitung bei Änderung einer Applikation die Anwender zu informieren. Bei größeren Änderungen sind die Anwender auch vorab zu schulen. Es ist auch die Aufgabe der Projektleitung die technischen Änderungen zu Dokumentieren. Und da alles einer ständigen Änderung unterliegt, wird dieses wohl nur mit einem Versionsverwaltungstool gehen.

Vielleicht hilft Dir dieser Link bei Deiner praktischen Arbeit weiter:

mfg

fristo

Fristo,

Vielen Dank für diese ausführliche Antwort. Ich war krank die letzten Zeiten und hatte mein Projekt erstmal abgestellt.

So so ich habe leider nicht immer alles verstanden, was du beschrieben hattest wie zum Beispiel

Das wird kein Protokoll leisten können. Zudem, Datenbanken gibt es seit 40 Jahren. Wenn Deine Vorstellung machbar wären, würde es schon längst entsprechende > Tools > auf dem Markt geben.

Da fürchte ich nicht richtig verstanden zu haben :?:. Wenn das tatsächlich nicht zu machen ist, ist es schlimm für mich.


Aber was mir sehr interessierte, wäre diesen Punkt

Und die Änderungen sind in den Scripts dokumentiert.

Erste Frage wäre: Wie kann ich als DBA eine zu führenden Modifikation(auf DB_Schemastruktur) bei

1)ALTER TABLE Table_Name DELETE/ADD Column oder
2)DROP TABLE Table_Name

nur diese(1 und 2) Änderungen aus dem Script automatisch herausnehmen bzw eines Programm schreiben, die sie protokolliert?(Diese Protokollierung könnte zum Beispiel dies enthalten: Speicherung der Relation auf der Änderung ausgeübt wurde. Schreiben der Attributmenge, welche hinzugefügt oder gelöscht wurden oder Löschen von Tabelle. Modifikazionsmenge, welche wurde vorgenommen: ADD, DELETE, DROP).

Protokollierung sollen später dann den einfache Nutzer als Navigationsvereinfachung in einer sehr breiten Datenbanken zur Verfügung stehen.


Zweite Frage wenn nicht schon bei der Beantwortung der ersten erledigt geworden ist: Allgemeiner: Wie kann man denn Änderungen aus den Scripts herausnehmen?

Letzter Frage: Welche Script_Sprache kann man In PostgreSQL verwendet ?

Danke schon im voraus für mögliche Antworte. :?:

Sandrine: ich glaube, fristo wollte dir kurz zusammengefasst folgendes sagen:

Deine Wünsche lassen sich nicht ohne weiteres umsetzen. Wenn du an der Datenbank Struktur etwas änderst, musst du die zugehörigen Programme auch ändern (oder wozu brauchst du sonst überhaupt Änderungen?).

Solche Änderungen legt man in der Dokumentation des Projektes ab und zwingt die Entwickler, das dort auch zu dokumentieren. Dann hat man eine saubere Dokumentation, wie die Datenbank aufgebaut ist und welche Änderungen wann erfolgt sind.

Eine Frage habe ich noch: Warum soll das unbedingt automatisch geloggt werden?

Ich bin mich nicht so sicher, aber ich glaube nach meiner recherche, sollte ich das QueryLog benutzen. Wie funktionieren das , und wie kann ich die File parsen. Bitte noch mal Danke für die Bemühungen.

Gar nicht?

Ausser du hast vor, einen umfangreichen Parser zu schreiben.

Ads,

Was meinst du mit gar nicht ?

hi,

auch wenn der Thread von 2006 ist … einem “Entwickler” stellt sich schon mal die Frage ob ein “externer” Adminstrator was “verändert” hat.

da es wohl immer noch kein Tool dafür gibt hab ich nun mein “eigenes” Tool dafür entwickelt.

und genau das mache ich nun d.h. ich habe eine “Kopie” die ich mit dem “ist” Zustand vergleiche.

ich mache das nun in meiner Xbase++ Application von der Workstation … an den Server kommt man ja evtl. nicht immer ran.
die “Kopie” ist übrigens keine SQL Table sondern eine DBF wo ich die Result Set Ergebnisse als Array binär in einem “Memo” Feld abspeichere.