Pregunta

Estoy buscando una forma de validar el esquema SQL en una base de datos de producción después de actualizar una versión de la aplicación. Si la aplicación no coincide con la versión del esquema DB, debería haber una forma de advertir al usuario y enumerar los cambios necesarios.

¿Existe una herramienta o un marco (para usar programáticamente) con funciones integradas para hacer eso? ¿O hay algún algoritmo simple para ejecutar esta comparación?

  

Actualizar: la puerta roja enumera " desde $ 395 " ¿Algo gratis? ¿O más infalible que simplemente mantener el número de versión?

¿Fue útil?

Solución

Prueba este SQL.
- Ejecutarlo contra cada base de datos.
- Guarda la salida en archivos de texto.
- Difundir los archivos de texto.

/* get list of objects in the database */
SELECT name, 
       type 
FROM  sysobjects
ORDER BY type, name

/* get list of columns in each table / parameters for each stored procedure */
SELECT so.name, 
       so.type, 
       sc.name, 
       sc.number, 
       sc.colid, 
       sc.status, 
       sc.type, 
       sc.length, 
       sc.usertype , 
       sc.scale 
FROM   sysobjects  so , 
       syscolumns  sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.name

/* get definition of each stored procedure */
SELECT so.name, 
       so.type, 
       sc.number, 
       sc.text 
FROM   sysobjects  so , 
       syscomments sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.number 

Otros consejos

Espero poder ayudar. Este es el artículo que sugiero leer:

Comparar esquemas de base de datos de SQL Server automáticamente

Describe cómo puede automatizar la comparación de esquemas de SQL Server y el proceso de sincronización mediante T-SQL, SSMS o una herramienta de terceros.

Puede hacerlo programáticamente mirando en el diccionario de datos (sys.objects, sys.columns, etc.) de ambas bases de datos y comparándolos. Sin embargo, también hay herramientas como Redgate SQL Compare Pro que hacen esto por tú. He especificado esto como parte de las herramientas para control de calidad en sistemas de almacenamiento de datos en algunas ocasiones, incluida la que estoy trabajando actualmente. En mi concierto actual, esto no fue un problema, ya que los DBA aquí ya lo estaban usando.

La metodología básica para usar estas herramientas es mantener un script de referencia que construya la base de datos y mantener esto en el control de versiones. Ejecute el script en una base de datos inicial y compárelo con su objetivo para ver las diferencias. También generará scripts de parches si se siente inclinado.

Por lo que sé, no hay nada gratis que haga esto a menos que tenga ganas de escribir el suyo. Redgate es lo suficientemente barato como para que sea gratis. Incluso como una herramienta de control de calidad para demostrar que la base de datos de producción no está en la configuración que debía, le ahorrará su precio de compra después de un incidente.

Ahora puede usar mi SQL Admin Studio de forma gratuita para ejecutar Schema Compare , Data Compare y sincronizar los cambios. Ya no es necesario descargar una clave de licencia desde aquí http://www.simego.com/Products/ SQL-Admin-Studio

También funciona contra SQL Azure.

[ACTUALIZACIÓN: Sí, soy el autor del programa anterior, ya que ahora es gratuito, solo quería compartirlo con la comunidad]

Si está buscando una herramienta que pueda comparar dos bases de datos y mostrarle la diferencia, Red Gate hace que Comparación de SQL

No mencionó qué RDMBS está utilizando: si las vistas de SCHEMA de INFORMACIÓN están disponibles en su RDBMS, y si puede hacer referencia a ambos esquemas desde el mismo host, puede consultar las vistas de SCHEMA de INFORMACIÓN para identificar diferencias en: -mesas -columnas tipos de columna - restricciones (por ejemplo, claves primarias, restricciones únicas, claves externas, etc.)

He escrito un conjunto de consultas para exactamente este propósito en SQL Server para un trabajo anterior: funcionó bien para identificar diferencias. Muchas de las consultas utilizaban LEFT JOINs con IS NULL para verificar la ausencia de elementos esperados, otras comparaban cosas como tipos de columnas o nombres de restricciones.

Es un poco tedioso, pero es posible.

Encontré esta herramienta pequeña y gratuita que se adapta a la mayoría de mis necesidades. http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

Es muy básico pero muestra las diferencias de esquema de dos bases de datos. No tiene nada sofisticado como scripts generados automáticamente para hacer que las diferencias desaparezcan y no compara ningún dato.

Es solo una pequeña utilidad gratuita que muestra las diferencias de esquema :)

Haz una tabla y almacena tu número de versión allí. Solo asegúrate de actualizarlo según sea necesario.

CREATE TABLE version (
    version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');

Luego, puede verificar que el número de versión almacenado en la base de datos coincida con el código de la aplicación durante la configuración de la aplicación o donde sea conveniente.

¿Qué RDBMS es esto y cuán complejos son los cambios potenciales?

Tal vez sea solo una cuestión de comparar los recuentos de filas y de índices para cada tabla: si tiene que preocuparse por las versiones de procedimientos almacenados y disparadores, entonces necesita algo más industrial

Pruebe dbForge Data Compare para SQL Server . Puede comparar y sincronizar cualquier base de datos, incluso las muy grandes. Rápido, fácil, siempre entrega un resultado correcto. Pruébalo en tu base de datos y comenta sobre el producto.

Podemos recomendarle una herramienta de comparación de SQL confiable que ofrezca 3 veces la comparación y sincronización más rápidas de datos de tablas en sus bases de datos de SQL Server. Es dbForge Data Compare para SQL Server.

Principales ventajas:

  • Comparación y sincronización más rápidas de grandes bases de datos
  • Compatibilidad con copias de seguridad nativas de SQL Server
  • Asignación personalizada de tablas, columnas y esquemas
  • Múltiples opciones para ajustar su comparación y sincronización
  • Generando informes de comparación y sincronización

Más de 30 días de prueba gratis y compra sin riesgos con 30 días de garantía de devolución de dinero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top