2012-02-26 10 views
1

私はWindows Server 2008マシン上にRailsアプリケーションを持っています。アプリケーションはsqliteデータベースを使用しており、1日に1回バックアップする必要があります。バックアップは、データベースファイルをミラーリングされたフォルダにコピーすることによって実行する必要があり、ミラーバックアップサービスはそこから取得します。データベースファイルを安全にバックアップするためのRailsタスクのスケジューリング

問題が1つあります。私はアプリケーションがそれを使用している間、データベースファイルをコピーしないようにしたいと思います。アクションの途中でファイルをコピーすると、バックアップに破損したデータベースファイルやロックされたデータベースファイルが生成され、そのようなファイルを復元することは非常に困難です。

ここで、スケジュールされたタスクをデータベースが使用されていない状態になるまで待ちますか?または、バックアップタスクの実行中に残りのアプリケーションがデータベースを使用しないようにするには?

スケジューリングに関してはいくつかの解決策を見てきましたが、私はスケジューリングソリューションをまだコミットしていないので、スケジューリングソリューション機能に依存してバックアップの問題を解決することは可能です。

答えて

7

私はSQLite Command Line Shellを使用することをお勧めします:

sqlite3 /path/to/live.db '.backup /backup/path.db' 

これは、通常のDB操作が失敗することなく、バックアップにあなたをできるようになります。

コピー操作は、ソース データベースは、それが実際にあるとき、コピーの期間中、唯一 時間の短い期間のためにロックする必要がない場合には、インクリメンタルに行うことができる:ドキュメントから読まれている。

+0

シンプルでエレガントで、私はWindowsのスケジュールされたタスクからでも実行できます。ありがとう! –

関連する問題