Você está offline; aguardando reconexão

Espaço que usa uma tabela não é liberado completamente depois que você usa uma instrução DELETE para excluir dados da tabela no SQL Server

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 913399
Bug #: 219514 (SQL Server 8.0)
Sintomas
Depois de usar uma instrução DELETE para excluir dados de uma tabela no Microsoft SQL Server, você pode perceber que o espaço que usa a tabela não é liberado completamente. Quando você tenta inserir dados no banco de dados, você receberá a seguinte mensagem de erro:
Não pôde alocar espaço para o objeto ' TableName ' no banco de dados ' DatabaseName ' porque o grupo de arquivos 'PRIMARY' está cheio.
Observação TableName representa o nome da tabela. DatabaseName representa o nome do banco de dados que contém a tabela.
Causa
Esse problema ocorre porque o SQL Server somente libera todas as páginas que uma tabela de heap usa quando as seguintes condições forem verdadeiras:
  • Ocorre uma exclusão nessa tabela.
  • Um bloqueio de nível de tabela está sendo mantido.
Observação Uma tabela de heap é qualquer tabela que não está associada com um índice de cluster.

Se páginas não são desalocadas, outros objetos no banco de dados não podem reutilizar as páginas.

No entanto, quando você ativar um nível de isolamento com base no controle de versão de linha em um banco de dados SQL Server 2005, páginas não podem ser liberadas mesmo se um bloqueio de nível de tabela está sendo mantido. Para obter mais informações sobre níveis de isolamento com base no controle de versão de linha, consulte o tópico "Níveis de isolamento de com base em versão de linha usando" nos manuais online do SQL Server 2005.
Como Contornar
Para contornar este problema, use um dos seguintes métodos:
  • Inclua uma dica TABLOCK na instrução DELETE se um nível de isolamento com base no controle de versão de linha não está habilitado. Por exemplo, utilizar uma instrução semelhante à seguinte:
    DELETE FROM <TableName> WITH (TABLOCK)
    Observação <TableName> representa o nome da tabela.
  • Use a instrução TRUNCATE TABLE se você deseja excluir todos os registros na tabela. Por exemplo, utilizar uma instrução semelhante à seguinte:
    TRUNCATE TABLE <TableName>
  • Criar um índice em cluster em uma coluna da tabela. Para obter mais informações sobre como criar um índice de cluster em uma tabela, consulte o tópico "Criando um índice agrupado" nos manuais online do SQL Server.
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 913399 - Última Revisão: 11/02/2007 09:50:43 - Revisão: 1.2

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 7.0 Standard Edition

  • kbmt kbexpertiseadvanced kbprb KB913399 KbMtpt
Comentários
om/trans_pixel.aspx">