2009-05-07 10 views
6

Estoy tratando de implementar el control de fuente de la base de datos.utilidad gratuita para secuenciar objetos DB en ms sql

la herramienta que necesito debe crear un archivo independiente para cada objeto en la base de datos, preferiblemente dispuestos en carpetas, como

procedimientos almacenados funciones vistas mesas

y sería genial poder también volcar los resultados de ciertas consultas, con el fin de realizar un seguimiento de los cambios de datos en varias tablas de configuración ...

Me pregunto si ya hay una herramienta que pueda manejar este tipo de cosas ...

-

sólo para aclarar algunas cosas ...

ya estoy usando SQL Delta para manejar los scripts de actualización ...

me gustaría tener guiones de la base de datos para usar con subversión, así puedo rastrear qué objetos cambiaron con cada confirmación, sin tener que estudiar las secuencias de comandos de actualización ...

Estoy desarrollando una buena secuencia de comandos vb con SQL Distributed Management Objects (SQL -DMO), te diré cómo va ...

Lo bueno de tener mi propia solución es que también puedo incluir los resultados de las consultas o la ejecución de procedimientos almacenados para rastrear los cambios en ciertas tablas, la configuración del servidor, el crecimiento de la base de datos, bueno, todo lo que puedo un archivo de texto ...

Respuesta

0

Puede probar Wizardby, que no es precisamente lo que está solicitando, pero aún así puede ayudarlo a manejar la gestión de cambios de la base de datos. Se puede realizar ingeniería inversa del esquema de base de datos (así, un subconjunto de la misma) y luego escribir los llamados "migraciones" en una plataforma independiente especial DSL:

version 20090331140131: 
    oxite_FileResource: 
     FileResourceID type => PK, primary-key => true 
     SiteID type => Guid, nullable => false 
     FileResourceName type => LongName 
     CreatorUserID references => oxite_User 
     Data type => Binary 
     ContentType type => AnsiString, length => 25, nullable => false 
     Path type => String, length => 1000, nullable => false 
     State type => Byte, nullable => false 
     CreatedDate type => DateTime, nullable => false 
     ModifiedDate type => DateTime, nullable => false 

    oxite_UserFileResourceRelationship: 
     UserID references => oxite_User 
     FileResourceID references => oxite_FileResource: 
      add index unique => true 

     index "" columns => [UserID, FileResourceID], unique => true, clustered => true 
2

Si he entendido bien, se necesitan dos cosas : primero debe generar las secuencias de comandos a partir de los metadatos de la base de datos (tablas, vistas, procesos almacenados, etc.), y una vez hecho esto, debe usar algún tipo de metodología coherente para el control de versiones de script.

Si usted ya tiene su metadat y los datos en la base de datos, no ver lo que impediría utilizando SQL Management Studio (o el Administrador corporativo de SQL) para generar secuencias de comandos de los objetos de base de datos: ver How to: Generate a Script (SQL Server Management Studio). Esto debería funcionar para SQL Server 2000, 2005, etc. Tenga en cuenta que puede personalizar la configuración de generación de scripts, p. en lugar de una secuencia de comandos enorme, puede usar scripts individuales para cada objeto. Es posible que necesite escribir algunos scripts para llenar las tablas con datos (no estoy seguro de si el asistente admite la extracción de datos).

Una vez que haya obtenido los scripts, probablemente tendrá que distribuirlos manualmente entre carpetas específicas y, una vez hecho esto, debe estar preparado para verificarlos en el control de código fuente. A partir de este punto, debe averiguar la metodología para las posteriores instalaciones de bases de datos, actualizaciones y reparaciones. Esta es una tarea bastante compleja, cubriendo que tomaría más tiempo que una simple respuesta. Si está interesado en posibles opciones, consulte mi publicación Database installer revised que menciona un número acerca y referencias varios artículos que tratan versionando la base de datos (lo siento por autopromoción, pero no quiero repetir la misma información).

1

La mayoría de las herramientas en este campo no son gratuitas, pero existe un proyecto de código abierto, ScriptDB, que puede satisfacer sus necesidades de generación de scripts.

Esto no resolverá el problema de cómo aplicar los scripts a la base de datos en el orden correcto: si no desea pagar, puede que tenga que improvisar uno propio.

+0

Hay un archivo por lotes en el aún no lanzado próxima versión de scriptdb que se supone capaz de recrear la base de datos desde los archivos fuente. Puedes agarrarlo del control de la versión. No lo he probado, pero parece * que hace lo correcto. – lambacck

4

Yo uso ScriptDB para exactamente este propósito. Lo único que tuve que cambiar fue eliminar la fecha de creación de scripts en los archivos generados. De lo contrario, los archivos siempre se marcan como modificados en Subversion.

Aquí está el lote que uso. svnclient es la herramienta de CodePlex svncompletesync.codeplex.com, para comprobar en todos los archivos de una carpeta a la subversión .:

svn checkout "http://svn/myproject" D:\Projekte\db_svn\myproject

ScriptDB "D:\temp\scriptdb" myserver mydb mylogin mypwd

del "D:\Projekte\db_svn\myproject\Schema Objects\\*.sql" /q /s

xcopy "D:\temp\scriptdb\myserver\mydb\Schema Objects\\*.sql" "D:\Projekte\db_svn\myproject\Schema Objects" /e /y /i

svnclient "D:\Projekte\db_svn\myproject" -m "commit durch svncompletesync"

+0

Cuando ejecuto ScriptDB, los archivos creados no contienen la fecha de creación de scripts. Pero tengo otro gran problema (estoy tratando de usar ScriptDB con Subversion también): cuando elimino un objeto en mi base de datos y ejecuto ScriptDB nuevamente, no elimina el archivo de script ya generado para este objeto. Como solucionaste esto? Traté de eliminar los archivos creados antes de ejecutar ScriptDB nuevamente, pero luego falla la siguiente confirmación porque las carpetas .svn también se han ido ... –

+0

* frente aplastada contra el teclado * A veces no se ve lo obvio: del c: \ carpeta \ *. sql solo elimina los archivos sql y deja intactas las carpetas .svn. Eso es exactamente lo que estaba buscando (y no vi). ¡Gracias! –