DBCC CHECKTABLE (Transact-SQL)

Aktualisiert: 14. April 2006

Gibt Speicherplatz wieder frei, der von gelöschten Spalten mit variabler Länge in Tabellen oder indizierten Sichten belegt wurde.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

DBCC CLEANTABLE
(
    { database_name | database_id | 0 }
        , { table_name | table_id | view_name | view_id }
    [ , batch_size ]
)
[ WITH NO_INFOMSGS ]

Argumente

  • database_name | database_id | 0
    Die Datenbank, zu der die Tabelle gehört, für die ein Cleanup ausgeführt werden soll. Wird 0 angegeben, wird die aktuelle Datenbank verwendet. Datenbanknamen müssen den Regeln für Bezeichner entsprechen.
  • table_name | table_id | view_name | view_id
    Die Tabelle oder indizierte Sicht, für die ein Cleanup ausgeführt werden soll.
  • batch_size
    Die Anzahl der Zeilen, die pro Transaktion verarbeitet wird. Wird dieser Parameter nicht angegeben oder wird der Wert 0 angegeben, verarbeitet die Anweisung die gesamte Tabelle in einer Transaktion.
  • WITH NO_INFOMSGS
    Alle Informationsmeldungen werden unterdrückt.

Resultsets

DBCC CLEANTABLE gibt Folgendes zurück:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Hinweise

DBCC CLEANTABLE gibt Speicherplatz wieder frei, nachdem eine Spalte mit variabler Länge gelöscht wurde. Eine Spalte mit variabler Länge kann einen der folgenden Datentypen aufweisen: varchar, nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), text, ntext, image, sql_variant oder xml. Nach dem Löschen einer Spalte mit fester Länge wird jedoch kein Speicherplatz geschaffen.

Wenn die gelöschten Spalten innerhalb von Zeilen gespeichert waren, gibt DBCC CLEANTABLE Speicherplatz aus der IN_ROW_DATA-Zuordnungseinheit der Tabelle frei. Wenn die Spalten außerhalb von Zeilen gespeichert waren, wird Speicherplatz je nach dem Datentyp der gelöschten Spalte aus einer der Zuordnungseinheiten ROW_OVERFLOW_DATA oder LOB_DATA freigegeben. Wenn durch das Freigeben von Speicherplatz aus einer ROW_OVERFLOW_DATA- oder LOB_DATA-Seite eine leere Seite entsteht, wird diese durch DBCC CLEANTABLE entfernt. Weitere Informationen zu Zuordnungseinheiten und Datentypen finden Sie unter Tabellen- und Indexarchitektur.

DBCC CLEANTABLE wird als eine oder mehrere Transaktionen ausgeführt. Wenn keine Batchgröße angegeben wird, verarbeitet der Befehl die gesamte Tabelle in einer Transaktion, und die Tabelle wird während des Vorgangs exklusiv gesperrt. Für einige große Tabellen kann die Dauer einer einzigen Transaktion und der erforderliche Protokollspeicherplatz zu groß sein. Wenn eine Batchgröße angegeben wurde, wird der Befehl in einer Reihe von Transaktionen ausgeführt, wobei jede die angegebene Zeilenanzahl einschließt. DBCC CLEANTABLE kann nicht als eine Transaktion innerhalb einer anderen Transaktion ausgeführt werden.

Dieser Vorgang wird vollständig protokolliert.

Die Verwendung von DBCC CLEANTABLE für Systemtabellen oder temporäre Tabellen wird nicht unterstützt.

Bewährte Methoden

DBCC CLEANTABLE sollte nicht als routinemäßige Wartungsaufgabe ausgeführt werden. Verwenden Sie DBCC CLEANTABLE, wenn Sie wesentliche Änderungen an Spalten mit variabler Länge in einer Tabelle oder indizierten Sicht vorgenommen haben und den nicht verwendeten Speicherplatz sofort freigeben müssen. Wahlweise können Sie auch die Indizes für die Tabelle oder Sicht neu erstellen. Dies ist jedoch ein ressourcenintensiverer Vorgang.

