Pregunta

Mi necesidad es bastante básico y no quiero reconstruir la rueda. Me gusta la escritura de mi base de datos y han escrito guiones para actualizar desde una versión a la siguiente, es decir 001-crear-tables.sql, 002-alter-column.sql etc.

Lo que quiero es una línea de comando herramienta sencilla o MSBUILD que se verá en una base de datos ver qué versión de la base de datos está en (el uso de algunas convenciones tabla) y se ejecutan todos los scripts en una carpeta que tenga un número mayor que el actual versión de la base de datos. También me gustaría que la herramienta para hacer retroceder un guión si falla / arroja un error y se detendrá en ese punto.

Esto es lo que me gustaría, pero no me importa cambiar mis convenciones aunque yo quiero escribir mis propias secuencias de comandos SQL. También quiero que la herramienta sea libre o de código abierto, ya que no necesito demasiado. A medida que mis proyectos son C # yo preferiría la herramienta se construirá en .Net

¿Fue útil?

Solución 7

Aceptar lo que no me gusta ninguna de las opciones que he encontrado por ahí. He encontrado algunas buenas herramientas para crear los scripts pero nada que rastrear la versión de la base de datos y ejecutar los nuevos guiones. De todos modos me fui por delante y rodé mi propia herramienta de código abierto para hacer el trabajo. Si desea utilizarlo si se puede descargar desde CodePlex su llamada KissDB . También vomité un post sobre ello en mi blog blog.RunXc

Otros consejos

¿Ha mirado abierto DBDiff todavía? Puede ser un buen lugar para empezar.

Si cambia de opinión acerca de código abierto, SQL Red Gate Comparar es el camino a seguir de la OMI.

Hay un proyecto muy interesante llamado SQLRunner en SourceForge - es C #, que es .NET, es pasado "pre-alfa" :-)

No he utilizado yo mismo, pero todavía -. Se ve bastante bien, en mi humilde opinión

Marc

Este es un problema difícil, así de simple. Las herramientas mencionadas en otras respuestas sin duda puede ayudar, pero todavía nos queda que hacer mucho a sí mismo.

De hecho, tengo una tabla en mi esquema que almacena un identificador para cada secuencia de comandos de cambio (que coincide con el número de caso en mi sistema de seguimiento de emisión / insecto). Al final de cada secuencia de comandos de cambio insertar el ID en esa tabla. Tengo un script independiente que comprueba para ver lo que se ha hecho en cualquier caso específico de la base de datos. Sería factible para automatizar funcionando cada una de las secuencias de comandos que no se han ejecutado todavía, pero me gustaría ejecutar secuencias de comandos de cambio de forma manual en caso de que algo va mal.

Rollbacks pueden ser casi imposible, sobre todo porque muchos cambios en el esquema requieren algún tipo de migración de datos. He encontrado que la mejor práctica con cualquier cambio en el esquema son para hacer compatible con versiones ellos. Nunca cambiar el nombre de una columna o tabla (al menos al principio). Sólo añadir cosas, y crea todas las nuevas añade anulable. Una secuencia de comandos de deshacer simplemente elimina la materia nueva, si se da cuenta que algo no está del todo bien. Por supuesto que terminan con viejos, columnas y tablas no utilizadas, por lo que se escribe una segunda secuencia de comandos que se ejecuta después de que su versión actual se considera estable, que se deshace de la vieja materia.

Te quiero escribir todos los guiones sí mismo que puede tomar ventaja de la SQL Server 2005 tablediff Utilidad que le dará una gran cantidad de flexibilidad. Algunos ejemplos de uso se pueden encontrar aquí

Si usted tiene todos los scripts para una versión dada en una carpeta, puede ejecutar esto como un archivo por lotes si se coloca en esa carpeta:

for %%X in (*.SQL) do SQLCMD -S <SERVER_NAME> -d <DATABASE_NAME> -E -I -i "%%X"  >> ResultBatch.txt

Lo sentimos, no recuerdo donde me dieron esto desde o le daría crédito.

Tenemos nuestros desarrolladores comprobar las secuencias de comandos de cambio de base de datos en la subversión. Todos los guiones son repetibles por lo que ellos pueden ejecutar varias veces sin error. También vinculamos las secuencias de comandos de cambio a emitir objetos o identificadores de incidencias para que podamos contener un conjunto de cambios si es necesario. Tenemos, pues, un proceso de construcción automatizado que echa un archivo de secuencia de comandos SQL individual con todos los cambios ordenados apropiadamente. Este archivo solo se utiliza para promover los cambios en los entornos de prueba, control de calidad y producción. Creemos que este es el mejor enfoque con desarrolladores de la empresa. Más detalles sobre cómo lo hacemos aquí Su regeneración sería apreciada.

Uso Liquibase. Es Java sin embargo.

Sí, puede escribir sus scripts de migración en la variante de SQL de su elección.

Está bien probado y utilizado por una gran cantidad de personas.

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