Gibt es einen guten Weg, um zu überprüfen, ob ein Datenbankschema nach einem Upgrade oder Migration ist richtig?

StackOverflow https://stackoverflow.com/questions/3576475

Frage

Wir haben Kunden, die Modernisierung sind von einer Datenbankversion auf eine andere (Oracle 9i auf Oracle 10g oder 11g spezifisch sein). In einem Fall exportierte ein Kunde die alte Datenbank und importierte sie in die neuen, aber aus irgendeinem Grunde die Indizes und Zwänge nicht erstellt bekommen. Sie haben dies mit Absicht getan, um den Importvorgang zu beschleunigen, aber wir suchen immer noch in den Grund, warum.

Die eigentliche Frage ist, gibt es eine einfache Art und Weise, dass wir, dass die Struktur der Datenbank abgeschlossen ist nach dem Import überprüfen können? Gibt es irgendeine Art von Prüfsumme, dass wir auf der Struktur zu tun? Wir wissen, dass wir eine Reihe von Anfragen tun könnten, um zu sehen, ob alle Tabellen, Indizes, Aliase, Ansichten, Sequenzen usw. existieren, aber dies wäre wahrscheinlich schwierig sein, zu schreiben und zu pflegen.

Update

Danke für die Antworten darauf hindeutet, kommerzielle und / oder GUI-Tools zu verwenden, aber wir wirklich etwas frei brauchen, dass wir mit unserem Produkt verpacken können. Es hat auch angetrieben Kommandozeile oder ein Skript sein, damit unsere Kunden es in jeder Umgebung laufen können (Unix, Linux, Windows).

War es hilfreich?

Lösung

Vorausgesetzt, ein einziges Schema, so etwas wie die. - Dump USER_OBJECTS in eine Tabelle vor der Migration

 CREATE TABLE SAVED_USER_OBJECTS AS SELECT * FROM USER_OBJECTS

Dann Validate nach der Migration

 SELECT object_type, object_name FROM SAVED_USER_OBJECTS
 MINUS
 SELECT object_type, object_name FROM USER_OBJECTS

Ein Problem ist, wenn man absichtlich Objekte zwischen den Versionen fallen gelassen haben Sie auch die von SAVED_USER_OBJECTS löschen müssen. Auch wird dies nicht abholen, wenn die falsche Version von Objekten existiert.

Wenn Sie mehrere Schemata haben, dann dasselbe für jedes Schema oder Verwendung ALL_OBJECTS erforderlich ist und extract / Vergleich für die entsprechenden Benutzer-Schemata.

Sie können auch eine Hash / Prüfsumme tun auf object_type || object_name für das gesamte Schema (save vor / nach vergleichen), aber die Kosten für die Berechnung wären nicht so verschieden von dem Vergleich der beiden Tabellen auf Indizes.

Andere Tipps

Wenn Sie bereit sind, einige zu verbringen, DBDiff ist ein effizientes Werkzeug, das tut genau das, was Sie brauchen.

http://www.dkgas.com/oradbdiff.htm

In SQL DEVELOPER (der kostenlose Oracle-Dienstprogramm) eine Datenbank-Schema-Unterschiede Funktion. Es lohnt sich, es zu versuchen.

Hope es hilft.

SQL Developer - Download

Roni.

Ich würde das Skript check nicht schreiben, ich ein Programm schreiben, würde das Skript check aus einer bestimmten Version der Datenbank zu generieren. Gehen Sie einfach, obwohl die metatdata und aufzeichnen, was da und schreibt sie in eine Datei, dann vergleichen Sie die Werte in der Datei mit den Werten in der Datenbank des Kunden. Dies wird nicht so gut funktionieren, wenn Sie vom System generierten Namen für Ihre Einschränkungen verwenden, aber es ist wahrscheinlich genug, um zu überprüfen, nur, dass die Dinge sind da. Löschen von Indizes und Einschränkungen ist ziemlich häufig, wenn eine Datenbank migrieren, so dass Sie nicht einmal brauchen könnten zu viel zu überprüfen; wenn zwei oder drei Dinge fehlen, dann ist es nicht unvernünftig anzunehmen, sie alle sind. Vielleicht haben Sie auch ein Skript schreiben wollen, dass alle Einschränkungen und Indizes und fällt neu erstellt sie, und müssen nur Ihre Kunden führen, dass als Post-Migrationsschritt. Sie nur sicher sein, alles mit Namen fallen lassen, so dass Sie alle benutzerdefinierten Indizes nicht löschen Sie Ihre Kunden angelegt haben könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top