itdeveloper
itdeveloper

Reputation: 339

Looking for solution for database versioning

Problem description:

In our project we have one "production database" and many "devs". We want to know how we can manage and install the changes. We already have some procedures but it takes a lot of time and sometimes causes errors.

We can't lose data - so we can't use "drop table". We can only use "alter table".

Our actual "db versioning procedure" is like this:

When a developer wants to commit a new revision on SVN he needs to change_script.sql by adding a block:

if ([acctual_version].version < "23")) {
    --- sql script ----
updateVersionTo("23")
end if 

When we want to upgrade the database schema we just "execute" the change_scripts.sql

Does anyone have a better idea?

Upvotes: 10

Views: 2450

Answers (6)

pryabov
pryabov

Reputation: 854

You can use database migrators tools like:

  1. .NET Migrator
  2. FluentMigrator
  3. Entity Framework Code First Migrations

These tools allow you to work with database versions.

Upvotes: 0

AmitGaur
AmitGaur

Reputation: 51

Have you looked at Liquibase? http://www.liquibase.org/ It manages the versioning for you with support for rollback and rollforward

Upvotes: 0

marc_s
marc_s

Reputation: 755321

You describe a process that's being used in lots of dev shops, I'm pretty sure - including in my company, too.

If you want to stick with this, one tool that's helped us is SSW SQL Deploy which allows you to grab a whole bunch of scripts (we have a "changes" folder for each version, and the files are label "001_something.sql" through "999_somethingelse.sql") and execute those as a whole against a database. You can also include that into your .NET apps via an API, or you can launch it from the command line during an install.

The highest end of the spectrum is to adopt a whole database change management process, something like DB Ghost by Innovartis, which is a lot more than just a bunch of tools. But this would require you and your devs to adopt that style thoroughly and live and breathe it. Very interesting, but so far, I haven't managed to convince my devs and bosses :-( Maybe you have more luck?

Upvotes: 1

Remus Rusanu
Remus Rusanu

Reputation: 294417

I do it very similarly, but use database extended properties instead of a table to track metadata version and the upgrade steps are defined in application, rather than a single script. Most upgrade steps are just execute script Upgrade.vX.Y.sql.

I actually find your approach superior to schema comparison tools (and that includes VS DB deployment) for several reasons:

  • I don't trust schema comparison tools changing very large tables, I rather have a tested script specifically designed for my table of 150B records.
  • Schema comparison doesn't handle removal of obsolete objects
  • If the application schema was modified at a client site a comparison tool will blindly attempt to upgrade it, but a modified schema may need special treatment: inspection of the changes, evaluation of impact, billing of extra work.

Upvotes: 3

Seth Petry-Johnson
Seth Petry-Johnson

Reputation: 12085

Red Gate's Sql Compare tool can compare two tables (or two collections of DDL scripts, or one set of scripts to a table, etc) and generate the migration script for you.

If you're working in Ruby you can look into "Ruby Migrations", which is a formalized way of doing DB versioning in code. (There are similar things in .NET such as RikMigrations and Fluent Migrator, and I'm sure similar things exist for other platforms as well).

As Randy Minder said, you can also use VS DB Edition to manage your schema for you, although I think the RedGate tools work just as easily and don't tie you to a specific platform or IDE.

Upvotes: 5

Randy Minder
Randy Minder

Reputation: 48522

Have you heard of Visual Studio Database Edition? If you are currently using VS Team Suite or VS Developer Edition, you get it free. It is a database schema management tool that version controls your schema, allows refactoring, builds, code analysis and deployment.

We use it to manage our DB schemas and deployments. Great tool.

Upvotes: 1

Related Questions