DELETE 문을 사용하여 테이블의 데이터를 삭제한 후 테이블이 사용하는 공간이 완전히 해제되지는 SQL Server
이 문서는 DELETE 문을 사용하여 테이블에서 모든 데이터를 삭제한 후 테이블에서 사용하는 문제를 해제할 수 없는 문제를 해결하는 데 도움이 됩니다.
원래 제품 버전: SQL Server
원래 KB 번호: 913399
증상
Microsoft SQL Server DELETE 문을 사용하여 테이블에서 데이터를 삭제한 후에는 테이블에서 사용하는 공간이 완전히 해제되지 않은 것을 알 수 있습니다. 그런 다음 데이터베이스에 데이터를 삽입하려고 하면 다음 오류 메시지가 표시될 수 있습니다.
'PRIMARY' 파일 그룹이 가득 찼기 때문에 데이터베이스 'DatabaseName'의 개체 'TableName'에 대한 공간을 할당할 수 없습니다.
참고
TableName 은 테이블의 이름을 나타냅니다. DatabaseName 은 테이블을 포함하는 데이터베이스의 이름을 나타냅니다.
원인
이 문제는 SQL Server 다음 조건이 충족될 때 힙 테이블에서 사용하는 모든 페이지만 해제하기 때문에 발생합니다.
- 이 테이블의 삭제가 발생합니다.
- 테이블 수준 잠금이 유지되고 있습니다.
참고
힙 테이블은 클러스터형 인덱스와 연결되지 않은 테이블입니다.
페이지를 할당 취소하지 않으면 데이터베이스의 다른 개체에서 페이지를 다시 사용할 수 없습니다.
그러나 SQL Server 데이터베이스에서 행 versioning-based
격리 수준을 사용하도록 설정하면 테이블 수준 잠금이 유지되더라도 페이지를 해제할 수 없습니다. 행 versioning-based
격리 수준에 대한 자세한 내용은 SQL Server 데이터베이스 엔진의 격리 수준을 참조하세요.
해결 방법
이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.
행 버전 관리 기반 격리 수준을 사용하도록 설정하지 않은 경우 DELETE 문에 TABLOCK 힌트를 포함합니다. 예를 들어 다음과 유사한 문을 사용합니다.
DELETE FROM <TableName> WITH (TABLOCK)
참고
<TableName> 은 테이블의 이름을 나타냅니다.
테이블의 모든 레코드를 삭제하려면 TRUNCATE TABLE 문을 사용합니다. 예를 들어 다음과 유사한 문을 사용합니다.
TRUNCATE TABLE <TableName>
테이블의 열에 클러스터형 인덱스 만들기 테이블에서 클러스터형 인덱스를 만드는 방법에 대한 자세한 내용은 클러스터형 인덱스 만들기를 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기