Procedimientos almacenados bajo control de fuente, mejores prácticas

16

Actualmente estoy usando Tortoise SVN para controlar la fuente de una aplicación web .NET. ¿Cuál sería la mejor manera de incorporar nuestros procedimientos almacenados de SQL Server a Source Control? Actualmente estoy usando VS 2010 como mi entorno de desarrollo y me estoy conectando a una base de datos SQL Server 2008 R2 fuera de las instalaciones usando las herramientas de datos de SQL Server (SSDT).

Lo que he estado haciendo en el pasado es guardar los procs en un archivo .sql y mantener estos archivos bajo control de origen. Estoy seguro de que debe haber una manera más eficiente que esto? ¿Hay alguna extensión que pueda instalar en VS2010, SSDT o incluso SQL Server en la máquina de producción?

QFDev
fuente
2
Si está utilizando el tipo de proyecto SSDT en Visual Studio, agregue ese proyecto al control de origen. Eso es.
Mark Storey-Smith
1
Por favor, aclare su (s) objetivo (s): ¿está buscando versiones de los objetos de la base de datos o está intentando utilizar esto también como plataforma de implementación?
Jon Seigel
Pregunta similar stackoverflow.com/questions/146543/…
MiFreidgeim SO-deja de ser malvado

Respuestas:

14

Existen herramientas, como esta de Redgate , pero siempre he encontrado que lo mejor es guardar como archivos SQL, tal vez incluso en un Proyecto de base de datos (SSDT?) En su solución.

Junto con esto, sugiero las siguientes pautas:

  • Asuma siempre la versión SVN como la "actual" / "última"
  • Asegúrese de que cada script que ejecute tenga un " if exists then drop" apropiado al inicio
  • Recuerde escribir sus permisos, si corresponde

Inicialmente, puede crear estos archivos SQL mediante secuencias de comandos directamente desde SSMS, y puede configurar SSMS para que ejecute todas sus " drop" y " create" así como sus permisos.

RoKa
fuente
No conocía el tipo de proyecto de base de datos y recién comencé a explorar SSDT, pero esto parece prometedor. He optado por esta solución ya que no hay dependencia de herramientas de terceros y puedo soltar fácilmente los archivos .sql en nuestro control de fuente actual.
QFDev
Tampoco permita derechos a desarrolladores en productos y aquellos con derechos solo se implementan desde el control de origen.
HLGEM
3
Tenga cuidado con "si existe, suelte, (re) cree con una nueva definición" si cambia las tablas / vistas a las que hacen referencia otras vistas / procesos. Encontré circunstancias en las que la salida de tales vistas dependientes está dañada (el tipo de columna y el contenido se movieron pero los nombres no) debido a que un plan de consulta se reutiliza sin recompilar asumiendo la estructura anterior. Una opción más segura es "si no existe crear dummy" seguido de "alter table / view / proc", ya que alter seguirá los registros de sysdepends para invalidar los planes según sea necesario y drop + create no eliminará esos registros y create no buscará referencias colgantes.
David Spillett
El comentario de @DavidSpillett es aún más importante si tiene activadores en el control de versiones, porque soltar + crear puede fallar incluso en un punto muerto, no debería suceder con crear simulado + alterar
James Z
4

Guardar los archivos SQL en el control de origen proporciona control sobre los archivos SQL solamente. No controla los cambios de los objetos reales de la base de datos, ni evita los cambios simultáneos del mismo objeto de la base de datos por parte de múltiples usuarios (y supongo que a usted también le gustaría tener eso bajo control). Lo que utilizamos es una herramienta de terceros ( Versión ApexSQL), se integra con SSMS y VS, puede elegir si desea trabajar con una versión de la base de datos del objeto o con una versión de control de origen. Si está editando una versión de la base de datos, se desprotege automáticamente solo para usted, para que nadie más pueda editarla (no combina cambios de diferentes usuarios). Solo cuando lo vuelves a registrar, otros pueden modificarlo. Y puede tener su versión SC diferente de la versión de un objeto vivo (lo uso cuando salgo por el día y planeo terminar las ediciones y probarlo en el siguiente)

Carol Baker West
fuente
3

Prueba Ankhsvn , muy recomendable y gratis.

Desde la página de inicio:

AnkhSVN es un proveedor de control de fuentes de Subversion para Microsoft Visual Studio 2005, 2008, 2010 y 2012 .

AnkhSVN proporciona compatibilidad con la administración del código fuente Apache ™ Subversion® para todos los tipos de proyectos admitidos por Visual Studio y le permite realizar las operaciones de control de versiones más comunes directamente desde el IDE de Microsoft Visual Studio.

El panel de Cambios pendientes le brinda una visión única de su proceso de desarrollo y proporciona un fácil acceso al código fuente y a las funciones de administración de problemas. La integración de control de código fuente profundo (SCC) le permite concentrarse en el desarrollo, mientras que AnkhSVN realiza un seguimiento de todos sus cambios y le proporciona las herramientas para manejar de manera efectiva sus necesidades específicas.

SqlACID
fuente
3

