2009-07-01 22 views
20

Cuando comenzamos con el control de código fuente, los desarrolladores simplemente editaban los scripts en la base de datos y justo antes del lanzamiento se realizaba un script grande de todos los cambios. Esto funcionó muy bien hasta que uno de los desarrolladores accidentalmente borró un procedimiento almacenado y todo el trabajo se perdió.SQL Server Source Control

Después de eso, colocamos todos los scripts para crear los procedimientos almacenados en archivos de texto y los almacenamos en control de fuente. El problema aquí es que los desarrolladores a veces actualizan el procedimiento almacenado en el control de código fuente o en la base de datos y olvidan actualizar el otro.

Mi sueño es tener un sistema donde un desarrollador entra y verifica un procedimiento almacenado. Luego, después de realizar los cambios, la base de datos se actualiza automáticamente.

¿Es esto solo un sueño? ¿Cuál es la mejor forma de controlar el servidor SQL de origen?

+0

Eso es un gran problema, le he pedido mucho tiempo, pero todavía no hay una buena respuesta, la única respuesta parece ser coordinarlo mediante procedimientos operativos. – tekBlues

+0

Creamos http://tessik.com/sqlhistorian por esta misma razón: confiar en un desarrollador para actualizar su control de versiones contra lo que ya hicieron en el archivo db es un ejercicio inútil. Nuestro sistema registra automáticamente el cambio en el control de fuente una vez que el T-SQL llega al servidor, sin ninguna interacción adicional del usuario. –

+0

