2009년 8월 13일 목요일

SQL SERVER에서의 디비 복원,이동(attach,detach)

MSSQL서버에서 간편하게 DB를이동해야할 경우가 생깁니다.

이번에 제가 다니는 회사에서도 새로운 테스트 환경을 구축하는 업무가 제게 주어졌는데요

여기서 정말 편리한 DB백업과 복원방법이 있어서 이렇게 소개를드리고자 합니다.

 

MSSQL(SQL SERVER)에서 제공하는 프로시저중에

sp_attach_db sp_detach_db 라는 아이들이 있습니다.

간단히 설명을 드리자면 영어 단어에서 대충 짐작이 가듯..

 

sp_attach_db 라는 애는 기존 물리 파일을 이용하여 디비서버에

데이터 베이스를 새로 붙이는 역활을 합니다.

그리고 sp_detach_db 는 서버로 부터  데이터 베이스의 물리적 데이터 파일과 로그 파일을

분리하는 역활을 합니다.

(그냥 스튜디오 메니지먼트에서 삭제를 이용해도 물리 파일을 분리할 수 있지만

물리파일이 완전 삭제 되어 비립니다. )

 

그러면 사용예를 들어보겠습니다.

 

먼저 기존서버에서 분리할 데이터베이스의 물리적인 파일위치를 알아봅니다.

그리고 난뒤 마스터 디비로 이동해서 해당하는 디비의 분리 작업을 시작합니다.


 

옵션항목에 @KeepFulltextIndexFile 이 있는데 이것은 인덱스 파일이

데이터베이스 분리 작업 동안 제되지 않도록 하는 옵션입니다.

KeepFulltextIndexFile은 기본값은 true입니다.

KeepFulltextIndexFilefalse이면 데이터베이스가 읽기 전용이 아닐 경우에는

인덱스 파일과 인덱스의 메타데이터가 모두 삭제됩니다.

NULL 또는 true이면 전체 텍스트 관련 메타데이터가 유지된다고 하네요.

 

다음으로 새로운 서버에 분리한 파일로 디비를 결합하는 예 입니다.

@filename[n]으로 파일을 지정 하능하고 16개 까지 파일을 지정 가능 하다고 하네요.

이것으로 기본 적인 파일 분리와 결합이 완료 되었습니다.

 

그리고 치명적인 에러 발생으로 log 파일인 LDF 파일을 잊어버렸다 해도 MDF 파일 만으로

디비 복구가 가능합니다. 요즘 이런일은 거의 발생할 일이 없다고는 하지만 그래도 MDF 파일로만

디비를 복구하고 싶을때는 다음과 같은 저장 프로시져를 이용합니다.

 

sp_attach_single_file_db 의 사용예

디비서버가 오래되면 당연히 로그파일이 커지게 되고 실제로 별 필요 없는 로그인데도 잘 지워지지도

그리고 잘 축소되지도 안는 경우가 있죠 이런경우 기존 로그파일까지 결합이 불필요 할때

사용하시면 좋겠지요....

참고로 이번 테스트환경 구축때 사용된 저장프로시져 이기도 합니다.

 

참고로 이번 테스트 환경 작업구축때 가장 애먹은 일을 말하자면 디비 결합이나 분리가 아니였구요

바로 검증 작업이였습니다. 사실 검증이 별 무의미 하다고 생각하지만 그래도 윗사람들이 어디 그렇나요?

ㅋㅋㅋ

 

그래서 이런저런 방법 사용해보다가 좋은 것을 발견했습니다.

바로 sysobject테이블과 sysindexes테이블 내의 정보였는데요.

이렇게 하시면 여러 테이블의 총량을 쉽게 구하실수 있을거에요..

 

댓글 없음:

댓글 쓰기