He intentado el proyecto de base de datos de RedGate y Visual Studio y prefiero almacenar la definición de la base de datos en el proyecto de base de datos. Tan pronto como la base de datos se convierta en parte de la solución, puede usar su proveedor de control de fuente preferido. La mayoría tiene una excelente integración de Visual Studio.

Con las herramientas SSDT, tiene la 'última versión' de la definición de la base de datos, lo que le permite realizar comparaciones de esquemas y generar scripts de actualización de esquemas fácilmente.

Dicho esto, el esquema generalmente es solo una parte de la ecuación. En la vida real resulta que las bases de datos ya tienen muchos datos. Y mis usuarios tienden a sentirse bastante decepcionados cuando lo pierden.

Tan pronto como lancé la v1.0, surge la necesidad de mantener los scripts de actualización. A veces, estos solo contienen cambios en el esquema, pero muchas veces necesito crear valores predeterminados basados ​​en el contenido de alguna otra tabla, necesito liberar una restricción particular hasta que sembraron los datos, etc. Por lo general, simplemente actualizar el esquema no es suficiente. Mi preferencia es tener estos scripts de actualización en una carpeta separada en el proyecto de base de datos también. Por lo general, se vería como 'actualizar de v1.0 a v1.1'.

Mis bases de datos siempre tienen una tabla de referencia que me indica el número de versión actual, por lo que puedo bloquear actualizaciones incompatibles. La primera declaración en mis scripts de actualización verifica la versión actual y rescata si es diferente de lo esperado.

Otro beneficio de los proyectos de bases de datos es poder implementar diferentes conjuntos de datos basados ​​en el mismo esquema. Tengo un conjunto de datos diferente para el desarrollo, el equipo de control de calidad, la prueba de aceptación del usuario y las pruebas de integración automatizadas. Dado que un proyecto de base de datos puede tener solo 1 secuencia de comandos posterior a la implementación, el truco aquí es hacer un nuevo proyecto de base de datos que haga referencia al proyecto 'maestro' y hacer que el conjunto de datos personalizado sea parte del proceso posterior a la implementación de ese proyecto.

Estos fueron mis 2 centavos, sea cual sea el proceso que surja, sobre todo, debe ajustarse a usted y a su equipo y, con suerte, apoyarlo con la mayoría de las tareas comunes.

souplex
fuente
0

Terminé escribiendo una herramienta yo mismo.

Está disponible para descarga gratuita: http://www.gitsql.net

Espero que ayude a otras personas que desean alcanzar el mismo objetivo final.

Aquí hay un artículo que describe cómo controlar el origen de SQL Server. http://gitsql.net/documentation-04_SQL_Server_and_GIT

He tratado de hacerlo lo más fácil posible. (3 pantallas)

  • Conectarse a SQL Server
  • Seleccionar objetos
  • Elija la carpeta para exportar / importar desde

También, accidentalmente, agregué la función de poder elegir selectivamente objetos individuales para importar, o exportar. Lo que lo hace mucho más fácil durante el desarrollo.

Por lo general, haría un cambio en un procedimiento almacenado y una tabla, y luego exportaría esos dos objetos a un directorio GIT.

Luego uso Source Tree para ver visualmente los cambios y luego los confirmo en bitbucket si estoy contento.

Anup Saund
fuente
44
descarga gratuita, pero solo para 20 objetos. Esta respuesta es solo un anuncio para su producto.
Thronk
-1

Mi compañía acaba de desarrollar esta nueva herramienta ( gratuita ) que lo ayuda a extraer fácilmente scripts para bases de datos SQL, puede hacer comparaciones , puede iniciar WinMerge para comparar rápidamente scripts con bases de datos en vivo, y también puede sincronizar diferencias tanto actualizando los scripts como aplicando los cambios a la base de datos (a excepción de las tablas, que implicarían más complejidad y más riesgos).

Servantt es el WinMerge para comparar bases de datos de SQL Server con secuencias de comandos controladas por versión.

Es compatible y fomenta las mejores prácticas en el desarrollo de software:

  • Mantener los objetos de la base de datos bajo control de versiones (*)
  • Eliminar los derechos de acceso de los desarrolladores en entornos de producción
  • Revisión de DBA de cambios en procedimientos / vistas para cuellos de botella de rendimiento y estándares de nomenclatura
  • Nombrar objetos utilizando identificadores totalmente calificados y delimitadores entre corchetes (corrige los scripts CREATE PROCEDURE / VIEW / FUNCTION / etc)

(*) Las secuencias de comandos se guardan en una carpeta local que puede ser una copia de trabajo de Git, Subversion, TFS, Source Safe o cualquier otro VCS.

Descarga gratuita: http://servantt.com

La versión profesional (que aún está en desarrollo) será una bestia completamente diferente: está dirigida a la automatización de la implementación (administración de versiones), para automatizar tareas como actualizar IIS, actualizar los Servicios de Windows, etc.

drizin
fuente
Esta herramienta no funciona
Neeraj Kumar
@NeerajKumar hay una dirección de "contacto" en la página donde puede describir su problema. Me encantaría ayudar. Hay más de mil usuarios activos, supongo que funciona en cierto sentido :-)
drizin