Automatizando Red Gate Source Control DB Link y Commit to SVN

Tenemos un requisito para el cual queremos tener el control de origen de Red Gate como parte de la interfaz automatizada.

Nos gustaría enlazar programáticamente la database requerida y realizar un commit para los cambios en la database.

es posible? En caso afirmativo, ¿qué API deberíamos usar?

Sé que esta pregunta es antigua, pero estoy haciendo exactamente lo que estás describiendo.

Tengo un trabajo que se ejecuta cada X minutos y pone el estado actual de la database en el control de la versión (para nosotros es voluble pero puedes lograr exactamente lo mismo con git o lo que sea).

cd c:\data\SourceCodeDirectory hg pull hg update if not exist "c:\data\SourceCodeDirectory\databaseName" mkdir "c:\data\SourceCodeDirectory\databaseName" cd "c:\Program Files (x86)\Red Gate\SQL Compare 11" sqlcompare /s1:DBServer /db1:databaseName /scr2:"c:\data\SourceCodeDirectory\databaseName" /synchronize cd c:\data\SourceCodeDirectory\databaseName hg add hg commit -m "Database Changes" -u DatabaseSchemaUser hg push 

Cualquier cambio realizado en la database estará en control de versión tan pronto como se ejecute este trabajo.

Esa es una dificil. Dependiendo de cómo automatice, podría usar una combinación de otros progtwigs. Por ejemplo, si tiene algún tipo de sistema de CI, puede comparar automáticamente los files en el control de código fuente a una database en vivo usando SQL Compare y decirle que se sincronice. Necesitará la interfaz de command-line del sistema de control de origen para verificar los cambios en.

SQL Source Control, como una pieza de software, fue diseñado para funcionar interactivamente.

Si desea hacer esto en el código (c #, VB), puede aprovechar la API del sistema de control de origen para verificar files si tienen uno. Por ejemplo, SVN tiene "SharpSVN" y también hay una API para TFS.

Tal vez esto debería ser un comentario, pero necesito formatting y espacio que no está disponible allí.

Los "commits automatizados" como este suelen ser riesgosos, ya que corren el riesgo de romper la atomicidad y la pérdida de información. Considere estos escenarios:

  1. Dos desarrolladores están trabajando en cambios independientes en la database. Ambos alteran sus tablas respectivas al mismo time, y esta automation lo recoge y confirma los cambios de la tabla como una unidad. ¿Cómo separas estas dos actividades?
  2. Cuando sucede lo anterior, ¿qué nombre va en el logging de cambios del repository?
  3. Un desarrollador está trabajando en un cambio extenso que implica cambios en varias tablas y procedimientos almacenados. Esta automation compromete a cada uno de ellos de forma independiente. ¿Cómo los "agrupa" para registrar y auditar, revisar los cambios que se han realizado, etc.?
  4. En mi entorno, todo cambio comprometido con el repository de código debe tener una ID de cambio registrada en el post de confirmación. ¿Cómo funcionaría esto aquí?

Mi recomendación es que cambies el requisito. Hay muchas forms de que surjan consecuencias involuntarias (malas).

¿Estás haciendo esto como parte de un process de construcción automatizado? De ser así, sería útil saber qué herramienta de compilation y qué herramienta de control de origen está utilizando.

Esto debería proporcionar algunos resources útiles:

http://www.networking-gate.com/products/sql-development/sql-automation-pack/

Hay scripts NAnt y MSBuild que pueden realizar tareas útiles de compilation / testing para su database SQL Server. Si desea hacer algo más personalizado, puede usar una combinación de su command-line del sistema de control de versiones y la command-line de SQL Compare.