2008-10-03 9 views
15

Estoy buscando una forma de validar el esquema SQL en un DB 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, debe haber una forma de advertir al usuario y enumerar los cambios necesarios.cómo comparar/validar el esquema sql

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

Actualización: listas puerta roja "de $ 395". ¿Algo gratis? ¿O más infalible que solo mantener el número de versión?

+0

Modifiqué esto y agregué una etiqueta 'redgate' debido a la gran cantidad de respuestas que lo sugerían. – ConcernedOfTunbridgeWells

Respuesta

22

Prueba este SQL.
- Ejecútelo contra cada base de datos.
- Guarda la salida en archivos de texto.
- Diff 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 
+0

Obviamente, una herramienta completa es mejor, ¡pero este es un buen método rápido y sucio! – Rory

+1

¡Hermoso! El código fuente a menudo es mejor que una herramienta compilada. Esto me ahorró horas! –

0

Haga una tabla y almacene su 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'); 

A continuación, puede comprobar el número de versión almacenada en la base de datos coincide con el código de la aplicación durante la configuración de la aplicación o donde sea conveniente.

1

Si usted está buscando una herramienta que se puede comparar dos bases de datos y le mostrará la puerta roja diferencia hace SQL Compare

8

usted puede hacerlo mediante programación mirando en el diccionario de datos (sys.objects, sys.columns etc.) de ambas bases de datos y compararlas. Sin embargo, también hay herramientas como Redgate SQL Compare Pro que hacen esto por usted. He especificado esto como parte de las herramientas para el control de calidad en los sistemas de almacenamiento de datos en algunas ocasiones, incluida la que estoy trabajando actualmente. En mi concierto actual esto no fue problema en absoluto, 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 la mantenga en control de versiones. Ejecute el script en una base de datos temporal y compárelo con su objetivo para ver las diferencias. También generará scripts de parche si así lo desea.

Hasta donde yo 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 también sea gratis. Incluso como una herramienta de control de calidad para demostrar que el DB de producción no está en la configuración que se suponía que era, le ahorrará su precio de compra después de un incidente.

+0

nos encanta SQL Compare. Ha hecho las cosas realmente fáciles. –

0

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

Tal vez esto es sólo una cuestión de comparar cantidades de filas y los recuentos de índices para cada tabla - si tiene gatillo y versiones de procedimientos almacenados que preocuparse también entonces usted necesita algo más industrial

1

Usted no ha mencionado el cual RDMBS que estés utilizando: si los puntos de vista de esquema de información están disponibles en su RDBMS, y si se puede hacer referencia a dos esquemas de la misma máquina, puede consultar las vistas de esquema de información a identificar las diferencias en: -tables -columnas -columna tipos -contrañas (por ej.claves primarias, restricciones únicas, claves externas, etc.)

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

Es un poco tedioso, pero es posible.

0

Probar dbForge Data Compare for SQL Server. Puede comparar y sincronizar cualquier base de datos, incluso las más 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 SQL confiable que ofrezca una comparación y sincronización de datos de tabla 3 veces más rápida en sus bases de datos de SQL Server. Es dbForge Data Compare para SQL Server.

ventajas principales:

  • Mayor rapidez en la comparación y sincronización de bases de datos grandes
  • Soporte de SQL Server nativo de copias de seguridad
  • asignación personalizada de las tablas, columnas y esquemas
  • Múltiples opciones para afinar su comparación y sincronización
  • Generación de informes de comparación y sincronización

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

4

Ahora puede usar mi de administración de SQL Studio gratis para ejecutar una comparación de esquemas , Comparación de datos y sincronización los cambios. Ya no es necesario descargar la licencia desde aquí http://www.simego.com/Products/SQL-Admin-Studio

También funciona en SQL Azure.

[ACTUALIZACIÓN: Si yo soy el autor del programa anterior, ya que es ahora gratuito que sólo quería compartir con la comunidad]

1

me encontré con este pequeño y libre de la herramienta que se adapte 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 ningún elemento elegante como los scripts generados automáticamente para hacer desaparecer las diferencias y no compara ningún dato.

Es sólo una pequeña utilidad gratuita que te muestra esquema de diferencias :)

9

espero que pueda ayudar - este es el artículo que sugiero la lectura:

Compare SQL Server database schemas automatically

Se describe cómo se puede automatice el proceso de sincronización y comparación de esquemas de SQL Server utilizando T-SQL, SSMS o una herramienta de terceros.

Cuestiones relacionadas