Base de datos de SQL Server de versiones -- sql-server campo con database campo con svn campo con version-control camp Relacionados El problema

Versioning SQL Server database


321
vote

problema

Español

Quiero obtener mis bases de datos en Control de versión. ¿Alguien tiene algún consejo o artículos recomendados para comenzar?

Siempre querré tener al menos algunos datos en allí (como Alumb menciones: tipos de usuarios y administradores). También a menudo a menudo querré una gran colección de datos de prueba generados para mediciones de rendimiento.

Original en ingles

I want to get my databases under version control. Does anyone have any advice or recommended articles to get me started?

I'll always want to have at least some data in there (as alumb mentions: user types and administrators). I'll also often want a large collection of generated test data for performance measurements.

</div
           
 
 

Lista de respuestas

182
 
vote
vote
La mejor respuesta
 

Martin Fowler escribió mi artículo favorito sobre el tema, http://martinfowler.com/articles/evodb. html . Elijo no poner vertederos de esquema en el control de la versión ya que Alumb y otros sugieren porque quiero una manera fácil de actualizar mi base de datos de producción.

Para una aplicación web donde tendré una sola instancia de la base de datos de producción, uso dos técnicas:

Scripts de actualización de la base de datos

A Scripts de actualización de la base de datos de secuencia que contienen el DDL necesario para mover el esquema desde la versión N a N + 1. (Estos van en su sistema de control de versión). A _Version_History_ Table, algo así como

  create table VersionHistory (     Version int primary key,     UpgradeStart datetime not null,     UpgradeEnd datetime     );   

Obtiene una nueva entrada cada vez que se ejecuta un script de actualización que corresponde a la nueva versión.

Esto garantiza que es fácil ver qué versión del esquema de la base de datos existe y que se ejecutan scripts de actualización de la base de datos solo una vez. Nuevamente, estos son los vertederos de base de datos . Más bien, cada script representa los cambios necesarios para moverse de una versión a la siguiente. Son el script que solicita a su base de datos de producción para "actualizar".

Sincronización de la caja de arena del desarrollador

  1. un script para hacer una copia de seguridad, desinfectar y reducir una base de datos de producción. Ejecute esto después de cada actualización al DB de producción.
  2. un script para restaurar (y modificar, si es necesario) la copia de seguridad en la estación de trabajo de un desarrollador. Cada desarrollador ejecuta este script después de cada actualización a la producción DB.

Una advertencia: Mis pruebas automatizadas se ejecutan contra una base de datos de esquema correcta pero vacía, por lo que este consejo no se adapte perfectamente a sus necesidades.

 

Martin Fowler wrote my favorite article on the subject, http://martinfowler.com/articles/evodb.html. I choose not to put schema dumps in under version control as alumb and others suggest because I want an easy way to upgrade my production database.

For a web application where I'll have a single production database instance, I use two techniques:

Database Upgrade Scripts

A sequence database upgrade scripts that contain the DDL necessary to move the schema from version N to N+1. (These go in your version control system.) A _version_history_ table, something like

create table VersionHistory (     Version int primary key,     UpgradeStart datetime not null,     UpgradeEnd datetime     ); 

gets a new entry every time an upgrade script runs which corresponds to the new version.

This ensures that it's easy to see what version of the database schema exists and that database upgrade scripts are run only once. Again, these are not database dumps. Rather, each script represents the changes necessary to move from one version to the next. They're the script that you apply to your production database to "upgrade" it.

Developer Sandbox Synchronization

  1. A script to backup, sanitize, and shrink a production database. Run this after each upgrade to the production DB.
  2. A script to restore (and tweak, if necessary) the backup on a developer's workstation. Each developer runs this script after each upgrade to the production DB.

A caveat: My automated tests run against a schema-correct but empty database, so this advice will not perfectly suit your needs.

</div
 
 
         
         
46
 
vote

El producto de comparación de SQL de la puerta roja no solo le permite realizar comparaciones de nivel de objeto, y generar scripts de cambio de eso, pero también le permite exportar sus objetos de base de datos a una jerarquía de carpetas organizada por tipo de objeto, con un [ObjectName] Script de creación .SQL por objeto en estos directorios. La jerarquía de tipo de objeto es así:

funciones
Seguridad
Seguridad roles
Security Schemas
Seguridad usuarios
Procedimientos almacenados
Tablas

Si descarga sus scripts en el mismo directorio raíz después de realizar cambios, puede usarlo para actualizar su repo de SVN y mantener un historial de ejecución de cada objeto individualmente.

 

Red Gate's SQL Compare product not only allows you to do object-level comparisons, and generate change scripts from that, but it also allows you to export your database objects into a folder hierarchy organized by object type, with one [objectname].sql creation script per object in these directories. The object-type hierarchy is like this:

Functions
Security
SecurityRoles
SecuritySchemas
SecurityUsers
Stored Procedures
Tables

If you dump your scripts to the same root directory after you make changes, you can use this to update your SVN repo, and keep a running history of each object individually.

</div
 
 
 
 
40
 
vote

Este es uno de los "problemas difíciles" del desarrollo circundante. Por lo que sé, no hay soluciones perfectas.

Si solo necesita almacenar la estructura de la base de datos y no los datos, puede exportar la base de datos como consultas SQL. (en Enterprise Manager: Haga clic con el botón derecho en la base de datos - & gt; Generar script de SQL. Recomiendo configurar el "Crear un archivo por objeto" en la pestaña Opciones), puede confirmar estos archivos de texto a SVN y hacer uso de las funciones de registro y difusión de SVN. .

Me he atado junto con un script por lotes que lleva a un par de parámetros y configura la base de datos. También agregué algunas consultas adicionales que ingresan datos predeterminados como los tipos de usuarios y el usuario administrador. (Si desea más información sobre esto, publique algo y puedo poner el script en algún lugar accesible)

