Příkazy DBCC SHRINKFILE a SHRINKDATABASE nefunguje z důvodu osídlených text, ntext a sloupců s obrázky

Překlady článku Překlady článku
ID článku: 324432 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Bude DBCC SHRINKFILE a DBCC SHRINKDATABASE příkazy nelze přesunout data a zmenšit velikost souboru, pokud EstimatedPages hodnota se rovná Minimální velikost MinimumSize hodnota, která se vykazuje při dokončení příkazu. Z důvodu dotazy na data změny na tabulkách s typy dat binary large object (BLOB) (text, ntext, Obrázek), je možné mít mnoho jednotné oblasti přiřazené, které jsou sparsely naplněny daty (například pouze 1 8 stránky, které rozsah kontrol je přidělena), což způsobí DBCC SHRINKFILE a Over-estimate počet příkazů DBCC SHRINKDATABASE EstimatedPages, a příkazy provádět operace zmenšení. Obvykle v případech, kdy je toto chování zkušenosti, plná velikost zálohování databáze je až 8 x menší než soubory o velikosti databáze po spuštění DBCC SHRINKFILE u databázových souborů.

Řešení

Pokud příslušné tabulky nemusí mít neustále online, zatímco jste tuto situaci napravit, můžete použít některý z následujících Zástupná řešení tohoto problému:
  • Použití příkazu SELECT INTO přenos celé tabulky nové tabulky ve stejné databázi. Odstranit původní tabulku a potom spusťte DBCC Prohlášení SHRINKFILE. Novou tabulku přejmenovat původní tabulky název.
  • Použití příkazu SELECT INTO přenos celé tabulky nové tabulky v jiné databázi. Vymazat data z původní tabulky a potom spusťte prohlášení DBCC SHRINKFILE. Zpět na původní přenosu dat Tabulka.
  • Pomocí programu kopie hromadného kopírování tabulky ven v nativním režimu režim. Skript mimo tabulku a pak přetáhněte existující tabulky. Spustit DBCC Prohlášení SHRINKFILE. Vytvořit novou tabulku a pak použít program hromadné kopírování Zkopírujte data zpět do tabulky.
  • Použití Data Transformation Services (DTS) k přenosu celá databáze do nové databáze. SQL Server 7.0 Data Transformation Services není přenos textu a obrazu data delší než 64 KB správně. To problém se nevztahuje na verzi serveru SQL Server 2000 transformace dat Služby.Další informace článku znalostní báze Microsoft Knowledge Base:
    257425 Oprava: Převod objektu DTS přenést Data BLOB je větší než 64
    Můžete vyhledat text a obraz sloupce, které jsou větší než 64 KB s následujícím dotazem:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    Pokud je větší než 64 KB, přenos dat text a obrázek zkrátí data a nevyvolává jakékoli chyby, s výjimkou v DTS soubory protokolu. Pokud text nebo obrázek dat, které jsou větší než 64 KB, použijte informace v Položka tabulek, které obsahují text nebo obrázek dat třetí odrážky. Pomocí DTS pro ostatní položky v databázi.
Pokud je velikost databáze nebo databázi, musí být online můžete přesunout data do externího souboru nebo jiné databáze příliš velké, pomocí příkazu DBCC SHRINKFILE s parametrem EMPTYFILE. Použití této práce kolem postupujte takto:
  1. Používáte-li Microsoft SQL Server 7.0 Service Pack 3 zapnete trasování příznaky 1180 a 1197.
  2. Pokud jste systém Microsoft SQL Server 7.0 Service Pack 3 sestavení 7.00.987 nebo novější, včetně aktualizací Service Pack 4, zapněte příznak trasování 1180.
  3. Pokud jste do několika souborů pro rozložení databáze problémy s místem na disku nebo z důvodů výkonu vytvořit 1 nebo více dalších soubory v databázi pomocí příkazu ALTER DATABASE s celkovou velikost srovnatelné výsledky následující dotaz.
    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
    POZNÁMKA:: Dotaz používá tabulku, která je vytvořena pomocí dotazu v tomto článku v části "Další informace". Navíc velikost souboru jsou součty rozepsány podle skupiny souborů.

  4. Spuštění dotazu DBCC SHRINKFILE s parametrem EMPTYFILE jako druhý parametr, klepněte na každý soubor, který byl naplněn sparsely jednotné blob rozsahy.
  5. Můžete sledovat průběh DBCC SRHINKFILE příkaz vytvořením jedné nebo více tabulek pomocí stejné schéma jako na extentinfo Tabulka v části "Další informace" tohoto článku. Potom spustit "VLOŽTE.. EXEC import_extentinfo"dotaz k načtení dat do nové tabulky. Použijte následující dotaz k analýze výsledků:
    select [file_id], 'page count'=sum(pg_alloc), 'min page'=min(page_id), 'max page'=max(page_id) from extentinfo group by [file_id]
    Navíc můžete použít ke sledování při následující dotaz Spuštění příkazu DBCC EXTENTINFO tabulek začínají stejný vzorek písmena a jsou vytvořeny poblíž čas jako příkazu DBCC EXTENTINFO:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. Po dokončení DBCC SHRINKFILE dotaz spusťte ALTER DATABÁZOVÝ dotaz odstranit staré soubory z databáze.
  7. Případně můžete odebrat další místo spuštěním DBCC SHRINKFILE dotaz s parametrem TRUNCATEONLY na nové soubory, které byly vytvořený v kroku 3.
  8. Používáte-li Microsoft SQL Server 7.0, vypněte trasování příznaky zapnuli jste v kroku 1 nebo 2.

Další informace

Následující dotaz jazyka Transact-SQL lze spustit z libovolný dotaz nástroje, jako je například Query Analyzer, pokud jste přihlášeni jako uživatel, který má sysadmin práva. Spuštění dotazu jazyka Transact-SQL na serveru SQL Server k určení Pokud nelze příkazu DBCC SHRINKDATABASE a příkazu DBCC SHRINKFILE Zmenšení souborů z důvodu osídlených BLOB jednotné rozsahů.

POZNÁMKA:: Řetězec "<database name="">" je nutné aktualizovat název problém databáze a uzavřete název do jedné nabídky značky.</database>

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]
Pokud se zobrazí řádky výsledek z posledního dotazu, které jsou index_id hodnoty 255 a možné míře / skutečný rozsah sloupec je menší než 75, tato databáze neobsahuje sparsely naplněny BLOB rozsahy a lze snížit velikost podle metod popsaných v v části "Řešení" tohoto článku.

POZNÁMKA:: Využívá funkce DBCC EXTENTINFO tento dotaz příkaz. Nepoužívejte příkazu DBCC EXTENTINFO mimo tuto situaci, protože funkce může změnit nebo dokonce odstraněny z budoucí verze Microsoft SQL Server.

Odkazy

Další informace získáte článek znalostní báze v článcích znalostní báze Microsoft Knowledge Base:
272220 Oprava: Textem nebo obrázky dat úložného prostoru není správně regenerované.
308627 Oprava: DBCC SHRINKDATABASE nebo DBCC SHRINKFILE mohou rozšířit databázi s textem nebo obrazových dat.

Vlastnosti

ID článku: 324432 - Poslední aktualizace: 19. května 2011 - Revize: 7.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Klíčová slova: 
kbprb kbmt KB324432 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:324432

Dejte nám zpětnou vazbu

 

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