I comandi DBCC SHRINKFILE e SHRINKDATABASE potrebbero non funzionare a causa di testo scarsamente compilato, ntext o colonne di tipo image

Traduzione articoli Traduzione articoli
Identificativo articolo: 324432 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sintomi

I comandi DBCC SHRINKFILE e DBCC SHRINKDATABASE non spostare i dati e ridurre le dimensioni di file se il valore di EstimatedPages Ŕ uguale a quello MinimumSize del viene segnalato quando viene completato il comando. A causa delle query di modifica di dati su tabelle con i tipi di dati oggetto binario di grandi dimensioni (BLOB) ( testo , ntext , immagine ), Ŕ possibile per molti degli extent uniformi allocati scarsamente vengono popolati con dati (ad esempio, solo 1 di 8 pagine in cui i controlli di extent Ŕ allocato), che determinerÓ il DBCC SHRINKFILE e l'istruzione DBCC SHRINKDATABASE comandi per over-estimate il numero di EstimatedPages e i comandi non eseguono le operazioni di compattazione. In casi in cui si verifica questo problema, in genere, la dimensione di un backup completo del database Ŕ fino a 8 volte inferiore le dimensioni dei file del database dopo aver eseguito un DBCC SHRINKFILE per i file database.

Risoluzione

Se le tabelle interessate non sono necessario essere continuamente in linea mentre Ŕ correggere questa situazione, Ŕ possibile utilizzare uno dei metodi descritti di seguito per risolvere il problema:
  • Utilizzare un'istruzione SELECT INTO per trasferire l'intera tabella in una nuova tabella nello stesso database. Eliminare la tabella originale e quindi eseguire un'istruzione DBCC SHRINKFILE. Rinominare la nuova tabella con il nome della tabella originale.
  • Utilizzare un'istruzione SELECT INTO per trasferire l'intera tabella in una nuova tabella in un database diverso. Troncamento della tabella originale e quindi eseguire un'istruzione DBCC SHRINKFILE. Trasferire i dati della tabella originale.
  • Utilizzare il programma di copia di massa per copiare la tabella in modalitÓ nativa. Script della tabella e quindi eliminare la tabella esistente. Consente di eseguire un'istruzione DBCC SHRINKFILE. Creare una nuova tabella e quindi utilizzare il programma di copia di massa per copiare i dati alla tabella.
  • Utilizzare Data Transformation Services (DTS) per trasferire l'intero database in un nuovo database. Servizi trasformazione dati di SQL Server 7.0 non vengano trasferite text e image dati pi¨ a 64 KB correttamente. Questo problema non si applica alla versione di DTS in SQL Server 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    257425FIX: DTS Object Transfer non trasferisce dati BLOB maggiore di 64
    ╚ possibile cercare colonne text e image maggiori di 64 KB, con la seguente query:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    se i dati text e image sono maggiori di 64 KB, il trasferimento tronca i dati e non viene generato un errore con la differenza in DTS il file di registro. Se si dispone di dati text o image maggiore di 64 KB, Ŕ possibile utilizzare le informazioni nell'elemento del terzo punto elenco per le tabelle contenenti dati di tipo text o image. Successivamente, utilizzare DTS per il resto degli elementi del database.
