2016-07-07 10 views
0

私たちには、不安定な管理インターフェースを備えたレガシーシステムがあり、ユーザーのうちの1人はレコードを一掃することができました。我々は数日前からのバックアップを持っていますが、はありません。は、DBを削除してバックアップから復元したいのです - そこからいくつかのタイプのオブジェクトが必要です(多くの行、 。データベースの一部を復元する

一部のレコードのみを復元するにはどうすればよいですか?私は、次のように働くだろうと思った:

  • ActiveRecord::Base.establish_connection変更(establish_connectionと再)生産DBへの接続、私は(例えばwidgets = Widget.all)を復元するレコード
  • グラブ
  • バックアップDBに接続するために
  • ウィジェットを保存します(widgets.save) - 動作しませんか?

は、私はそれはそれはbackupデータベース出身だにもかかわらず、productionデータベースに同じIDとすべてを保存するために変更することができますActiveRecordのオブジェクト内の固有の何かがありますので、彼らはどのようにほとんど同じです彼らは前にあった(created_atはもちろん、これは大丈夫です)

これはおそらく最良の方法ではありませんが、私は本当に最良の方法が何であるかを判断できません。データベースはかなり重いので、実際にはraw SQLなどを得ることはできません。

+0

"データベースがかなり重いので、raw SQLなどを取得することはできません。"どういう意味ですか? –

+0

dbをデータを含む巨大なSQL文にパイプすることができます。この文は、データの復元に必要なコマンドを実行します。しかし、DBは大きすぎてすべてのものを巡って行きません。 :) – charlie

答えて

1

アプローチ1

私は最も簡単な方法は、あなたが復元してから、ターゲット・データベースにそのバックアップを復元するいくつかのテーブルのスナップショットを取ることであろうと信じています。

アプローチ2

バックアップを取ることができない場合は、単に新しいデータベースに既存のバックアップを復元しようとし、その後、ActiveRecordの:: Base.establish_connectionを使用して接続、それらのいくつかのテーブルのレコードを選択それをターゲットデータベースに復元します。

アプローチ3

あなたはMySQLや他のRDBMSを使用している場合は、ちょうどその新しいデータベースにバックアップを復元し、ターゲット・データベースにそのデータベースからテーブルの行を転送するためにSQLを記述します。

+0

ありがとう、#1をやってしまった。すべては順調です! (そして私たちはそのインタフェースSTATを変更しています) – charlie

関連する問題