量産メモ帳

忘れっぽいのでメモを残しています。

削除してしまったチケットを復活させる。

スポンサーリンク

先日、チケットの編集中にボタンのアイコンを見間違えて、うっかり削除ボタンを押してしまった。
DB を覗いてみたら、見事に物理削除されてしまっている。。
けれども、以下のログファイルに今までの書き込みログが残っていたので、それを頼りにチケットを作り直した。



今回の復旧作業にあたって厄介だったのは、削除したチケットには親も子もいたということ。
親チケットは無事だったが、2枚あった子チケットは共に削除されてしまった。


結論から言うと、以下のような手順で復旧した。

  1. ログファイルを頼りに削除してしまったチケット(M)を作成し直す。
  2. 作り直したチケット(M)の子チケット(C)も作り直す。⇒M と C の親子関係ができる。
  3. phpMyAdmin で DB にアクセスし、redmine データベースの中にある issues テーブルを開く。
  4. 親チケット(P)と自チケット(M)、子チケット(C)に該当するレコードの以下のカラムの値を修正する。⇒P と M と C の親子孫関係ができる。
    • parent_id
    • root_id
    • lft
    • rgt



各カラムの値はこんな感じ。*2

idparent_idroot_idlftrgt
親チケット(P)9(null)9154
チケット(M)73994853
子チケット(C1)747394950
子チケット(C2)757395152


カラムの意味はこんな感じ。

  • id:ID。チケット毎に一意な値。今回は修正対象外。
  • parent_id:親チケットのID。
  • root_id:親子関係の最上位に位置するチケットのID。
  • lft, rgt:関係を式で説明すると以下のようになる。親が子を、子が孫を囲むようなイメージ。
    • P の lft(1) < M の lft(48) < C1 の lft(49) < C1 の rgt(50) < C2 の lft(51) < C2 の rgt(52) < M の rgt(53) < P の rgt(54)



修正を間違えると、以下のようなエラーが出たりする。

  • "activerecord, errors, models, issue, attributes, parent_issue_id, not_a_valid_parent"


*1:Redmine のインストールフォルダ

*2:赤い太字は自分で修正した箇所。