Se il database deve essere in linea o la dimensione del database Ŕ troppo grande per spostare i dati in un file esterno o in un altro database, Ŕ possibile utilizzare il comando DBCC SHRINKFILE con l'opzione EMPTYFILE. Per utilizzare questa soluzione, attenersi alla seguente procedura:
  1. Se si esegue SQL Server 7.0 Service Pack 3, attivare il flag di traccia 1180 e 1197.
  2. Se si esegue Microsoft SQL Server 7.0 Service Pack 3 genera 7.00.987 o versione successiva, inclusi Service Pack 4, attivare la traccia flag 1180.
  3. Se si Ŕ diffusi nel database in file diversi per i problemi di spazio su unitÓ o per motivi di prestazioni, creare 1 o pi¨ altri file del database utilizzando il comando ALTER DATABASE con una dimensione totale paragonabile ai risultati della query seguente.
    select 'size in MB'=ceiling(sum(ei.pg_alloc)/128.000), sfg.groupname
    from extentinfo ei inner join sysfiles sf on ei.[file_id] = sf.fileid and ei.[file_id] != 1
     inner join sysfilegroups sfg on sf.groupid = sfg.groupid
    group by sfg.groupname
    Nota : la query precedente utilizza la tabella creata per la query nella sezione "Informazioni" di questo articolo. Inoltre, i totali di dimensioni del file sono suddivisi per filegroup.

  4. Consente di eseguire una query di DBCC SHRINKFILE con l'opzione EMPTYFILE come secondo parametro su ciascun file che scarsamente Ŕ popolato extent uniforme del blob.
  5. Tramite la creazione di uno o pi¨ tabelle con lo stesso schema della tabella extentinfo dalla sezione "Informazioni" di questo articolo di Ŕ possibile monitorare l'avanzamento del comando DBCC SRHINKFILE . Quindi eseguire "INSERT.. EXEC import_extentinfo "query per popolare i dati per le nuove tabelle. Utilizzare la seguente query per analizzare i risultati:
    select [file_id], 'page count'=sum(pg_alloc), 'min page'=min(page_id), 'max page'=max(page_id) from extentinfo group by [file_id]
    inoltre, Ŕ possibile utilizzare la seguente query per tenere traccia di quando il comando di EXTENTINFO DBCC Ŕ stato eseguito se le tabelle iniziano con lo stesso modello di lettere e vengono create in concomitanza del comando DBCC EXTENTINFO:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. Quando la query DBCC SHRINKFILE viene completata, eseguire ALTER in una query DATABASE per rimuovere i vecchi file dal database.
  7. ╚ eventualmente possibile rimuovere spazio aggiuntivo, eseguendo una query di DBCC SHRINKFILE con l'opzione TRUNCATEONLY i nuovi file creati nel passaggio 3.
  8. Se si esegue Microsoft SQL Server 7.0, disattivare il flag di traccia che Ŕ attivato nel passaggio 1 o 2.

Informazioni

╚ possibile eseguire la query Transact-SQL seguente da qualsiasi strumento di query, ad esempio Query Analyzer, se si Ŕ connessi come utente che dispone dei diritti di sysadmin . Eseguire la query Transact-SQL in SQL Server per determinare se il comando DBCC SHRINKDATABASE e il comando Impossibile compattare il file a causa di scarsamente DBCC SHRINKFILE popolato extent uniforme del BLOB.

Nota : ╚ necessario aggiornare la stringa "< nome database >" al nome del database problema e racchiuderlo tra virgolette singole.

use pubs
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 8
begin 
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10)
   )
end
go
if convert(int,substring(convert(binary(4), @@microsoftversion),1,1)) = 7
begin
   create table extentinfo 
   (
   [file_id] smallint,
   page_id int,
   pg_alloc int,
   ext_size tinyint,
   obj_id int,
   index_id tinyint,
   pfs_bytes varbinary(10),
   avg_used tinyint
   )
end
go
create procedure import_extentinfo as
dbcc extentinfo('<database name>')
go
insert extentinfo exec import_extentinfo
go

select [file_id],obj_id, index_id, ext_size, 'actual extent count'=count(*), 'actual page count'=sum(pg_alloc),
 'possible extent count'=ceiling(sum(pg_alloc)*1.0/ext_size),
 'possible extents / actual extents' = (ceiling(sum(pg_alloc)*1.00/ext_size)*100.00) / count(*)
 from extentinfo where ext_size != 1 and index_id = 255
 group by [file_id],obj_id, index_id, ext_size
 having count(*)-ceiling(sum(pg_alloc)*1.0/ext_size) > 0
 order by obj_id, index_id, [file_id]
Se le righe di risultato dall'ultima query che presentano valori index_id 255 e extent possibile / effettivo extent colonna Ŕ inferiore a 75, il database Ŕ scarsamente compilato l'extent BLOB e i metodi descritti nella sezione "Risoluzione" di questo articolo Ŕ ridurre le dimensioni.

Nota : questa query si basa su funzionalitÓ di EXTENTINFO il DBCC comando. Non utilizzare il comando DBCC EXTENTINFO all'esterno di questa situazione poichÚ la funzionalitÓ potrebbe cambiare oppure rimuovere anche delle future versioni di Microsoft SQL Server.

Riferimenti

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:
272220FIX: Spazio di memorizzazione dei dati TEXT/IMAGE non recuperato correttamente
308627FIX: DBCC SHRINKDATABASE o DBCC SHRINKFILE potrebbe Espandi Database con il testo o dati di immagine

ProprietÓ

Identificativo articolo: 324432 - Ultima modifica: venerdý 9 dicembre 2005 - Revisione: 5.1
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Chiavi:á
kbmt kbprb KB324432 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: 324432
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