DELETE 문을 사용하여 테이블에서 데이터를 삭제한 후에 테이블에서 사용하는 공간이 완전히 SQL Server

이 문서에서는 DELETE 문을 사용하여 테이블의 모든 데이터를 삭제한 후에 테이블을 릴리스할 수 없는 문제를 해결합니다.

원래 제품 버전:   SQL Server
원래 KB 번호:   913399

증상

테이블에서 DELETE 문을 Microsoft SQL Server 테이블에서 데이터를 삭제하면 테이블에서 사용하는 공간이 완전히 릴리스되지 않을 수 있습니다. 그런 다음 데이터베이스에 데이터를 삽입하려고 할 때 다음 오류 메시지가 표시될 수 있습니다.

'PRIMARY' 파일 풀이 full이기 때문에 'DatabaseName' 데이터베이스에서 'TableName' 개체에 대한 공간을 할당할 수 없습니다.

참고

TableName은 테이블의 이름을 나타내며, DatabaseName은 테이블이 포함된 데이터베이스의 이름을 나타내며,

원인

이 문제는 다음 SQL Server 힙 테이블에서 사용하는 모든 페이지만 해제하기 때문에 발생합니다.

  • 이 테이블이 지어지기만 하면 됩니다.
  • 테이블 수준 잠금이 진행 중입니다.

참고

힙 테이블은 클러스터링된 인덱스와 연결되지 않은 테이블입니다.

페이지가 대리되지 않은 경우 데이터베이스의 다른 개체는 페이지를 다시 사용할 수 없습니다.

그러나 SQL Server 2005 데이터베이스에서 행을 해제할 경우 테이블 수준 잠금이 유지되어도 페이지를 해제할 수 versioning-based 없습니다. 행 수준에 대한 자세한 내용은 2005 온라인에서 "행 버전 기반의 고리 수준 사용" SQL Server versioning-based 참조하세요.

해결 방법

이 문제를 해결하려면 다음 방법 중 하나를 사용 합니다.

  • 행 버전 기반의 차단 수준을 사용할 수 없는 경우 DELETE 문에 TABLOCK 힌트를 포함합니다. 예를 들어 다음과 비슷한 문을 사용할 수 있습니다.

    DELETE FROM <TableName> WITH (TABLOCK)
    

    참고

    <TableName> 테이블의 이름을 나타내는 경우

  • 테이블의 모든 레코드를 삭제하려면 TRUNCATE TABLE 문을 사용하십시오. 예를 들어 다음과 비슷한 문을 사용할 수 있습니다.

    TRUNCATE TABLE <TableName>
    
  • 테이블의 열에 클러스터링된 인덱스를 만들 수 있습니다. 테이블에 클러스터링된 인덱스를 만드는 방법에 대한 자세한 내용은 온라인 책의 "클러스터링된 인덱스 만들기" SQL Server 참조하십시오.