DBCC SHRINKFILE und SHRINKDATABASE-Befehle funktioniert möglicherweise nicht aufgrund eines sparsely aufgefüllten Text, Ntext oder Image-Spalten

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 324432 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Die Befehle DBCC SHRINKFILE und DBCC SHRINKDATABASE nicht Verschieben von Daten und die Dateigröße verringern, wenn der EstimatedPages -Wert den MinimumSize- Wert entspricht, der nach Abschluss des Befehls gemeldet wird. Aufgrund der Änderung Datenabfragen auf Tabellen mit Datentypen binary large Object (BLOB) ( Text , Ntext , Image ), es viele einheitliche Blöcke reserviert haben, die sparsely mit Daten (z. B. nur 1 von 8 Seiten, die die Block-Steuerelemente zugeordnet ist) gefüllt sind, bewirkt die DBCC SHRINKFILE und DBCC SHRINKDATABASE Befehle, um die Anzahl der EstimatedPages over-estimate und die Verkleinerungsvorgängen führen Sie die Befehle nicht möglich ist. In der Regel in Fällen, in denen dieses Verhalten aufgetreten ist, ist die Größe einer vollständigen Datenbanksicherung bis zu 8 Mal kleiner als die Größe der Dateien der Datenbank nach dem Ausführen einer DBCC SHRINKFILE für die Datenbankdateien.

Lösung

Wenn die betroffenen Tabellen nicht durchgängig online sein, während dieses Problem zu beheben, können Sie eine der folgenden Problemumgehungen verwenden, um dieses Problem zu beheben:
  • Verwenden Sie eine SELECT INTO-Anweisung, um die gesamte Tabelle in eine neue Tabelle in derselben Datenbank zu übertragen. Löschen der ursprünglichen Tabelle und führen Sie eine DBCC SHRINKFILE-Anweisung. Benennen Sie die neue Tabelle in der ursprünglichen Tabellennamen um.
  • Verwenden Sie eine SELECT INTO-Anweisung, um die gesamte Tabelle in eine neue Tabelle in einer anderen Datenbank zu übertragen. Kürzen Sie die ursprüngliche Tabelle, und führen Sie DBCC SHRINKFILE-Anweisung. Übertragen Sie die Daten wieder in der ursprünglichen Tabelle.
  • Verwenden Sie das Massenkopieren Kopie Programm, um die Tabelle im einheitlichen Modus zu kopieren, aus. Skript außerhalb der Tabelle, und legen Sie die vorhandene Tabelle. Führen Sie DBCC SHRINKFILE-Anweisung. Erstellen Sie eine neue Tabelle, und dann verwenden Sie das Massenkopierprogramm, um die Daten wieder in der Tabelle zu kopieren.
  • Verwenden Sie Data Transformation Services (DTS), um die gesamte Datenbank in eine neue Datenbank zu übertragen. SQL Server 7.0 Data Transformation Services möglicherweise nicht Text- und Image-Daten mehr übertragen, die richtig als 64 KB ist. Dieses Problem gilt nicht für die SQL Server 2000-Version von Data Transformation Services. Weitere Informationen finden Sie die Artikel der Microsoft Knowledge Base:
    257425Update: DTS-Objektübertragung keine BLOB größer als 64 Datenübertragung
    Sie können für Text- und Image-Spalten, die größer als 64 KB mit der folgenden Abfrage werden suchen:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    ist die Text und Image-Daten größer als 64 KB, die Übertragung kürzt die Daten und löst keiner Fehler außer in der DTS-Protokolldateien. Wenn Sie Text oder Image-Daten größer als 64 KB haben, verwenden Sie die Informationen in das dritte Aufzählungszeichen für die Tabellen, die Text- oder Image-Daten. Nächstes verwenden Sie DTS für den Rest der Elemente in der Datenbank.
