Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
A táblák vagy indexelt nézetek eldobott változóhosszú oszlopaiból térközt foglal vissza.
Transact-SQL szintaxis konvenciói
Szintaxis
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
Érvek
| database_namedatabase_id | 0
Az adatbázis, amelyben a tisztítandó tábla található. Ha 0 van megadva, a rendszer az aktuális adatbázist használja. Az adatbázisneveknek követnie kell azonosítókszabályait.
table_name | table_id | view_name | view_id
A tisztítandó táblázat vagy indexelt nézet.
batch_size
A tranzakciónként feldolgozott sorok száma. Ha nincs megadva, az alapértelmezett érték 1000.
A hosszú helyreállítási időszak elkerülése érdekében a 0 értéke nem támogatott és nem ajánlott.
A NO_INFOMSGS
Letiltja az összes tájékoztató üzenetet.
Megjegyzések
DBCC CLEANTABLE egy változó hosszúságú oszlop elvetés után térközt ad vissza. A változó hosszúságú oszlop a következő adattípusok egyike lehet: varchar, nvarchar, varchar(max), nvarchar(max), , varbinary(max), szöveg, ntext, kép, sql_variantés xml. A parancs nem foglal vissza szóközt egy rögzített hosszúságú oszlop elvetése után.
Ha az elvetett oszlopokat sorba helyezték, DBCC CLEANTABLE a tábla IN_ROW_DATA foglalási egységéből visszanyeri a helyet. Ha az oszlopokat soron kívül tárolták, akkor a rendszer az eldobott oszlop adattípusától függően a ROW_OVERFLOW_DATA vagy a LOB_DATA foglalási egységből tér vissza. Ha egy ROW_OVERFLOW_DATA vagy LOB_DATA lapról való visszavétel üres lapot eredményez, DBCC CLEANTABLE eltávolítja a lapot.
DBCC CLEANTABLE egy vagy több tranzakcióként fut. Ha nincs megadva kötegméret, az alapértelmezett méret 1000. Egyes nagy táblák esetében az egyetlen tranzakció hossza és a szükséges naplóterület túl sok lehet. Ha a kötegméret meg van adva, a parancs tranzakciók sorozatában fut, beleértve a megadott számú sort is.
DBCC CLEANTABLE nem futtatható tranzakcióként egy másik tranzakción belül.
Ez a művelet teljes mértékben naplózva van.
DBCC CLEANTABLE nem támogatott rendszertáblákon, ideiglenes táblákon vagy egy tábla memóriaoptimalizált oszlopcentrikus indexrészén.
Ajánlott eljárások
DBCC CLEANTABLE nem szabad rutin karbantartási feladatként végrehajtani. Ehelyett használja a DBCC CLEANTABLE, miután jelentős módosításokat végzett a változó hosszúságú oszlopokon egy táblázatban vagy indexelt nézetben, és azonnal vissza kell vennie a nem használt területet. Másik lehetőségként újraépítheti az indexeket a táblában vagy a nézetben; ez azonban erőforrás-igényesebb művelet.
Eredményhalmaz
DBCC CLEANTABLE a következőt adja vissza:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Engedélyek
A hívónak rendelkeznie kell a táblával vagy az indexelt nézetpel, vagy tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, a db_owner rögzített adatbázis-szerepkörnek vagy a db_ddladmin rögzített adatbázis-szerepkörnek.
Példák
Egy. Terület felszabadításához használja a DBCC CLEANTABLE-t
Az alábbi példa a DBCC CLEANTABLE mintaadatbázis Production.Document táblájának AdventureWorks2025 hajtja végre.
DBCC CLEANTABLE (AdventureWorks2022, 'Production.Document', 1000)
WITH NO_INFOMSGS;
GO
B. A DBCC CLEANTABLE használata és az eredmények ellenőrzése
Az alábbi példa több változó hosszúságú oszlopot tartalmazó táblát hoz létre és tölt fel. Ezután a rendszer elvet két oszlopot, és DBCC CLEANTABLE fut a fel nem használt terület visszaszerzéséhez. A rendszer lekérdezést futtat az oldalszám és a felhasznált terület ellenőrzéséhez a DBCC CLEANTABLE parancs végrehajtása előtt és után.
USE AdventureWorks2022;
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'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.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'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.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 (AdventureWorks2022, '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'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.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