출처 : http://dorajistyle.pe.kr/technology.php/2006/11/17/db_mssql_2005_dbesmemnes
정상적으로 종료가 되었을때만 사용
이건 관리툴에서 단순 연결/해제 를 하는 것과 동일한 기능인듯 하다
로그와 데이터 모두 살아있을 때 복구법 : 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
(다시 살릴때) alter database dbname set online;
- SQL 멈춘다.
- 생성한 DB의 mdf, ldf파일을 삭제하고 복구할 mdf파일들을 복사해온다.(로그파일 제외)
SQL 서버를 재시동한다.
- 오브젝트와 데이터들이 관리자에게 접근가능하지만, 여전히 백업도 온라인상태가 되지도 않는다.
- 스크립트 생성 마법사로 모든데이터 오브젝트를 스크립트로 만든다.
오브젝트 권한,의존 오브젝트들,인덱스들 포함;파일로 내보낸다.)
이 부분은 실제 를 제외한 테이블 및 기타 객체자체만 스크립트로 생성
새로운 두번째 DB를 생성한다.
- 새로운 DB에서 모든 오브젝트가 생성되 여러번 스크립트를 실행한다.
생성된 스크립트를 쿼리창에서 실행해서 새 에 객체를 추가하는 부분
- 데이터 불러오기(가져오기) 마법사로 모든 살아있는 테이블을 새로운 DB에 넣는다.
기존 DB 에 -> 새 DB 로 실제 테이블(객체) 내의 데이트를 선택하여 넣는
실제 이 과정에서 오류가 발생했다...
sql_variant 타입의 컬럼을 테이블은 가져오기(내보내기) 로 복사할수 없다(?) 는 식의 오류가 발생한다.
sql_variant 타입을 가진 테이블을 제외하고 모두 가져오기(내보내기) 를 한 다음
제외한 테이블은 스크립트로 별도로 백업 받아서 수동으로 복원을 시켰다.
이때, 조심해야 할것은 백업과정에 따라 생성된 스크립트 인코딩을 고려해서 해야할
이번경우 인코딩 때문에 한글에 문제가 있어서 메모장에 복사한 후 한글을 보이게끔 해서 복원을 하였음
- 새로운 DB를 긴급모드에 들어가있는 DB에 복원한다.
이 과정은 정확히 무슨
데이터 이동이 끝난 경우 미리 백업을 해놓으라는??
아무튼 백업은 복원 할려니 안되더라...
그래서 기존 긴급모드에 있는 DB 의 해제하고
새 DB 를 기존 WSS 에서 사용하는 DB 변경을 하였음