Muchas empresas ** no permiten ** que los desarrolladores apliquen scripts directamente en la producción, por lo que creo que el mejor escenario es permitir que (un DBA) actualice ** desde los scripts a la base de datos ** y no al revés. Sin embargo, en el mundo real es posible que alguien no siga correctamente los procedimientos de cambio, por lo que ** lo mejor es permitir la comparación bidireccional. Pruebe esta herramienta gratuita: ** [http://servantt.com] (http://servantt.com/?so) - le permite realizar ingeniería inversa de sus objetos, guardar en scripts, comparar bases de datos con scripts, iniciar WinMerge para comparación, actualización de scripts o aplicar cambios a la base de datos. – drizin

Respuesta

11

Hemos estado utilizando Visual Studio Team System Database Edition recientemente, y tengo que decir que ha funcionado muy bien. Todos los procedimientos almacenados se almacenan como archivos y se controlan dentro y fuera del control de fuente, y tiene herramientas para generar scripts, etc.

Además, en el pasado hemos utilizado scripts almacenados como archivos de texto que están registrados y fuera del control de la fuente La regla era que tenía que verificar el archivo, luego editarlo, por ejemplo, Management Studio, y guardarlo, y volver a comprobarlo. En la parte superior de cada archivo de script de procedimiento almacenado se descartaría el proceso almacenado existente. y luego usa la instrucción CREATE para crear una nueva (pasa por el problema CREAR/ALTERAR). Luego teníamos una herramienta que ejecutaba todos los scripts en el orden correcto para construir una base de datos en blanco desde cero, y luego usamos el producto SQL Compare de RedGate para generar un script para actualizar nuestras bases de datos existentes. Admito que fue tedioso.

Casi al mismo tiempo trabajé en un sistema con otros 10 desarrolladores, e implementaron un riguroso procedimiento de gestión de cambio de base de datos. Había muchas, muchas aplicaciones que dependían de un conjunto de 2 o 3 bases de datos. Cada vez que un esquema de base de datos tuvo que cambiar (aquí solo estamos hablando de tablas, columnas y vistas), se creó un documento que explicaba el cambio, y luego había una matriz que enumeraba los cambios frente a qué aplicaciones creíamos que impactaría . Luego, el documento se circuló y tuvo que ser revisado por alguien responsable de cada aplicación, y tuvieron que buscar a través de su aplicación para saber dónde podría verse afectado, etc. Fue un procedimiento largo y arduo, pero funcionó. Sin embargo, los procesos almacenados simplemente se almacenaban como archivos de texto en el control de fuente.

En el pasado más lejano, con proyectos más pequeños que eran más como aplicaciones de escritorio con una base de datos como el almacén de datos, cada vez que la aplicación se inició, me:

  • Comprobar para ver si existía la base de datos, y Si no, cree que
  • Comprobar la existencia de todas las tablas, y si no, ellos crear
  • Comprobar la existencia de todas las columnas, y si no, añadirlos

Cada vez que necesitaba cambie el esquema, solo agregaría más código al final del código de inicio para modificar el esquema según sea necesario, teniendo cuidado de migrar cualquier información existente. El beneficio de esto fue que solo podría desinstalar y reinstalar una nueva versión del software, y automáticamente actualizaría la base de datos existente a la última versión. La instalación, las actualizaciones y el mantenimiento fueron un sueño. Sin embargo, eso no funcionaría para sistemas más "empresariales".

Puede reducir algunos de estos problemas adoptando Entidades ADO.Net u otro Entity Framework similar, como Entity Spaces. Estas son capas de mapeo relacionales de objetos. Generan automáticamente clases para cada entidad (tabla) en su base de datos, incluidas las propiedades de cada columna, etc. Luego, le permiten extender esas clases con lógica personalizada. Si puede evitar tener su lógica de negocio en procedimientos almacenados y ponerlos en las clases de la Entidad, entonces el beneficio es que están fuertemente tipados. Por lo tanto, si cambia el nombre de una columna, o elimina una columna y regenera sus clases de entidad, entonces su IDE o compilador marcará automáticamente todos los lugares donde se rompe el código. Obviamente, todo el código de entidad está naturalmente en control de fuente con el resto de tu código fuente también.

+2

Database Edition, especialmente las nuevas compilaciones que salen recientemente, es una gran herramienta no solo para control de versiones, sino también para señalar malas prácticas, ayudar con cambios de esquema y refactorización, y no menos importante para ayudar con el proceso de implementación en el sitio del usuario final . –

+0

@Remus - sí, y me impresionó que encuentre errores como procs almacenados viejos que hacen referencia a una columna inexistente en una tabla olvidada hace mucho tiempo, etc. Realmente ayudó a limpiar las cosas. –

+0

Pruebe esta herramienta gratuita: [http://servantt.com] (http://servantt.com/?so) - le permite realizar ingeniería inversa de sus objetos, guardar en scripts, comparar bases de datos con scripts, iniciar WinMerge para comparar , actualice scripts o aplique cambios a la base de datos. No puede manejar escenarios complejos como los suyos, pero probablemente pueda encajar en muchas otras compañías. – drizin

1

La forma en que he visto que el control de fuente funciona mejor para SQL Server en un ambiente de equipo fue cuando el DBA hizo compilaciones regulares de la base de datos usando el código registrado. Por lo general, solo se necesita una sola instancia de pérdida de algo porque no se verificó antes de que los desarrolladores se den cuenta de que registrar su código significa algo.

Espero que esto ayude,

Bill

0

He trabajado en un entorno en el que el control de código fuente formaba parte del procedimiento de publicación.

A los DBA se les dieron notas de la versión que requerían que el DBA obtuviera del control de código fuente y luego liberaran cambios de procedimientos almacenados o scripts SQL desde allí. Si puede obtener los DBA de lado, esta es una buena manera de evitar lanzamientos abortados, ya que debería poder realizar una prueba previa del SQL en un sistema UAT.

Si los datos no se liberan en el control de fuente, entonces no se liberan.

Se usaron ramas de integración para liberar el código.

0

Siempre hemos utilizado la utilidad scptxfr que viene con SQL Server 2000 para crear una secuencia de comandos de la base de datos a un archivo que está almacenado bajo el control de código fuente.

Lo ejecutamos antes de hacer un check in y resaltará cualquier posibilidad que haya ocurrido (ya sea que se haya esperado o no). No viene con 2005 o posterior, pero si tiene alguna instalación anterior de 2000, aún funciona en contra de las versiones más recientes. Puede tener problemas con esquemas complejos, pero es un buen punto de partida. También podría convertirse en un proceso automático cuando se combina con activadores de control de fuente o integración continua.

0

La clave es limitar el derecho a presionar solo a unas pocas personas e insistir en que nunca hagan cambios, excepto mediante la activación de un script desde el control de código fuente. En las siguientes versiones de SQl Server, también puede configurar el registro de DDL para averiguar exactamente quién cambió esa tabla a una versión que no está en el control de código fuente.

Cuando teníamos el control de fuente en nuestra base de datos, todos tenían derechos (algo que hemos solucionado), así que teníamos que comparar periódicamente las comprobaciones de control de fuente con la base de datos actual de prod y deshacernos de cualquier cambio no autorizado.Solo tomó hacerlo una vez para convencer a los desarrolladores de que tenían que usar el control de código fuente.

8

Red Gate SQL Source Control integra completamente el control de fuente a SQL Server Management Studio. Esto efectivamente vincula su (s) base de datos de desarrollo a su sistema de control de fuente (TFS y SVN) existente, lo que le permite realizar cambios y recuperar los cambios de otros desarrolladores con solo presionar un botón.

http://www.red-gate.com/products/SQL_Source_Control/

Ahora hemos añadido VSS y el apoyo Bóveda SourceGear a una versión de EA. Más detalles aquí: http://www.red-gate.com/MessageBoard/viewtopic.php?t=12265

+0

Vale la pena señalar que Red Gate ya no es compatible con VSS debido al inminente fin de la vida de Microsoft. –

+1

También vale la pena mencionar que la implementación de TFS de Red-Gate no admite directamente políticas como la asociación de elementos de trabajo a registros. Tienen una implementación, pero es tedioso. – TheLegendaryCopyCoder

0

Hace poco escribió un guión para ayudar a resolver este problema - no es control de código fuente completo de cualquier tramo, pero es sólo un único procedimiento almacenado que almacena el historial de los objetos de la base de una tabla - se puede programarlo usando el Agente SQL para ejecutarlo tantas veces como desee.

Si bien tomará instantáneas en un punto en el tiempo, en realidad no admite los registros, pero ha guardado nuestro tocino unas cuantas veces cuando un proceso almacenado se quita o cambia sin una copia de seguridad, y la versión anterior se restaura fácilmente

http://trycatchfinally.net/2011/06/roll-your-own-lightweight-sql-server-source-control/

0

desarrolladores Conseguir para recordar a cometer código es complicado.

El otro lado es un poco más fácil porque una vez que las actualizaciones están en control de fuente, se pueden automatizar con scripts para construir una nueva base de datos o descartar y volver a crear una base de datos desde el control de origen.

Echa un vistazo a este product gratuito que ayudará a configurar una línea de base de una base de datos de SQL Server.

La herramienta también creará una base de datos desde el control de origen, por lo que en teoría, puede tener X desarrolladores trabajando en el proyecto y todos ejecutando los commits de la fuente en su propia base de datos, y viceversa. sus actualizaciones vuelven al control de la fuente.

Desafortunadamente, - No puedo pensar en cómo hacer que los desarrolladores recuerden realizar cambios en la base de datos. Tal vez podrían ejecutar una herramienta (o archivo por lotes) que realizará una extracción de la base de datos local para controlar el origen y luego adquirir el hábito de ejecutar esta tarea repetitiva a través de un archivo por lotes, cada vez que realicen una extracción/confirmación en origen ¿controlar?

Cuestiones relacionadas