Si necesita mantener todos los datos también, recomiendo mantener una copia de seguridad de la base de datos y usar REDGATE ( http://www.red-gate.com/ ) Productos para hacer las comparaciones. No son baratos, pero valen cada centavo.

 

This is one of the "hard problems" surrounding development. As far as I know there are no perfect solutions.

If you only need to store the database structure and not the data you can export the database as SQL queries. (in Enterprise Manager: Right click on database -> Generate SQL script. I recommend setting the "create one file per object" on the options tab) You can then commit these text files to svn and make use of svn's diff and logging functions.

I have this tied together with a Batch script that takes a couple parameters and sets up the database. I also added some additional queries that enter default data like user types and the admin user. (If you want more info on this, post something and I can put the script somewhere accessible)

If you need to keep all of the data as well, I recommend keeping a back up of the database and using Redgate (http://www.red-gate.com/) products to do the comparisons. They don't come cheap, but they are worth every penny.

</div
 
 
     
     
39
 
vote

Primero, debe elegir el sistema de control de versiones que sea adecuado para usted:

  • Sistema de control de la versión centralizada: un sistema estándar donde los usuarios revisan / se registran antes de / después de que trabajen en archivos, y los archivos se mantienen en un solo servidor central

  • Sistema de control de versión distribuida: un sistema donde se clone el repositorio, y cada clon es en realidad la copia de seguridad completa del repositorio, por lo que si algún servidor se bloquea, entonces se puede usar cualquier repositorio clonado para restaurarlo Después de elegir el sistema correcto para sus necesidades, deberá configurar el repositorio, que es el núcleo de cada sistema de control de versiones Todo esto se explica en el siguiente artículo: http://solutioncenter.apexsql.com/sql-server-source-control-part-iustanding-source-control-basics/

Después de configurar un repositorio, y en caso de un sistema de control de versión central una carpeta de trabajo, puede leer este artículo . Muestra cómo configurar el control de la fuente en un entorno de desarrollo usando:

  • SQL Server Management Studio a través del proveedor MSSCCI,

  • Herramientas de datos de Visual Studio y SQL Server

  • Una herramienta de terceros APEXSQL Fuente Control
 

First, you must choose the version control system that is right for you:

  • Centralized Version Control system - a standard system where users check out/check in before/after they work on files, and the files are being kept in a single central server

  • Distributed Version Control system - a system where the repository is being cloned, and each clone is actually the full backup of the repository, so if any server crashes, then any cloned repository can be used to restore it After choosing the right system for your needs, you'll need to setup the repository which is the core of every version control system All this is explained in the following article: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

After setting up a repository, and in case of a central version control system a working folder, you can read this article. It shows how to setup source control in a development environment using:

  • SQL Server Management Studio via the MSSCCI provider,

  • Visual Studio and SQL Server Data Tools

  • A 3rd party tool ApexSQL Source Control
</div
 
 
25
 
vote

Aquí en Red Gate Ofrecemos una herramienta, Control de fuente SQL , que utiliza SQL Compare Technology para vincular su base de datos con un repositorio de TFS o SVN. Esta herramienta se integra en SSMS y le permite trabajar como lo haría normalmente, excepto que ahora le permite comprometer los objetos.

Para un enfoque basado en migraciones (más adecuado para implementaciones automatizadas), ofrecemos SQL Cambiar automatización (anteriormente llamado Readyroll), que crea y administra un conjunto de scripts incrementales como un proyecto de estudio visual.

En el control de la fuente SQL, es posible especificar tablas de datos estáticos. Estos se almacenan en el control de origen como instrucciones de inserción.

Si está hablando de datos de prueba, le recomendamos que genere datos de prueba con una herramienta o a través de un script posterior a la implementación que se define, o simplemente restauramos una copia de seguridad de producción al entorno de desarrollo.

 

Here at Red Gate we offer a tool, SQL Source Control, which uses SQL Compare technology to link your database with a TFS or SVN repository. This tool integrates into SSMS and lets you work as you would normally, except it now lets you commit the objects.

For a migrations-based approach (more suited for automated deployments), we offer SQL Change Automation (formerly called ReadyRoll), which creates and manages a set of incremental scripts as a Visual Studio project.

In SQL Source Control it is possible to specify static data tables. These are stored in source control as INSERT statements.

If you're talking about test data, we'd recommend that you either generate test data with a tool or via a post-deployment script you define, or you simply restore a production backup to the dev environment.

</div
 
 
       
       
23
 
vote

Es posible que desee ver Liquibase ( http://www.liquibase.org/ ). Incluso si no usa la herramienta en sí, maneja los conceptos de administración de cambios de base de datos o refactorizando bastante bien.

 

You might want to look at Liquibase (http://www.liquibase.org/). Even if you don't use the tool itself it handles the concepts of database change management or refactoring pretty well.

</div
 
 
   
   
20
 
vote

+1 para todos los que han recomendado las herramientas de Redgate, con una recomendación adicional y una advertencia.

SQLCOMPARE también tiene una API documentada decentemente: para que pueda, por ejemplo, escribir una aplicación de consola que sincronice su carpeta de scripts de fuente controlada con una base de datos de pruebas de integración de CI en el registro, de modo que cuando alguien se comprueba en un cambio al esquema de Su carpeta de scripts se implementa automáticamente junto con el cambio de código de aplicación correspondiente. Esto ayuda a cerrar la brecha con los desarrolladores que se olvide de la propagación de cambios en su DB local hasta un DB de desarrollo compartido (aproximadamente la mitad de nosotros, creo :)).

Una advertencia es que con una solución con guión o de otra manera, las herramientas de redgate son lo suficientemente suaves que es fácil olvidarse de las realidades SQL que subyacen a la abstracción. Si cambia el nombre de todas las columnas de una tabla, SQLCOMPARE no tiene forma de asignar las columnas antiguas a las nuevas columnas y eliminará todos los datos en la tabla. Generará advertencias, pero he visto a la gente hacer clic en el pasado. Hay un punto general que vale la pena hacerlo, creo que solo puede automatizar la versión de DB y la actualización hasta ahora, las abstracciones son muy fugas.

 

+1 for everyone who's recommended the RedGate tools, with an additional recommendation and a caveat.

SqlCompare also has a decently documented API: so you can, for instance, write a console app which syncs your source controlled scripts folder with a CI integration testing database on checkin, so that when someone checks in a change to the schema from their scripts folder it's automatically deployed along with the matching application code change. This helps close the gap with developers who are forgetful about propagating changes in their local db up to a shared development DB (about half of us, I think :) ).

A caveat is that with a scripted solution or otherwise, the RedGate tools are sufficiently smooth that it's easy to forget about SQL realities underlying the abstraction. If you rename all the columns in a table, SqlCompare has no way to map the old columns to the new columns and will drop all the data in the table. It will generate warnings but I've seen people click past that. There's a general point here worth making, I think, that you can only automate DB versioning and upgrade so far - the abstractions are very leaky.

</div
 
 
   
   
16
 
vote

Utilizamos dbghost para administrar nuestra base de datos SQL. Luego, pone sus scripts para crear una nueva base de datos en su control de versión, y creará una nueva base de datos o actualizará cualquier base de datos existente al esquema en el control de la versión. De esa manera, no tiene que preocuparse por crear scripts de cambio (aunque aún puede hacerlo, si, por ejemplo, si desea cambiar el tipo de datos de una columna y necesita convertir datos).

 

We use DBGhost to manage our SQL database. Then you put your scripts to build a new database in your version control, and it'll either build a new database, or upgrade any existing database to the schema in version control. That way you don't have to worry about creating change scripts (although you can still do that, if for example you want to change the data type of a column and need to convert data).

</div
 
 
 
 
16
 
vote

con vs 2010, use el proyecto de la base de datos.

  1. script de su base de datos
  2. Hacer cambios en los scripts o directamente en Su servidor DB
  3. sincronizar usando datos y gt; Schema Compare

Hace una solución perfecta de versiones de DB, y hace que la sincronización de DB sea una brisa.

 

With VS 2010, use the Database project.

  1. Script out your database
  2. Make changes to scripts or directly on your db server
  3. Sync up using Data > Schema Compare

Makes a perfect DB versioning solution, and makes syncing DB's a breeze.

</div
 
 
 
 
13
 
vote

Es un buen enfoque para guardar los scripts de la base de datos en el control de la versión con los scripts de cambio para que pueda actualizar cualquier base de datos que tenga. También es posible que desee guardar los esquemas para diferentes versiones para que pueda crear una base de datos completa sin tener que aplicar todos los scripts de cambio. El manejo de los scripts debe ser automatizado para que no tenga que hacer un trabajo manual.

Creo que es importante tener una base de datos separada para cada desarrollador y no usar una base de datos compartida. De esa manera, los desarrolladores pueden crear casos de prueba y fases de desarrollo independientemente de otros desarrolladores.

La herramienta de automatización debe tener medios para manejar los metadatos de la base de datos, lo que indica qué bases de datos están en qué estado de desarrollo y qué tablas contienen datos controlables de versión, etc.

 

It is a good approach to save database scripts into version control with change scripts so that you can upgrade any one database you have. Also you might want to save schemas for different versions so that you can create a full database without having to apply all the change scripts. Handling the scripts should be automated so that you don't have to do manual work.

I think its important to have a separate database for every developer and not use a shared database. That way the developers can create test cases and development phases independently from other developers.

The automating tool should have means for handling database metadata, which tells what databases are in what state of development and which tables contain version controllable data and so on.

</div
 
 
13
 
vote

También podría ver una solución de migración. Estos le permiten especificar su esquema de base de datos en el código C #, y enrolle la versión de su base de datos hacia arriba y hacia abajo usando MSBUILD.

Actualmente estoy usando dbup , y está funcionando bien.

 

You could also look at a migrations solution. These allow you to specify your database schema in C# code, and roll your database version up and down using MSBuild.

I'm currently using DbUp, and it's been working well.

</div
 
 
11
 
vote

No mencionó ningún determinado sobre su entorno o restricciones de destino, por lo que esto puede no ser completamente aplicable ... pero si está buscando una manera de rastrear de manera efectiva un esquema de DB evolucionado y no es adverso a la Idea de usar Ruby, las migraciones de ActiverCord están en su callejón.

Las migraciones definen programas las transformaciones de la base de datos utilizando un DSL Ruby; Cada transformación se puede aplicar o (generalmente) enrollada hacia atrás, lo que le permite saltar a una versión diferente de su esquema DB en cualquier momento dado en el tiempo. El archivo que definen estas transformaciones se puede verificar en la versión de control como cualquier otra pieza de código fuente.

Porque las migraciones son parte de activerecord , típicamente encuentran uso en aplicaciones de rieles de pila completa; Sin embargo, puede usar ActiverCord independiente de los rieles con un esfuerzo mínimo. Consulte aquí Para un tratamiento más detallado de usar AR's Migraciones fuera de los rieles.

 

You didn't mention any specifics about your target environment or constraints, so this may not be entirely applicable... but if you're looking for a way to effectively track an evolving DB schema and aren't adverse to the idea of using Ruby, ActiveRecord's migrations are right up your alley.

Migrations programatically define database transformations using a Ruby DSL; each transformation can be applied or (usually) rolled back, allowing you to jump to a different version of your DB schema at any given point in time. The file defining these transformations can be checked into version control like any other piece of source code.

Because migrations are a part of ActiveRecord, they typically find use in full-stack Rails apps; however, you can use ActiveRecord independent of Rails with minimal effort. See here for a more detailed treatment of using AR's migrations outside of Rails.

</div
 
 
10
 
vote

Cada base de datos debe estar bajo control de código fuente. Lo que falta es una herramienta para sirar automáticamente todos los objetos de la base de datos, y "Datos de configuración": para archivar, que luego se pueden agregar a cualquier sistema de control de origen. Si está utilizando SQL Server, entonces mi solución está aquí: http://dbsourceteols.codeplex.com/ . Divertirse. - Nathan.

 

Every database should be under source-code control. What is lacking is a tool to automatically script all database objects - and "configuration data" - to file, which then can be added to any source control system. If you are using SQL Server, then my solution is here : http://dbsourcetools.codeplex.com/ . Have fun. - Nathan.

</div
 
 
9
 
vote

es simple.

  1. Cuando el proyecto base está listo, debe crear un script completo de la base de datos. Este guión está comprometido con SVN. Es la primera versión.

  2. Después de eso, todos los desarrolladores crean scripts de cambio (alterar ..., nuevas tablas, sprocs, etc.

  3. Cuando necesita una versión actual, debe ejecutar todos los nuevos scripts de cambio.

  4. Cuando la aplicación se libera a la producción, vuelve a 1 (pero luego será una versión sucesiva del curso).

Nant te ayudará a ejecutar esos scripts de cambio. :)

y recuerda. Todo funciona bien cuando hay disciplina. Cada vez que se convierte en cambio de base de datos, también se comprometen las funciones correspondientes en el código.

 

It's simple.

  1. When the base project is ready then you must create full database script. This script is commited to SVN. It is first version.

  2. After that all developers creates change scripts (ALTER..., new tables, sprocs, etc).

  3. When you need current version then you should execute all new change scripts.

  4. When app is released to production then you go back to 1 (but then it will be successive version of course).

Nant will help you to execute those change scripts. :)

And remember. Everything works fine when there is discipline. Every time when database change is commited then corresponding functions in code are commited too.

</div
 
 
 
 
8
 
vote

Para hacer que el volcado en un sistema de control de código fuente sea un poco más rápido, puede ver qué objetos han cambiado desde la última vez utilizando la información de la versión en SysObjects.

Configuración: Cree una tabla en cada base de datos que desea verificar de manera incremental para mantener la información de la versión desde la última vez que lo registró (vacío en la primera carrera). Borre esta tabla si desea volver a escanear toda su estructura de datos.

  IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions CREATE TABLE last_run_sysversions (     name varchar(128),      id int, base_schema_ver int,     schema_ver int,     type char(2) )   

Modo de ejecución normal: Puede tomar los resultados de este SQL y generar scripts SQL para los que está interesado y ponerlos en un control de origen de su elección.

  IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp CREATE TABLE #tmp (     name varchar(128),      id int, base_schema_ver int,     schema_ver int,     type char(2) )  SET NOCOUNT ON  -- Insert the values from the end of the last run into #tmp INSERT #tmp (name, id, base_schema_ver, schema_ver, type)  SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions  DELETE last_run_sysversions INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type) SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects  -- This next bit lists all differences to scripts. SET NOCOUNT OFF  --Renamed. SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id WHERE o.name <> t.name /*COLLATE*/ AND o.type IN ('TR', 'P' ,'U' ,'V') UNION   --Changed (using alter) SELECT 'changed' AS ChangeType, o.name /*COLLATE*/,         'altered' AS extra_info, 2 AS Priority FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id  WHERE (    o.base_schema_ver <> t.base_schema_ver OR o.schema_ver      <> t.schema_ver ) AND  o.type IN ('TR', 'P' ,'U' ,'V') AND  o.name NOT IN ( SELECT oi.name           FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id          WHERE oi.name <> ti.name /*COLLATE*/          AND oi.type IN ('TR', 'P' ,'U' ,'V'))  UNION  --Changed (actually dropped and recreated [but not renamed]) SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority FROM #tmp t WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti          WHERE NOT EXISTS (SELECT * FROM sysobjects oi                            WHERE oi.id = ti.id)) AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi          WHERE NOT EXISTS (SELECT * FROM #tmp ti                            WHERE oi.id = ti.id)          AND   oi.type  IN ('TR', 'P' ,'U' ,'V')) UNION  --Deleted SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority FROM #tmp t WHERE NOT EXISTS (SELECT * FROM sysobjects o                   WHERE o.id = t.id) AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi          WHERE NOT EXISTS (SELECT * FROM #tmp ti                            WHERE oi.id = ti.id)          AND   oi.type  IN ('TR', 'P' ,'U' ,'V')) UNION  --Added SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority FROM sysobjects o WHERE NOT EXISTS (SELECT * FROM #tmp t                   WHERE o.id = t.id) AND      o.type  IN ('TR', 'P' ,'U' ,'V') AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti          WHERE NOT EXISTS (SELECT * FROM sysobjects oi                            WHERE oi.id = ti.id)) ORDER BY Priority ASC   

Nota: Si usa una recopilación no estándar en cualquiera de sus bases de datos, deberá reemplazar /* COLLATE */ con la colación de su base de datos. I.E. COLLATE Latin1_General_CI_AI

 

To make the dump to a source code control system that little bit faster, you can see which objects have changed since last time by using the version information in sysobjects.

Setup: Create a table in each database you want to check incrementally to hold the version information from the last time you checked it (empty on the first run). Clear this table if you want to re-scan your whole data structure.

IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions CREATE TABLE last_run_sysversions (     name varchar(128),      id int, base_schema_ver int,     schema_ver int,     type char(2) ) 

Normal running mode: You can take the results from this sql, and generate sql scripts for just the ones you're interested in, and put them into a source control of your choice.

IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp CREATE TABLE #tmp (     name varchar(128),      id int, base_schema_ver int,     schema_ver int,     type char(2) )  SET NOCOUNT ON  -- Insert the values from the end of the last run into #tmp INSERT #tmp (name, id, base_schema_ver, schema_ver, type)  SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions  DELETE last_run_sysversions INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type) SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects  -- This next bit lists all differences to scripts. SET NOCOUNT OFF  --Renamed. SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id WHERE o.name <> t.name /*COLLATE*/ AND o.type IN ('TR', 'P' ,'U' ,'V') UNION   --Changed (using alter) SELECT 'changed' AS ChangeType, o.name /*COLLATE*/,         'altered' AS extra_info, 2 AS Priority FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id  WHERE (    o.base_schema_ver <> t.base_schema_ver OR o.schema_ver      <> t.schema_ver ) AND  o.type IN ('TR', 'P' ,'U' ,'V') AND  o.name NOT IN ( SELECT oi.name           FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id          WHERE oi.name <> ti.name /*COLLATE*/          AND oi.type IN ('TR', 'P' ,'U' ,'V'))  UNION  --Changed (actually dropped and recreated [but not renamed]) SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority FROM #tmp t WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti          WHERE NOT EXISTS (SELECT * FROM sysobjects oi                            WHERE oi.id = ti.id)) AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi          WHERE NOT EXISTS (SELECT * FROM #tmp ti                            WHERE oi.id = ti.id)          AND   oi.type  IN ('TR', 'P' ,'U' ,'V')) UNION  --Deleted SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority FROM #tmp t WHERE NOT EXISTS (SELECT * FROM sysobjects o                   WHERE o.id = t.id) AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi          WHERE NOT EXISTS (SELECT * FROM #tmp ti                            WHERE oi.id = ti.id)          AND   oi.type  IN ('TR', 'P' ,'U' ,'V')) UNION  --Added SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority FROM sysobjects o WHERE NOT EXISTS (SELECT * FROM #tmp t                   WHERE o.id = t.id) AND      o.type  IN ('TR', 'P' ,'U' ,'V') AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti          WHERE NOT EXISTS (SELECT * FROM sysobjects oi                            WHERE oi.id = ti.id)) ORDER BY Priority ASC 

Note: If you use a non-standard collation in any of your databases, you will need to replace /* COLLATE */ with your database collation. i.e. COLLATE Latin1_General_CI_AI

</div
 
 
8
 
vote

Debido a que nuestra aplicación tiene que trabajar en varios RDBMS, almacenamos nuestra definición de esquema en el control de la versión utilizando la base de datos neutral Torque formato (XML). También controlamos la versión de los datos de referencia para nuestra base de datos en formato XML de la siguiente manera (donde la "relación" es una de las tablas de referencia):

    <Relationship RelationshipID="1" InternalName="Manager"/>   <Relationship RelationshipID="2" InternalName="Delegate"/>   etc.   

Luego usamos herramientas de cultivo en el hogar para generar la actualización del esquema y la actualización de datos de datos de scripts que se requieren para ir desde la versión x de la base de datos a la versión x + 1.

 

Because our app has to work across multiple RDBMSs, we store our schema definition in version control using the database-neutral Torque format (XML). We also version-control the reference data for our database in XML format as follows (where "Relationship" is one of the reference tables):

  <Relationship RelationshipID="1" InternalName="Manager"/>   <Relationship RelationshipID="2" InternalName="Delegate"/>   etc. 

We then use home-grown tools to generate the schema upgrade and reference data upgrade scripts that are required to go from version X of the database to version X + 1.

</div
 
 
8
 
vote

Si tiene una base de datos pequeña y desea versionar la cosa completa, Este script de lotes podría ayudar. Se separan, comprime y comprueba un archivo MDF de la base de datos MSSQL en Subversion.

Si la mayoría de las versiones desea enviar su esquema y simplemente tener una pequeña cantidad de datos de referencia, posiblemente puede usar migraciones subsónicas para manejar eso. El beneficio es que puede migrar o bajar fácilmente a cualquier versión específica.

 

If you have a small database and you want to version the entire thing, this batch script might help. It detaches, compresses, and checks a MSSQL database MDF file in to Subversion.

If you mostly want to version your schema and just have a small amount of reference data, you can possibly use SubSonic Migrations to handle that. The benefit there is that you can easily migrate up or down to any specific version.

</div
 
 
7
 
vote

No almacenamos el esquema de la base de datos, almacenamos los cambios en la base de datos. Lo que hacemos es almacenar los cambios de esquema para que construimos un script de cambio para cualquier versión de la base de datos y aplíquela a las bases de datos de nuestros clientes. Escribí una aplicación de utilidad de base de datos que se distribuye con nuestra aplicación principal que puede leer ese script y saber qué actualizaciones deben aplicarse. También tiene suficientes inteligentes para actualizar las vistas y los procedimientos almacenados según sea necesario.

 

We don't store the database schema, we store the changes to the database. What we do is store the schema changes so that we build a change script for any version of the database and apply it to our customer's databases. I wrote an database utility app that gets distributed with our main application that can read that script and know which updates need to be applied. It also has enough smarts to refresh views and stored procedures as needed.

</div
 
 
7
 
vote

Escribí esta aplicación hace un tiempo, http://sqlschemasourcectrl.codeplex.com/ que escaneará Su MSFT SQL DB es con la frecuencia que desee y voltee automáticamente sus objetos (tablas, vistas, procs, funciones, configuración de SQL) en SVN. Funciona de maravilla. Lo uso con un profundo (lo que me permite recibir alertas en los registros)

 

I wrote this app a while ago, http://sqlschemasourcectrl.codeplex.com/ which will scan your MSFT SQL db's as often as you want and automatically dump your objects (tables, views, procs, functions, sql settings) into SVN. Works like a charm. I use it with Unfuddle (which allows me to get alerts on checkins)

</div
 
 
7
 
vote

Necesitábamos VERSIÓN Nuestra base de datos SQL después de emigrar a una plataforma X64 y nuestra versión anterior se rompió con la migración. Escribimos una aplicación C # que utilizó SQLDMO para asignar todos los objetos SQL a una carpeta:

                 Raíz                     Nombre del servidor                        Nombre de la base de datos                           Objetos de esquema                              Desencadenantes de la base de datos *                                 .ddltrigger.sql                              Funciones                                 ..Function.sql                              Seguridad                                 Roles                                    Roles de aplicación                                       .ppaspole.sql                                    Roles de base de datos                                       .role.sql                                 Esquemas *                                    .schema.sql                                 Usuarios                                    .user.sql                              Almacenamiento                                 Catálogos de texto completo *                                    .fulltext.sql                              Procedimientos almacenados                                 ..proc.sql                              Sinónimos *                                 .synonym.sql                              Mesas                                 ..table.sql                                 Restricciones                                    ... CHKCONST.SQL                                    ... defuestost.sql                                 Índices                                    ... index.sql                                 Llaves                                    ... FKEY.SQL                                    ... PKEY.SQL                                    ... ukey.sql                                 Desencadenantes                                    ... trigger.sql                              Tipos                                 Tipos de datos definidos por el usuario                                    ..UDDT.SQL                                 Colecciones de esquemas XML *                                    ..xmlschema.sql                              Puntos de vista                                 ..view.sql                                 Índices                                    ... index.sql                                 Desencadenantes                                    ... trigger.sql 

La aplicación comparará la versión recién escrita con la versión almacenada en SVN, y si hubo diferencias, actualizaría SVN. Determinamos que ejecutar el proceso una vez que una noche era suficiente, ya que no hicimos que muchos cambios en SQL. Nos permite realizar un seguimiento de los cambios en todos los objetos que nos preocupamos más, nos permite reconstruir nuestro esquema completo en caso de un problema grave.

 

We needed to version our SQL database after we migrated to an x64 platform and our old version broke with the migration. We wrote a C# application which used SQLDMO to map out all of the SQL objects to a folder:

                 Root                     ServerName                        DatabaseName                           Schema Objects                              Database Triggers*                                 .ddltrigger.sql                              Functions                                 ..function.sql                              Security                                 Roles                                    Application Roles                                       .approle.sql                                    Database Roles                                       .role.sql                                 Schemas*                                    .schema.sql                                 Users                                    .user.sql                              Storage                                 Full Text Catalogs*                                    .fulltext.sql                              Stored Procedures                                 ..proc.sql                              Synonyms*                                 .synonym.sql                              Tables                                 ..table.sql                                 Constraints                                    ...chkconst.sql                                    ...defconst.sql                                 Indexes                                    ...index.sql                                 Keys                                    ...fkey.sql                                    ...pkey.sql                                    ...ukey.sql                                 Triggers                                    ...trigger.sql                              Types                                 User-defined Data Types                                    ..uddt.sql                                 XML Schema Collections*                                    ..xmlschema.sql                              Views                                 ..view.sql                                 Indexes                                    ...index.sql                                 Triggers                                    ...trigger.sql 

The application would then compare the newly written version with the version stored in SVN, and if there were differences it would update SVN. We determined that running the process once a night was sufficient since we did not make that many changes to SQL. It allows us to track changes to all the objects we care about plus it allows us to rebuild our full schema in the event of a serious problem.

</div
 
 
 
 
6
 
vote

La solución típica es volcar la base de datos según sea necesario y hacer copias de seguridad de esos archivos.

Dependiendo de su plataforma de desarrollo, puede haber complementos de OpenSource disponibles. Rodar su propio código para hacerlo es generalmente bastante trivial.

NOTA: Es posible que desee hacer una copia de seguridad del volcado de la base de datos en lugar de ponerlo en control de la versión. Los archivos pueden obtener enormes rapidos en la versión, y hacer que todo su sistema de control de fuente se vuelva lento (estoy recordando una historia de terror de CVS en este momento).

 

The typical solution is to dump the database as necessary and backup those files.

Depending on your development platform, there may be opensource plugins available. Rolling your own code to do it is usually fairly trivial.

Note: You may want to backup the database dump instead of putting it into version control. The files can get huge fast in version control, and cause your entire source control system to become slow (I'm recalling a CVS horror story at the moment).

</div
 
 
6
 
vote

Acabamos de empezar a usar el servidor de la Fundación Team. Si su base de datos es de tamaño mediano, Visual Studio tiene algunas integraciones de proyectos agradables con la comparación incorporada, la comparación de datos, las herramientas de refactorización de la base de datos, el marco de prueba de base de datos e incluso las herramientas de generación de datos.

Pero, ese modelo no se ajusta a las bases de datos muy grandes o de terceros (que encriptan objetos) muy bien. Entonces, lo que hemos hecho es almacenar solo nuestros objetos personalizados. Visual Studio / Team Foundation Server funciona muy bien para eso.

Arco de la base de datos de TFS. Blog

Sitio de MS TFS

 

We just started using Team Foundation Server. If your database is medium sized, then visual studio has some nice project integrations with built in compare, data compare, database refactoring tools, database testing framework, and even data generation tools.

But, that model doesn't fit very large or third party databases (that encrypt objects) very well. So, what we've done is to store only our customized objects. Visual Studio / Team foundation server works very well for that.

TFS Database chief arch. blog

MS TFS site

</div
 
 
6
 
vote

Estoy de acuerdo con la respuesta de ESV y por esa razón exacta que comencé un poco de proyecto un poco para ayudar a mantener las actualizaciones de la base de datos en un archivo muy simple que luego podría mantenerse un código fuente lateral largo. Permite actualizaciones fáciles a los desarrolladores, así como la UAT y la producción. La herramienta funciona en SQL Server y MySQL.

Algunas características del proyecto:

  • permite cambios de esquema
  • permite la población de árbol de valor
  • permite insertos de datos de prueba separados para, por ejemplo. Uat
  • Permite la opción para rollos (no automatizados)
  • mantiene el soporte para SQL Server y MySQL
  • tiene la capacidad de importar su base de datos existente a la versión de control de la versión con un comando simple (solo SQL Server ... todavía funcionando en MySQL)

Echa un vistazo a la código para un poco más de información.

 

I agree with ESV answer and for that exact reason I started a little project a while back to help maintain database updates in a very simple file which could then be maintained a long side out source code. It allows easy updates to developers as well as UAT and Production. The tool works on SQL Server and MySQL.

Some project features:

  • Allows schema changes
  • Allows value tree population
  • Allows separate test data inserts for eg. UAT
  • Allows option for rollback (not automated)
  • Maintains support for SQL server and MySQL
  • Has the ability to import your existing database into version control with one simple command (SQL server only ... still working on MySQL)

Please check out the code for some more information.

</div
 
 
5
 
vote

También estoy usando una versión en la base de datos almacenada a través de la familia de propiedades extendidas de la base de datos. Mi aplicación tiene scripts para cada paso de la versión (es decir, se mueve de 1.1 a 1.2). Cuando se implementa, mira la versión actual y luego ejecuta los scripts uno por uno hasta que llegue a la última versión de la aplicación. No hay script que tenga la versión 'final' recta, ni siquiera la implementación en un DB limpio hace la implementación a través de una serie de pasos de actualización.

Ahora, lo que me gusta agregar es que he visto hace dos días una presentación en el Campus de MS sobre la nueva y la próxima edición VS DB. La presentación se centró específicamente en este tema y me quedé soplado del agua. Definitivamente debe verlo, las nuevas instalaciones se centran en mantener la definición de esquema en los scripts de T-SQL (crea), un motor Delta TimeTime para comparar el esquema de implementación con un esquema definido y hacer el Delta altera e integración con la integración del código fuente, hasta e incluyendo la integración continua de MSBUILD para las gotas de construcción automatizadas. La caída contendrá un nuevo tipo de archivo, los archivos .dbschema, que se pueden llevar al sitio de implementación y una herramienta de línea de comandos puede realizar los 'Deltas' real y ejecutar la implementación. Tengo una entrada de blog en este tema con enlaces a las descargas de VSDE, debe revisarlas: http://rusanu.com/2009/05/15/version-control-and-your-database/

 

I'm also using a version in the database stored via the database extended properties family of procedures. My application has scripts for each version step (ie. move from 1.1 to 1.2). When deployed, it looks at the current version and then runs the scripts one by one until it reaches the last app version. There is no script that has the straight 'final' version, even deploy on a clean DB does the deploy via a series of upgrade steps.

Now what I like to add is that I've seen two days ago a presentation on the MS campus about the new and upcoming VS DB edition. The presentation was focused specifically on this topic and I was blown out of the water. You should definitely check it out, the new facilities are focused on keeping schema definition in T-SQL scripts (CREATEs), a runtime delta engine to compare deployment schema with defined schema and doing the delta ALTERs and integration with source code integration, up to and including MSBUILD continuous integration for automated build drops. The drop will contain a new file type, the .dbschema files, that can be taken to the deployment site and a command line tool can do the actual 'deltas' and run the deployment. I have a blog entry on this topic with links to the VSDE downloads, you should check them out: http://rusanu.com/2009/05/15/version-control-and-your-database/

</div
 
 
5
 
vote

Es una pregunta muy antigua, sin embargo, muchas personas están tratando de resolver esto, incluso ahora. Todo lo que tienen que hacer es investigar sobre los proyectos de bases de datos de Visual Studio. Sin esto, cualquier desarrollo de la base de datos se ve muy débil. Desde la organización de código hasta la implementación de versiones, lo simplifica todo.

 

It's a very old question, however, many people are trying to solve this even now. All they have to do is to research about Visual Studio Database Projects. Without this, any database development looks very feeble. From code organization to deployment to versioning, it simplifies everything.

</div
 
 
5
 
vote

Hace un tiempo encontré un módulo de BAS de VB que usó los objetos DMO y VSS para obtener un DB Scriptado completo y en VSS. Lo entregué en un script de VB y lo publicé aquí . Puede sacar fácilmente las llamadas VSS y usar las cosas DMO para generar todos los scripts, y luego llamar a SVN desde el mismo archivo por lotes que llama al vbscript para verificarlos.

 

A while ago I found a VB bas module that used DMO and VSS objects to get an entire db scripted off and into VSS. I turned it into a VB Script and posted it here. You can easily take out the VSS calls and use the DMO stuff to generate all the scripts, and then call SVN from the same batch file that calls the VBScript to check them in.

</div
 
 
3
 
vote

En mi experiencia, la solución es doble:

  1. Debe manejar los cambios en la base de datos de desarrollo realizada por múltiples desarrolladores durante el desarrollo.

  2. Debe manejar las actualizaciones de la base de datos en los sitios de los clientes.

Para poder manejar el # 1, necesitará una herramienta de base / fusión de base de datos sólida. La mejor herramienta debe poder realizar una fusión automática tanto como sea posible al tiempo que le permite resolver los conflictos no controlados manualmente.

La herramienta perfecta debe manejar las operaciones de combinación utilizando un algoritmo de combinación de 3 vías que trae en cuenta los cambios realizados en la base de datos de su propiedad y la base de datos de la mina, en relación con la base de datos base.

Escribí una herramienta comercial que proporciona soporte manual de combinación para las bases de datos SQLite y actualmente estoy agregando soporte para un algoritmo de combinación de 3 vías para SQLite. Echa un vistazo a http://www.sqlitecompare.com

Para poder manejar el # 2, necesitará un marco de actualización en su lugar.

La idea básica es desarrollar un marco de actualización automática que sepa cómo actualizar de un esquema de SQL existente al nuevo esquema SQL y puede crear una ruta de actualización para cada instalación de DB existente.

Consulte mi artículo sobre el tema en http://www.codeproject.com /Kb/database/sqlite_upgrade.aspx para obtener una idea general de de lo que estoy hablando.

buena suerte

liron levi

 

In my experience the solution is twofold:

  1. You need to handle changes to the development database that are done by multiple developers during development.

  2. You need to handle database upgrades in customers sites.

In order to handle #1 you'll need a strong database diff/merge tool. The best tool should be able to perform automatic merge as much as possible while allowing you to resolve unhandled conflicts manually.

The perfect tool should handle merge operations by using a 3-way merge algorithm that brings into account the changes that were made in the THEIRS database and the MINE database, relative to the BASE database.

I wrote a commercial tool that provides manual merge support for SQLite databases and I'm currently adding support for 3-way merge algorithm for SQLite. Check it out at http://www.sqlitecompare.com

In order to handle #2 you will need an upgrade framework in place.

The basic idea is to develop an automatic upgrade framework that knows how to upgrade from an existing SQL schema to the newer SQL schema and can build an upgrade path for every existing DB installation.

Check out my article on the subject in http://www.codeproject.com/KB/database/sqlite_upgrade.aspx to get a general idea of what I'm talking about.

Good Luck

Liron Levi

</div
 
 
3
 
vote

VERIFICE DBGHOST http://www.innovartis.co.uk/ . He utilizado de una manera automatizada durante 2 años y funciona muy bien. Permite que nuestras compilaciones de DB suceden de manera muy similar a que se realice una versión de Java o C, excepto la base de datos. Sabes lo que quiero decir.

 

Check out DBGhost http://www.innovartis.co.uk/. I have used in an automated fashion for 2 years now and it works great. It allows our DB builds to happen much like a Java or C build happens, except for the database. You know what I mean.

</div
 
 
2
 
vote

Sugeriría usar las herramientas de comparación para improvisar un sistema de control de versiones para su base de datos. Dos buenas alternativas son esquema xsql comparar y datos xsql Comparar .

Ahora, si su objetivo es tener solo el esquema de la base de datos en Control de versiones, simplemente puede usar el esquema XSQL, comparar para generar instantáneas XSQL del esquema y agregar estos archivos en su control de versión. Luego, para revertir o actualizar a una versión específica, simplemente compare la versión actual de la base de datos con la instantánea para la versión de destino.

Además, si desea tener los datos en el control de la versión también, puede usar los datos XSQL Comparar para generar scripts de cambio para su base de datos y agregar los archivos .sql en su control de versión. Luego, podría ejecutar estos scripts para revertir / actualizar a cualquier versión que desee. Tenga en cuenta que para la funcionalidad 'revertir' Debe generar scripts de cambio que, cuando se ejecutan, hará que la versión 3 sea la misma que la versión 2 y para la funcionalidad 'Actualizar', debe generar scripts de cambio que hacen lo contrario. < / p>

Finalmente, con algunas habilidades básicas de programación por lotes, puede automatizar todo el proceso utilizando las versiones de la línea de comandos de XSQL Schema Comparar y los datos XSQL Comparar

Descargo de responsabilidad: Estoy afiliado a XSQL.

 

I would suggest using comparison tools to improvise a version control system for your database. Two good alternatives are xSQL Schema Compare and xSQL Data Compare.

Now, if your goal is to have only the database's schema under version control you can simply use xSQL Schema Compare to generate xSQL Snapshots of the schema and add these files in your version control. Then, to revert or update to a specific version, just compare the current version of the database with the snapshot for the destination version.

Also, if you want to have the data under version control as well, you can use xSQL Data Compare to generate change scripts for you database and add the .sql files in your version control. You could then execute these scripts to revert / update to any version you want. Keep in mind that for the 'revert' functionality you need to generate change scripts that, when executed, will make Version 3 the same as Version 2 and for the 'update' functionality, you need to generate change scripts that do the opposite.

Lastly, with some basic batch programming skills you can automate the whole process by using the command line versions of xSQL Schema Compare and xSQL Data Compare

Disclaimer: I'm affiliated to xSQL.

</div
 
 

Relacionados problema

638  ¿Cómo creo una sucursal?  ( How do i create a branch ) 
¿Cómo creo una sucursal en SVN? ...

5  ¿Cuáles son algunos consejos para que mi proyecto se compile en un nuevo pago cada vez?  ( What are some tips to make my project compile on a fresh checkout every time ) 
Más veces de lo que me gustaría admitir que he tenido gente nueva en un proyecto, haga un checkout solo para encontrar que les faltan varios recursos, DLL, Co...

2  Solución de control de fuente apropiada  ( Appropriate source control solution ) 
he comenzado un nuevo trabajo, donde una de mis primeras responsabilidades es importar una base de código ASP previamente mantenida por una agencia y que ahor...

2  ¿Qué SCM / VCS se enfrentan bien con el texto en movimiento entre archivos?  ( Which scm vcs cope well with moving text between files ) 
Estamos teniendo un estragado con nuestro proyecto en el trabajo, porque nuestro VCS está haciendo una fusión horrible cuando movemos información a través de ...

321  Base de datos de SQL Server de versiones  ( Versioning sql server database ) 
Quiero obtener mis bases de datos en Control de versión. ¿Alguien tiene algún consejo o artículos recomendados para comenzar? Siempre querré tener al menos ...

21  Servidores de subversión federados (sincronizados)?  ( Federated synced subversion servers ) 
¿Es posible crear servidores de subversión "federados"? Como en un servidor en la ubicación y otro en la ubicación b, que sincroniza sus versiones locales del...

64  ¿Cuáles son las ventajas de usar SVN sobre CVS?  ( What are the advantages of using svn over cvs ) 
Mi compañía está utilizando CVS como nuestro estándar de facto para el control de la fuente. Sin embargo, he escuchado a mucha gente decir que SVN es mejor. ...

125  ¿Hay un sistema de control de versiones para los cambios de la estructura de la base de datos?  ( Is there a version control system for database structure changes ) 
A menudo me encuentro con el siguiente problema. Trabajo en algunos cambios en un proyecto que requiere nuevas tablas o columnas en la base de datos. Hago l...

5  Vimdiff contra un repo de control de origen  ( Vimdiff against a source control repo ) 
scmdiff marca las diferencias entre el Checked in la versión de un archivo y el archivo que se está editando. Lo marca al colorear las líneas cambiadas. ¿Ha...

18  Diferentes sistemas de control de versión distribuida trabajando juntos  ( Different distributed version control systems working together ) 
MI OFICINA TIENE UNA INSTALACIÓN DE FUENTE DE FUENTE CENTRAL 2005 que utilizamos para el control de la fuente. No puedo cambiar lo que usa la oficina en el se...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos