Looking for solution for database versioning

后端 未结 6 1212
忘掉有多难
忘掉有多难 2021-01-04 18:19

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

相关标签:
6条回答
  • 2021-01-04 18:24

    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.

    0 讨论(0)
  • 2021-01-04 18:30

    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.

    0 讨论(0)
  • 2021-01-04 18:32

    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.
    0 讨论(0)
  • 2021-01-04 18:32

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

    0 讨论(0)
  • 2021-01-04 18:34

    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.

    0 讨论(0)
  • 2021-01-04 18:34

    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?

    0 讨论(0)
提交回复
热议问题