Berechtigungen

Der Aufrufer muss der Besitzer der Tabelle bzw. der indizierten Sicht oder ein Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin sein.

Beispiele

A. Verwenden von DBCC CLEANTABLE zum Freigeben von Speicherplatz

Im folgenden Beispiel wird DBCC CLEANTABLE für die Production.Document-Tabelle in der AdventureWorks-Beispieldatenbank ausgeführt.

DBCC CLEANTABLE (AdventureWorks,"Production.Document", 0)
WITH NO_INFOMSGS;
GO

B. Verwenden von DBCC CLEANTABLE und Überprüfen der Ergebnisse

Im folgenden Beispiel wird eine Tabelle mit mehreren Spalten variabler Länge erstellt und aufgefüllt. Anschließend werden zwei Spalten gelöscht, und DBCC CLEANTABLE wird ausgeführt, um den nicht verwendeten Speicherplatz freizugeben. Es wird eine Abfrage ausgeführt, um die Werte für die Seitenanzahl und den verwendeten Speicherplatz vor und nach der Ausführung des DBCC CLEANTABLE-Befehls zu überprüfen.

USE AdventureWorks;
GO
IF OBJECT_ID ('dbo.CleanTableTest', 'U') IS NOT NULL
    DROP TABLE dbo.CleanTableTest;
GO
CREATE TABLE dbo.CleanTableTest
    (DocumentID int Not Null,
    FileName nvarchar(4000), 
    DocumentSummary nvarchar(max),
    Document varbinary(max)
    );
GO
-- Populate the table with data from the Production.Document table.
INSERT INTO dbo.CleanTableTest
    SELECT DocumentID,
           REPLICATE(FileName, 1000), 
           DocumentSummary, 
           Document
    FROM Production.Document;
GO
-- Verify the current page counts and average space used in the dbo.CleanTableTest table.
DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks');
SET @object_id = OBJECT_ID(N'AdventureWorks.dbo.CleanTableTest');
SELECT alloc_unit_type_desc, 
       page_count, 
       avg_page_space_used_in_percent, 
       record_count
FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'Detailed');
GO
-- Drop two variable-length columns from the table.
ALTER TABLE dbo.CleanTableTest
DROP COLUMN FileName, Document;
GO
-- Verify the page counts and average space used in the dbo.CleanTableTest table
-- Notice that the values have not changed.
DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks');
SET @object_id = OBJECT_ID(N'AdventureWorks.dbo.CleanTableTest');
SELECT alloc_unit_type_desc, 
       page_count, 
       avg_page_space_used_in_percent, 
       record_count
FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'Detailed');
GO
-- Run DBCC CLEANTABLE.
DBCC CLEANTABLE (AdventureWorks,"dbo.CleanTableTest");
GO
-- Verify the values in the dbo.CleanTableTest table after the DBCC CLEANTABLE command.
DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks');
SET @object_id = OBJECT_ID(N'AdventureWorks.dbo.CleanTableTest');
SELECT alloc_unit_type_desc, 
       page_count, 
       avg_page_space_used_in_percent, 
       record_count
FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'Detailed');
GO

Siehe auch

Verweis

DBCC (Transact-SQL)
sys.allocation_units (Transact-SQL)

Andere Ressourcen

Zeilenüberlauf bei Daten über 8 KB

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

14. April 2006

Neuer Inhalt:
  • Der Abschnitt mit bewährten Methoden wurde hinzugefügt.
  • Der Abschnitt mit Beispielen wurde hinzugefügt.
Aktualisierter Inhalt:
  • Es wurde erläutert, aus welcher Zuordnungseinheit der Speicherplatz freigegeben wird und dass ROW_OVERFLOW- und LOB_DATA-Seiten durch diesen Befehl entfernt werden.