Estoy buscando una herramienta de verificación de integridad de datos que me permita especificar reglas con las que escanea una base de datos en busca de inconsistencias lógicas.
Fondo:
Tenemos una gran aplicación donde la integridad de los datos se mantiene en el código: por ejemplo, no hay activadores en la base de datos para eliminaciones en cascada.
Debido a cosas como abortos de programas, fallas en las actualizaciones, errores en el código, etc., los datos pueden corromperse.
Me gustaría tener una herramienta separada para verificar errores lógicos/inconsistencias en los datos, especificando reglas como:
Los valores en el campo deben ser completados
Los valores de los campos son obligatorios
Los valores de campo deben estar en un rango constante [X..Y]
Los valores de campo deben coincidir con una expresión regular
Todos los valores para el campo X deben ser únicos
O relaciones 'a través de la mesa':
Los valores de campo deben estar dentro del rango especificado por el campo X de la tabla T al campo Y de la tabla T
Los valores en el campo X de la tabla T deben provenir del campo Y de la tabla S
El campo X en la tabla T debe ser más grande que el campo Y en la tabla T
No estoy hablando de los programas que la mayoría de los DBMS ya tienen y que verifican las estructuras internas de los archivos, la corrupción del índice, etc. (por ejemplo, la Tarea de verificación de integridad de la base de datos que puede usar en un plan de mantenimiento para SQL Server), quiero verificar si hay errores lógicos .
Requisitos:
Múltiples DBMS, solo tendría que especificar un tipo de base de datos/ubicación/inicio de sesión. Firebird, MSSQL, Oracle son imprescindibles.
Ejecutando bajo Windows
Gratis estaría bien
Agregaría restricciones a su dba como se dijo anteriormente. Por supuesto, si sus datos no se ajustan a la restricción, tendrá que actualizar los registros para obtener los datos en la forma correcta. Identificar los datos que son inconsistentes con los requisitos del negocio no es suficiente. Debe arreglar el diccionario de datos con restricciones y luego agregar disparadores. Integre los complicados requisitos comerciales en el código.
Sugeriría usar Python y un script simple usando la interfaz de base de datos adecuada:
#!/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 Dalgliesh
Alejandro