sql-server bak를 복원하고 동시에 로그를 축소 할 수 있습니까?


26

문제 조사를 위해 개발자 사무실로 옮긴 클라이언트의 bak 파일이 있습니다. 백업은 현재 25GB이고 복원 된 데이터베이스의 크기는 거의 같지만 복원하려면 100GB가 필요합니다. 데이터베이스가 75GB 트랜잭션 로그 크기를 갖도록 설정 되었기 때문이라고 생각합니다. 데이터베이스를 복원 한 후 로그 파일을 축소 할 수 있지만 복원시이를 수행 할 수있는 방법이 있습니까?


3
복원이 완료 될 때까지 데이터베이스를 변경할 수 없음을 알고 있습니다.
Shawn Melton

3
나는 같은 상황에 있었고 답을 기대합니다. 간단히 말해서, red-gate의 SQL 가상 복원 제품이 있습니다. 나는 이것을 사용하지 않았지만 사이트에 따르면 : '마운트 된 데이터베이스는 백업 파일보다 거의 0에 가까운 추가 스토리지가 필요합니다.'
StanleyJohns

답변:


16

복원 프로세스의 일부로 백업을 축소 할 방법이 없습니다. 드라이브 문자와 폴더를 변경할 수 있다는 점을 제외하고는 복원 된 데이터베이스가 원본 데이터베이스와 똑같아 야합니다.


34

a는있다 할 -하지 - 적 - 할 -이 - 인 - 어 - 라이브 환경 공간이 압축 된 폴더에 로그 파일을 복원하여, 제한되는 경우 사용할 수있는 해킹. 기존 폴더를 압축하고 복원하면 오류가 발생하므로 심볼릭 링크를 사용하여 부정 행위해야합니다.

  1. 압축 폴더 만들기 D:\LogCompressed\
  2. 압축 폴더에 대한 심볼릭 링크 만들기 mklink /D /J D:\Log\ D:\LogCompressed\

  3. ldf 파일이 가리키는 데이터베이스를 복원하십시오. D:\Log\

  4. 로그 파일을 적절한 크기로 축소

  5. 데이터베이스를 분리하고 로그 파일을 압축되지 않은 폴더로 이동 한 후 첨부하십시오.

더럽고, 부정 행위이며, 절대로 라이브로하지 마십시오 . 그러나 작동합니다. 32MB 로그 파일을 사용하여 새로 만든 데이터베이스를 빠르게 테스트 한 결과 압축시 디스크에서 330kb를 차지하고 폴더를 압축 해제하면 디스크 크기는 32MB로 돌아갑니다.


2
@Mark :이 핵은 작동하지만 완벽하지는 않습니다. 로그 파일이 실제 크기보다 훨씬 적은 공간을 차지하더라도 디스크에 실제로 실제 데이터베이스 크기만큼의 여유 공간이 없으면 데이터베이스를 복원 할 수 없습니다. 복원하는 동안 로그 파일의 실제 크기는 실제 크기에서 느리게 내려갑니다. 그러나 여전히 좋은 해킹입니다. 감사.
chenwq

9

백업이 25GB이고 복원 된 데이터베이스가 100GB 인 이유는 트랜잭션 로그 때문 이 아니라고 생각합니다. 내 추측에 따르면 데이터베이스 파일에는 100GB의 할당 된 공간이 있고 데이터베이스에는 25GB의 실제 데이터가 있습니다.

할당 된 데이터베이스 파일 공간사용 된 데이터 공간 간에 차이가 있습니다 . 이 경우 전자는 100GB이고 후자는 25GB입니다.


1
클라이언트는 트랜잭션 로그에 75GB를 할당합니다. 복원 후 현재 로그 할당을 1GB로 변경합니다. 가능하면 드라이브의 여유 공간이 100GB 미만인 서버로이 데이터베이스를 복원하고 싶습니다. 다른 서버로 복원 할 필요없이 자르고 백업하고 다시 복원하십시오.
Adam Butler

@Adam Butler, 파일 크기를 축소 한 다음 복사본을 백업하고 대상 서버에서 복원 할 수 있도록 첫 번째 서버로 임시 복원 할 수 있습니까?
DForck42
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.