roundhouse


RoundhousE - Migrate and Version Your Database

Project RoundhousE

"Professional Database Versioning and Change Management"

RoundhousE is an automated database deployment (change management) system that allows you to use your current idioms and gain much more.

It seeks to solve both maintenance concerns and ease of deployment. We follow some of the same idioms as other database management systems (SQL scripts), but we are different in that we think about future maintenance concerns. We want to always apply certain scripts (anything stateless like functions, views, stored procedures, and permissions), so we don’t have to throw everything into our change scripts. This seeks to solves future source control concerns. How sweet is it when you can version the database according to your current source control version?

DOCUMENTATION? Have a look here: https://github.com/chucknorris/roundhouse/wiki

Important

RoundhousE is a dual repository (svn and git). You can find the git repository at (https://github.com/chucknorris/roundhouse)

Donations Accepted - If you enjoy using this product or it has saved you time and money in some way, please consider making a https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9831498'>donation. It helps keep to the product updated, pays for site hosting, etc. The link is the donate button on the right or click https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9831498'>here.

http://roundhouse.googlecode.com/svn/trunk/docs/logo/RoundhousE_Logo.jpg' alt="RoundhousE. It's not for the faint of heart." width='318' height='300' />

Get RoundhousE

Downloads

  • You can download RoundhousE from http://code.google.com/p/roundhouse/downloads/list
  • You can also obtain a copy from the build server at http://teamcity.codebetter.com

NuGet

With http://nuget.codeplex.com'>NuGet you can get the current release of RoundhousE to your application quickly!

  1. In Visual Studio Package Manager Console type install-package roundhouse
  2. RoundhousE NuGet packages available:
    • roundhouse
    • roundhouse.lib
    • roundhouse.msbuild
    • roundhouse.refreshdatabase

Chocolatey

http://nuget.org/list/packages/chocolatey'>Chocolatey is like apt-get, but for Windows! This is an alternative method to get the current release of RoundhousE to your machine quickly!

  1. Type cinst roundhouse
  2. Then from anywhere you can type rh [options]

Roadmap

v1

  • Create logo - DONE (revision 54)
  • Create non-existent database - DONE (revision 13)
  • Run sql in order based on file names - DONE (revision 17)
    • 0001_Create.sql comes before 0002_Insert.sql - DONE (revision 17)
  • Run stateless SQL every time - DONE (revision 17)
    • Stateless sql (functions, views, sprocs) stays out of the up and down sections so they can be properly maintained in their own files in source control - DONE (revision 17)
  • Versioning - DONE (revision 45)
    • Versioning the database based on an XML file that contains the version/revision. - DONE (revision 45)
    • Grab the version from a DLL's file version - DONE (revision 32)
  • Track which files have run - DONE (revision 23)
  • Files that run in up/down should only run once - DONE (revision 29)
  • Restore a database from a known location - DONE (revision 32)
  • NAnt Task - DONE (revision 11)
  • MSBuild Task - DONE (revision 11)
  • Console - DONE (revision 69)
  • One way hash of script text - allows for updating person when script has already been run but has changed - DONE (revision 58)
    • hashing - DONE (revision 53)
    • Notification and/or error on changes of text that has already run - DONE (revision 58)
  • Create a change drop folder for recording all changes (items that actually run) (issue 4) - DONE (revision 67)
  • backup the database before running (issue 3)
    • drop a restore.bat file next to the backup to run in case something goes awry
    • drop to change_drop folder
  • Move datatabases to plug in model to make it easy to use sql 2005/2008 or something else - DONE (revision 64)
  • Add a switch for drop - DONE (revision 73)
  • Documentation
    • Getting Started
    • Running RoundhousE
  • Reports version (issue 9) - DONE (revision 108)

v2

  • Run only items that have changed since the last migration (Only run the stateless items when the hash has changed) - DONE (revision 59)
  • Permission changes for auditing (timestamp, .pre .post with version numbers of each)
    • script permissions before
    • script permissions after
  • change_drop folder changes
    • security permission changes from above
    • change log added - DONE (revision 81)
    • change_drop folder is zipped up afterwards (DatabaseName-PriorVersion-NewVersion.zip) (issue 5)
  • Use RoundhousE to set up migrations (issue 2)
    • will compare two databases to create change scripts (actually will create a second Database based on current scripts to baseline and compare it against the current database in development to generate change scripts and regenerate objects) - DONE (revision 197) - Using RedGate - still working out the details though for making this available for use
    • will have a folder for all objects to check into source
  • Run in a transaction - DONE (revision 74)
  • Create wiki page
  • Should we include indexes outside of the up/down folders?
  • rh.exe initialize folderName will create the database project and the required folders (issue 6).
  • GUI Interface (isn't that a little redundant?)
  • Web Interface for Web Installs
  • Environment aware for things like permissions and test data - DONE (revision 86)

Future version

  • Downgrade a database
  • RoundhousE needs it's own internal versioning scheme so it can upgrade itself (issue 38) - DONE (revision 268)
  • Metrics tracking on the runner
  • Other database types
    • Oracle support (issue 34) - DONE (revision 186)
    • MySQL Support
    • MSAccess Support - DONE (revision 96)
    • others?

Requested Enhancements

  • Can I use synonyms for database type? (issue 10) - DONE (revision 85)
  • Run a DLL with embedded SQL files (can get the version from that file) (issue 27)
  • Can I insert a bunch of test data automatically into a database for load testing?
  • Please interact with NHibernate (and FNH) to create schema files (issue 11) - DONE (revision 299)
  • Can I add custom Restore Arguments - like MOVE? (issue 12) - DONE (revision 104)
  • Split statements on GO in sql server types (issue 17) - DONE (revision 113, revision 125)
  • Increase the restore timeout/make it configurable (issue 21) - DONE (revision 117)
  • Allow for Custom Create Database Scripts (issue 20) - DONE (revision 116)
  • Use Ado.NET instead of SMO (issue 22) - DONE (revision 125)
  • Add option not to create a database, even if it doesn't exist (issue 24) - DONE (revision 123)
  • Dry run or something similar (issue 36)
  • During restore for sql server, mdf and ldb files should be moved to the default location if one is not specified in the custom restore options (issue 13)

What others are saying

"This is, without a doubt, freaking awesome!" - Chris Patterson, http://blog.phatboyg.com'>http://blog.phatboyg.com

"RoundhousE integration was straight forward, and it has saved the team on more than one occasion. We have a team rule to not modify ddl scripts after being committed to source control; any new changes must be carried by a new script. With RoundhousE, the tool itself enforces the rule and warns the developer when they test changes to the database..." - Elias Rangel

"Great Project structure, and arquitecture. Testing it out over [removed] as it has a cleaner script visibility to production DBA's." - comment from a user commenting on ferventcoder.com

"Been playing with RH, looks good for what we need, thank you!" - comment from a user commenting on ferventcoder.com

"We are very excited about RoundhousE and the vision it takes on database change management. I can only say: Give RoundhousE a try, it’s awesome!" - Pascal Mestdach, http://pascalmestdach.blogspot.com/2010/03/database-change-management-with.html'>http://pascalmestdach.blogspot.com/2010/03/database-change-management-with.html

Who's using it?

  • MassTransit http://masstransit-project.com/'>http://masstransit-project.com/
  • DotNetVideos http://www.dotnetvideos.net/'>http://www.dotnetvideos.net/
  • Bombali http://bombali.googlecode.com'>http://bombali.googlecode.com
  • Fortune 5 company (name withheld for privacy reasons)
  • Others either known (and kept private) or unknown