2016-07-07 2 views
0

우리는 불안정한 관리 인터페이스를 가진 레거시 시스템을 보유하고 있으며 사용자 중 일부는 일부 레코드를 삭제했습니다. 우리는 며칠 전부터 백업을 가지고 있지만 이 아니라면 DB를 제거하고 백업에서 복원하고 싶습니다. - 몇 가지 유형의 개체가 필요합니다 (많은 행이 있지만 몇 개의 연관된 개체 만 있음) .데이터베이스의 일부를 복원하십시오.

일부 레코드 만 복원하는 방법은 무엇입니까? 나는 다음과 같은 작업 것이라고 생각 :

  • ActiveRecord::Base.establish_connection 내가 (예 : widgets = Widget.all)
  • 변경 (establish_connection 다시) 생산 DB에 대한 연결을 복원 할 기록
  • 백업 DB
  • 잡아에 연결
  • 위젯 저장 (widgets.save) - 작동하지 않습니까?

나는 그것이이 backup 데이터베이스에서 원래에도 불구하고, production 데이터베이스에 동일한 ID와 모든 것을 저장하기 위해 변경할 수있는 액티브 오브젝트의 고유 뭔가가 있나요, 그래서 그들은 어떻게 거의 동일하다 그들은 전에는 (물론 created_at을 제외하고)

이것은 아마도 최선의 방법은 아니지만 실제로 가장 좋은 방법이 무엇인지 판단 할 수는 없습니다. 데이터베이스가 상당히 무거워서 원시 SQL 같은 것을 얻을 수 없습니다.

도움을 주셨습니다.

+0

"데이터베이스가 너무 무거워서 원시 SQL 같은 것을 얻을 수 없습니다." 무슨 소리 야? –

+0

데이터를 복원하는 데 필요한 명령을 실행하는 db의 데이터가 들어있는 거대한 SQL 문에 db를 파이프 할 수 있습니다. 그러나 DB는 너무 커서 모든 것을 통해 크롤링 할 수 없습니다. :) – charlie

답변

1

접근

1 내가 가장 쉬운 방법은 당신이 다음 복원 할 몇 테이블의 스냅 샷을하는 것입니다 생각, 대상 데이터베이스에 해당 백업을 복원합니다.

그냥 다음 새 데이터베이스로 기존의 백업을 복원하려고하고 백업을 수행 할 수없는 경우 접근 방식이

, 다음, 그 몇 테이블의 레코드 선택을 액티브 :: Base.establish_connection를 사용하여 연결할 이를 대상 데이터베이스로 복원하십시오.

접근 3

당신은 다음의 MySQL이나 다른 RDBMS를 사용하는 경우, 당신의 대상 데이터베이스에 해당 데이터베이스에서 테이블 행을 전송하는 SQL 쓰기, 다시 새 데이터베이스까지하고 복원 할 수 있습니다.

+0

감사합니다. # 1 일을 끝냈습니다. 모두 잘됐다! (그리고 우리는 그 인터페이스 STAT를 바꾸고있다) – charlie

관련 문제