본문 바로가기

IT/Database

MSSQL MDF 복구법

갑자기 WSS 로 구축한 Teamsite 가 안열린다 - DB 에 연결할 수 없다네...
그래서 이래저래 원인을 찾던중 WSS 에 사용하는 원격 SQL DB 가 MDF 파일 자체에 문제가 생긴듯...
Management Studio 로 새로 연결을 끊고 다시 연결을 할려니 재 연결이 안되네... 헐 -_-;;
그래서 또 구글링을 하다가 찾음.....

출처 : http://dorajistyle.pe.kr/technology.php/2006/11/17/db_mssql_2005_dbesmemnes

정상적으로 종료가 되었을때만 사용

이건 관리툴에서 단순 연결/해제 를 하는 것과 동일한 기능인듯 하다

1. 로그와 데이터 모두 살아있을 때 복구법 : sp_attach_db ‘DB명’, ‘경로\파일명.mdf’ , ‘경로\파일명_log.ldf’
2. 데이터 파일만 살아있을 때 복구법 : sp_attach_single_file_db ‘DB명’, ‘경로\파일명.mdf’
3. 데이터 파일만 남기고 삭제하고 싶을때 : sp_detach_db

ldf파일만 손상을 입고 mdf파일은 손상을 입지 않았을때

- 원래 DB와 동일 이름의 DB를 생성한다. (mdf 파일명과 크기도 같게..)
- 생성한 DB를 긴급 모드로 변경한다.
     alter database dbname set emergency;
     (다시 살릴때) alter database dbname set online;
- SQL 서버를 멈춘다.
- 생성한 DB의 mdf,ldf파일을 삭제하고 복구할 mdf파일들을 복사해온다.(로그파일 제외)
- SQL 서버를 재시동한다.
- 오브젝트와 데이터들이 관리자에게 접근가능하지만, 여전히 백업도 안되고 온라인상태가 되지도 않는다.
- 스크립트 생성 마법사로 모든데이터 오브젝트를 스크립트로 만든다.(스크림팅 오브젝트 권한,의존 오브젝트들,인덱스들 포함;파일로 내보낸다.)

이 부분은 실제 DataRow 를 제외한 테이블 및 기타 객체자체만 스크립트로 생성

- 새로운 두번째 DB를 생성한다.
- 새로운 DB에서 모든 오브젝트가 생성되 때까지 여러번 스크립트를 실행한다.

생성된 스크립트를 쿼리창에서 실행해서 새 DB 에 객체를 추가하는 부분

- 데이터 불러오기(가져오기) 마법사로 모든 살아있는 테이블을 새로운 DB에 넣는다.

기존 DB 에서 -> 새 DB 로 실제 테이블(객체) 내의 데이트를 선택하여 넣는 과정

실제 이 과정에서 오류가 발생했다...

sql_variant 타입의 컬럼을 가진 테이블은 가져오기(내보내기) 로 복사할수 없다(?) 는 식의 오류가 발생한다.

그래서 sql_variant 타입을 가진 테이블을 제외하고 모두 가져오기(내보내기) 를 한 다음

제외한 테이블은 스크립트로 별도로 백업 받아서 수동으로 복원을 시켰다.

이때, 조심해야 할것은 백업과정에 따라 생성된 스크립트 인코딩을 고려해서 해야할 듯하다.
이번경우 인코딩 때문에 한글에 문제가 있어서 메모장에 복사한 후 한글을 제대로 보이게끔 해서 복원을 하였음

- 새로운 DB를 백업하고, 긴급모드에 들어가있는 DB에 복원한다.

이 과정은 정확히 무슨 의미인지?
데이터 이동이 끝난 경우 미리 백업을 해놓으라는??

아무튼 백업은 했는데.. 복원 할려니 안되더라...

그래서 기존 긴급모드에 있는 DB 의 연결을 해제하고

새 DB 를 기존 WSS 에서 사용하는 DB 명으로 변경을 하였음


2008-10-28

여기까지만 하고 WSS 사이트를 다시 살려서 돌려봤더니...

설정이나 기타 첨부파일등은 정상적으로 다운 로드 및 ListView 가 된다...

하지만, 업로드시 경로를 찾을 수 없다는 오류가 나고... 하지만 실제 파일은 존재하고...

기존 업로드된 파일은 수정이 안된다...

그래서... 더 살펴보기로 했다...

기존 DB 설정이랑 수동으로 만든 설정이 틀리다...

기존 DB 는 Sharepoint Admin 에서 만들어서 그런지 문자셋 설정이나 기타 설정이 안 맞는 하고

보안(로그인) 설정 및 기타 여러 설정을 확인해 가며 수정하는 중이다...