Spazio che utilizza una tabella non viene rilasciato completamente dopo aver utilizzato un'istruzione DELETE per eliminare i dati dalla tabella in SQL Server

Traduzione articoli Traduzione articoli
Identificativo articolo: 913399 - Visualizza i prodotti a cui si riferisce l?articolo.
Bug #: 219514 (SQL Server 8.0)
Espandi tutto | Chiudi tutto

Sintomi

Dopo aver utilizzato un'istruzione DELETE in Microsoft SQL Server per eliminare dati da una tabella, è possibile notare che lo spazio che utilizza la tabella non viene rilasciato completamente. Quando si tenta di inserire dati nel database, viene potrebbe essere visualizzato il seguente messaggio di errore:
Impossibile allocare spazio per l'oggetto "TableName" nel database ' DatabaseName ' perché il filegroup 'PRIMARY' è pieno.
Nota TableName rappresenta il nome della tabella. DatabaseName rappresenta il nome del database che contiene la tabella.

Cause

Questo problema si verifica perché SQL Server rilascia solo le pagine una tabella heap utilizza le seguenti condizioni sono vere:
  • Si verifica un'eliminazione in questa tabella.
  • È correntemente un blocco a livello di tabella.
Nota Una tabella heap è qualsiasi tabella che non è associato un indice cluster.

Se le pagine non vengono deallocate, gli altri oggetti del database non è possibile riutilizzare le pagine.

Tuttavia, quando si attiva un livello di isolamento basato sul controllo delle versioni riga in un database di SQL Server 2005, le pagine Impossibile rilasciare anche se è correntemente un blocco a livello di tabella. Per ulteriori informazioni sui livelli di isolamento basato sul controllo delle versioni di riga, vedere l'argomento di "Livelli di isolamento basato sul controllo delle versioni mediante riga" nella documentazione in linea di SQL Server 2005.

Workaround

Per ovviare al problema, utilizzare uno dei metodi descritti di seguito:
  • Includere un hint TABLOCK nell'istruzione DELETE se non è abilitato un livello di isolamento basato sul controllo delle versioni di riga. Ad esempio, utilizzare un'istruzione simile al seguente:
    DELETE FROM <TableName> WITH (TABLOCK)
    Nota <TableName> rappresenta il nome della tabella.
  • Se si desidera eliminare tutti i record nella tabella, utilizzare l'istruzione TRUNCATE TABLE. Ad esempio, utilizzare un'istruzione simile al seguente:
    TRUNCATE TABLE <TableName>
  • Creare un indice cluster in una colonna della tabella. Per ulteriori informazioni su come creare un indice cluster in una tabella, vedere "Creazione di un indice cluster" nella documentazione in linea di SQL Server.

Status

Microsoft ha confermato che questo problema riguarda i prodotti sono elencati nella sezione "Si applica a".

Proprietà

Identificativo articolo: 913399 - Ultima modifica: venerdì 2 novembre 2007 - Revisione: 1.2
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbexpertiseadvanced kbprb KB913399 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 913399
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com