https://xetown.com/qna/549636

 

여기 댓글 중에 DB에서 documents 부분 수정하는 걸 보고 따라해봤더니 (정확하게는 title의 varchar를 250에서 50으로 바꿔봤습니다)

 

지금까지 등록된 글들 중에 제목이 50자가 넘는 경우 그 초과분이 전부 삭제되어 버렸네요;;;

 

다행히 오늘 새벽분 백업자료가 있어서 받았는데

 

그렇다고 이걸 그대로 덮어씌우면 백업된 시점 이후의 글들은 죄다 날아가게 되는데...

 

다른거 다 놔두고 백업시점까지의 게시글 제목만 복원할 수 있는 방법은 없을까요?

 

해결책 알고 계시는 고수님들 답변좀 부탁드립니다

  • profile
    백업본을 일단 다른 디비에 복원한 후 (백업본에 테이블명이 여러 군데 하드코딩되어 있기 때문에 그대로 복원하면 현재 자료를 덮어쓰게 됩니다) 번호가 일치하는 글의 제목을 덮어쓰는 쿼리를 돌려서 복원할 수는 있습니다만... 보통 웹호스팅에서는 디비를 1개밖에 제공하지 않으니 까다로울 것 같네요.
  • profile ?
    DB는 여러개 만들 수 있는데, 문제는 앞에 "xe_" 라고 붙는 게 같기 때문에 문제가 발생하지 않나요?

    (현재 DB명이 A라고 하고, 새로 만든걸 B라고 할때, B에 백업분을 덮어씌우면 A에도 xe_documents가 있고 B에도 똑같이 xe_documents가 있어서 문제가 발생한다는 글을 언젠가 본 적이 있는 거 같네요)



    여담으로 지금 검색해보니 제목이 50글자인 게시물이 600개네요;;; 이 중 상당수가 50자가 넘는데 varchar를 수정하는 바람에 짤린 글 같은데..
  • ? profile
    XE에서는 설치할 때 지정한 DB만 사용하기 때문에 다른 DB에 어떤 테이블이 있든 상관없고요, 복원을 위해 양쪽 다 참조할 필요가 있을 때는 A.xe_documents, B.xe_documents 등으로 구분합니다.
  • profile ?
    그렇군요. 감사합니다.
  • profile

    DB를 여러개 만들수 있다면, (만약 db한개에서 처리하려면 백업된 documents테이블만 임포트한후에 테이블명만 수정하시면 될것 같습니다)

    Update 현재데이터베이스명.xe_documents a, 백업데이터베이스명.xe_documents b
    SET a.title=b.title
    WHERE a.document_srl=b.document_srl
    and 날짜조건

    이런식으로 주시면 될것 같습니다. 실제 xe에서는 테스를 안해봤기 때문에, 먼저 테스트 해본 후 적용하셔요.

  • profile ?
    이렇게 되면 a의 게시물 중 document_srl이 서로 일치하는 게시물의 title이 b의 title로 덮어씌워지게 되는건가요?

    날짜조건 말고(어차피 백업본 전체를 다 해야 하므로), 글자길이로 하려면 and CHAR_LENGTH( title ) > 50 이렇게 추가하면 될까요?
  • ? profile
    네. srl이 일치하는 게시물들 중에서 b타이틀로 덮어 씌우는거예요.
    글자 길이 조건을 주시려면 and CHAR_LENGTH(b.title) >= 50 이런식으로 하시면 될것 같습니다. 그냥 다 덮어씌우실거면 굳이 길이 조건을 안주셔도 될거 같네요.
  • profile ?
    깔끔하게 해결됐네요. 정말 감사합니다.