Wenn die Datenbank muss online sein, oder die Größe der Datenbank zu groß ist für die Daten in einer externen Datei oder eine andere Datenbank verschieben, können Sie den Befehl DBCC SHRINKFILE mit der Option EMPTYFILE. Gehen Sie folgendermaßen vor um diese Problemumgehung zu verwenden,
  1. Wenn Sie Microsoft SQL Server 7.0 Service Pack 3 ausführen, aktivieren Sie Ablaufverfolgungsflags 1180 und 1197.
  2. Wenn Sie mit Microsoft SQL Server 7.0 Service Pack 3 7.00.987 oder höher, einschließlich Service Pack 4 erstellt haben, aktivieren Sie Ablaufverfolgung 1180 kennzeichnen.
  3. Wenn Sie die Datenbank über mehrere Dateien für Laufwerk Speicherplatzprobleme oder Leistungsgründen verteilt haben, 1 oder mehr zusätzliche Dateien in der Datenbank mithilfe des Befehls ALTER DATABASE mit einer Gesamtgröße vergleichbar mit der die Ergebnisse die folgende Abfrage erstellen.
    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
    Hinweis : die vorherige Abfrage verwendet die Tabelle, die durch die Abfrage in den Abschnitt "Weitere Informationen" dieses Artikels erstellt wird. Darüber hinaus werden die Datei Größe Summen nach Dateigruppe aufgeschlüsselt.

  4. Führen Sie eine DBCC SHRINKFILE-Abfrage, mit der Option EMPTYFILE als zweiten Parameter auf jede Datei, die spärlich Blob einheitliche Blöcke aufgefüllt hat.
  5. Sie können den Fortschritt des Befehls DBCC SRHINKFILE verfolgen, indem Sie eine oder mehrere Tabellen mit demselben Schema wie die Extentinfo -Tabelle aus dem Abschnitt "Weitere Informationen" dieses Artikels erstellen. Führen Sie dann "INSERT... EXEC- Import_extentinfo "Abfrage, die Daten an den neuen Tabellen füllen. Mit der folgende Abfrage können Sie Analysieren der Ergebnisse:
    select [file_id], 'page count'=sum(pg_alloc), 'min page'=min(page_id), 'max page'=max(page_id) from extentinfo group by [file_id]
    auch können Sie die folgende Abfrage zu verfolgen beim Ausführen des DBCC-EXTENTINFO-Befehls Wenn die Tabellen mit dem gleichen Muster Buchstaben beginnen und werden in der Nähe die Zeit wie der Befehl DBCC EXTENTINFO erstellt:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. Wenn die DBCC SHRINKFILE Abfrage abgeschlossen ist, führen Sie ein ALTER DATABASE-Abfrage, entfernen die alten Dateien aus der Datenbank.
  7. Sie können zusätzlichen Speicherplatz möglicherweise entfernen, indem Sie eine DBCC SHRINKFILE Abfrage ausführen, mit der Option TRUNCATEONLY auf die neuen Dateien, die in Schritt 3 erstellt wurden.
  8. Wenn Sie Microsoft SQL Server 7.0 ausführen, deaktivieren Sie Ablaufverfolgungsflags, die Sie in Schritt 1 oder 2 aktiviert.

Weitere Informationen

Sie können die folgende Transact-SQL-Abfrage über alle Abfragetool, wie Query Analyzer ausführen, wenn Sie als Benutzer angemeldet sind, die Sysadmin -Rechte besitzt. Sie führen die Transact-SQL-Abfrage auf SQL Server festzulegen, wenn der Befehl DBCC SHRINKDATABASE und der Befehl kann nicht für Dateien wegen sparsely verkleinern DBCC SHRINKFILE BLOB einheitliche Blöcke aufgefüllt.

Hinweis : Sie müssen die Zeichenfolge '< datenbankname >' auf den Namen des Problem Datenbank aktualisieren und setzen Sie den Namen in einfache Anführungszeichen.

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]
Wenn Ergebniszeilen aus der letzten Abfrage angezeigt wird, die Werte von 255 Index_id verfügen und die mögliche Umfang / tatsächliche Umfang Spalte ist kleiner als 75, diese Datenbank haben BLOB Blöcke sparsely aufgefüllt und kann die Größe im Abschnitt "Lösung" dieses Artikels beschriebenen Methoden reduziert werden.

Hinweis : Diese Abfrage stützt sich auf die Funktionalität der DBCC-EXTENTINFO Befehl. Verwenden Sie den DBCC-EXTENTINFO-Befehl außerhalb dieser Situation nicht, da die Funktionen möglicherweise ändern oder auch aus zukünftigen Versionen von Microsoft SQL Server entfernt werden.

Informationsquellen

Weitere Informationen finden Sie folgenden Artikel der Microsoft Knowledge Base:
272220Update: TEXT-IMAGE Data Storage Speicherplatz nicht korrekt freigegeben
308627Update: DBCC SHRINKDATABASE oder DBCC SHRINKFILE kann Datenbank mit Text- oder Bilddaten erweitern

Eigenschaften

Artikel-ID: 324432 - Geändert am: Freitag, 9. Dezember 2005 - Version: 5.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbmt kbprb KB324432 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 324432
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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