DBCC CLEANTABLE (Transact-SQL)

Ta przestrzeń z porzuconych kolumn o zmiennej długości w tabele lub widoki indeksowane.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • database_name| database_id | 0
    Jest baza danych, do której należy tabela czyszczenia.Jeśli określono wartość 0, używana jest bieżąca baza danych.Nazwy bazy danych musi przestrzegać reguł dla identyfikatorów.

  • table_name| table_id | view_name| view_id
    Jest tabela lub indeksowany widok do czyszczenia.

  • batch_size
    Jest to liczba wierszy przetworzonych na transakcję.Jeśli nie określono lub określono wartość 0, instrukcja przetwarzania całej tabela w jedną transakcję.

  • Z NO_INFOMSGS
    Pomija wszystkie komunikaty informacyjne.

Uwagi

DBCC CLEANTABLE ta miejsce po upuszczeniu o zmiennej długości kolumna .O zmiennej długości kolumna może mieć jedną z następujących typów danych: varchar, nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), text, ntext, image, sql_variant, and xml.Polecenie nie odzyskać miejsce na, po przerwaniu o stałej długości kolumna .

Jeśli kolumny porzuconych były przechowywane w wierszu, DBCC CLEANTABLE ta miejsca z IN_ROW_DATA jednostka alokacji tabela.Jeśli kolumny były przechowywane poza wiersz, miejsca jest odzyskane z ROW_OVERFLOW_DATA lub LOB_DATA jednostka alokacji w zależności od typu danych porzuconych kolumna.Jeśli odzyskiwanie miejsca z ROW_OVERFLOW_DATA lub LOB_DATA strona wyniki puste strona, DBCC CLEANTABLE usuwa strona.Aby uzyskać więcej informacji na temat jednostek alokacji i typy danych, zobacz Tabele i architektura struktur danych indeksu.

DBCC CLEANTABLE działa jako jednej lub więcej transakcji.Jeżeli nie określono rozmiaru partia , polecenie przetwarza całej tabela w jedną transakcję i tabela jest zablokowana podczas operacji.Dla niektórych dużych tabel długości jednej transakcji i wymaganego miejsca w dzienniku może być zbyt dużo.Jeśli rozmiar partia jest określona, polecenie jest uruchamiane w serii transakcji, każdy, łącznie z określoną liczbę wierszy.DBCC CLEANTABLE nie można uruchomić jako transakcja wewnątrz innej transakcji.

Ta operacja jest całkowicie rejestrowane.

DBCC CLEANTABLE nie jest obsługiwana do użytku w tabele systemowe lub tabel tymczasowych.

Najważniejsze wskazówki

DBCC CLEANTABLE nie powinny być zrealizowane jako zadań rutynowych czynności konserwacyjnych.Zamiast tego należy użyć DBCC CLEANTABLE po wprowadzeniem znaczących zmian o zmiennej długości kolumny w tabela lub indeksowany widok i konieczne jest natychmiastowe odzyskanie nieużywane miejsce.Alternatywnie można odbudować indeksów w tabela lub widoku; Spowoduje to tak jest jednak więcej zasób-obciążającym.

Zestawy wyników

DBCC CLEANTABLE zwraca:

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

Uprawnienia

Obiekt wywołujący musi własnej tabela lub indeksowany widoklub element członkowski sysadmin stała rola serwera db_owner stałej rola bazy danychlub db_ddladmin stałej rola bazy danych.

Przykłady

A.Aby odzyskać miejsce przy użyciu DBCC CLEANTABLE

Poniższy przykład wykonuje DBCC CLEANTABLE dla Production.Document tabela w AdventureWorks2008R2 przykładowej bazy danych.

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

B.Za pomocą DBCC CLEANTABLE i sprawdzanie wyniki

Poniższy przykład tworzy i wypełnia tabela z kilku kolumn o zmiennej długości.Dwóch kolumn, następnie spadły i uruchomieniu DBCC CLEANTABLE odzyskać niewykorzystany obszar.Aby zweryfikować zlicza strona i miejsce używane wartości przed i po wykonaniu polecenia CLEANTABLE DBCC wykonywania kwerendy.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.CleanTableTest', 'U') IS NOT NULL
    DROP TABLE dbo.CleanTableTest;
GO
CREATE TABLE dbo.CleanTableTest
    (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 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'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.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'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.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 (AdventureWorks2008R2,"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'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.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