Ich suche nach einem Tool zur Überprüfung der Datenintegrität, mit dem ich Regeln festlegen kann, mit denen eine Datenbank auf logische Inkonsistenzen gescannt wird.
Hintergrund:
Wir haben eine große Anwendung, bei der die Datenintegrität im Code aufrechterhalten wird: Es gibt zB keine Trigger in der Datenbank für kaskadierende Löschungen.
Durch Dinge wie Programmabbrüche, fehlgeschlagene Updates, Fehler im Code usw. können Daten beschädigt werden.
Ich hätte gerne ein separates Tool, um nach logischen Fehlern/Inkonsistenzen in den Daten zu suchen und Regeln anzugeben wie:
Werte im Feld müssen ausgefüllt werden
Feldwerte sind erforderlich
Feldwerte müssen im konstanten Bereich [X..Y] liegen
Feldwerte müssen mit einem regulären Ausdruck übereinstimmen
Alle Werte für Feld X müssen eindeutig sein
Oder tabellenübergreifende Beziehungen:
Feldwerte müssen im Bereich liegen, der durch Feld X aus Tabelle T bis Feld Y aus Tabelle T angegeben ist
Die Werte im Feld X der Tabelle T sollten aus dem Feld Y der Tabelle S stammen
Feld X in Tabelle T muss größer sein als Feld Y in Tabelle T
Ich spreche nicht von den Programmen, die die meisten DBMS bereits haben und die interne Dateistrukturen, Indexbeschädigungen usw. prüfen (z. B. die Aufgabe „Datenbankintegrität prüfen“ , die Sie in einem Wartungsplan für SQL Server verwenden können), ich möchte auf logische Fehler prüfen .
Anforderungen:
Mehrere DBMSs, ich müsste nur einen Datenbanktyp/Speicherort/Login angeben. Firebird, MSSQL, Oracle sind ein Muss.
Läuft unter Windows
Kostenlos wäre schön
Ich würde wie oben gesagt Einschränkungen zu Ihrem dba hinzufügen. Wenn Ihre Daten der Einschränkung nicht entsprechen, müssen Sie die Datensätze natürlich aktualisieren, um die Daten in der richtigen Form zu erhalten. Es reicht nicht aus, die Daten zu identifizieren, die nicht mit den Geschäftsanforderungen übereinstimmen. Sie müssen das Datenwörterbuch mit Einschränkungen korrigieren und dann Trigger hinzufügen. Bauen Sie die komplizierten Geschäftsanforderungen in den Code ein.
Ich würde vorschlagen, Python und ein einfaches Skript mit der entsprechenden Datenbankschnittstelle zu verwenden:
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" # You will need your real DB details here
)
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Prepare SQL query to get records from the database.
sql = "SELECT * FROM EMPLOYEE" # for example
try:
# Execute the SQL command
cursor.execute(sql)
# Fetch a row in a list.
for row in cursor.fetchone():
# Put your checks here with Failure set to the results!
if Failure:
# Now print fetched result
print "some details that identify the record that failed e.g.: %s, %s" % \
(row[0], row[1])
except:
print "Error: unable to fetch data"
# disconnect from server
db.close()
Bob Dalgleish
Alejandro