2009-06-18 5 views
0

SQL Server 2005 데이터베이스에서 큰 2 진수 열을 삭제하고 결과 .mdf 및 .ldf 파일의 크기를 최소화하는 가장 좋은 방법은 무엇입니까?SQL Server 2005에서 많은 양의 데이터 삭제

Google의 앱은 사용자가 자신의 문서를 업로드하는 데 사용됩니다. 이들은 documents 테이블의 열에 BLOB로 저장되었습니다. 시간이 지남에 따라이 테이블은 전체 데이터베이스 크기의 90 % 이상으로 커졌습니다.

변경된 사항이 있으므로 더 이상 문서를 저장할 필요가 없습니다. 이제이 열의 데이터를 0으로 만들고 데이터베이스를 관리 가능한 크기로 되돌리고 싶습니다 (디스크 공간은 약간의 프리미엄이 있습니다). 기존 앱이므로 호환성을 유지하고 테이블의 구조를 변경하지 않으려합니다.

가장 확실한 방법은 같은 것을 할 수 있습니다 :

update documents set content = 0x0

을하지만 엄청난 양만큼 .LDF을 불어 것으로 보인다.

하는 특정 증상을 주소, 나는 그 로그 (backup log mydb with truncate_only)을 절단하거나 또는 아마도 dbcc shrinkdatabase(mydb) 또는 dbcc shrinkfile(mydb_log, 20)을 시도하지만 난이 등 불쾌한 분열을 일으킬 수 있고, 장기적으로 최선을하지 않을 수 있습니다 들었습니다 수 있습니다.

내용이 모두 인 열을 제외하고 두 번째 테이블을 만들고 데이터를 복사 한 다음 truncate 첫 번째 테이블을 만드는 것이 더 좋습니까?

의견을 보내 주시면 감사하겠습니다.

건배

답변

0

예, 당신의 아이디어가 처음 마이너스 컨텐츠 열이 다음 원래 테이블은 아마 가장 효율적인 것 절단에서 두 번째 테이블을 만듭니다. 열을 삭제

2

시도는 :

실험에서
ALTER TABLE foo 
DROP COLUMN foo.name 
+1

다른 곳이 필요하면 로그 – jle

+0

을 자르고 (null이있는) 열을 다시 만드십시오. – pkmiec

0

이에 마법의 탄환있을 것 같지 않습니다.

두 제안 사항을 모두 사용하면 .ldf 크기가 크게 증가하지 않고 큰 내용을 삭제할 수 있습니다. 그러나 나중에 .mdf 크기를 줄이는 유일한 방법은 페이지 조각화를 초래하는 dbcc shrinkdatabase와 같습니다 .

관련 문제