Команды DBCC SHRINKFILE и SHRINKDATABASE могут не работать из-за малой степенью заполнения текста, ntext или image столбцов

Переводы статьи Переводы статьи
Код статьи: 324432 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Проблема

Команды DBCC SHRINKDATABASE и DBCC SHRINKFILE будет не перемещать данные и уменьшить размер файла, если EstimatedPages значение равно Минимальный размер значение, которое выводится при завершении выполнения команды. Из-за данные изменения запросов для таблиц с типами данных больших двоичных объектов (BLOB) (текст, ntext, Image), имеется возможность использовать многие однородном экстенте, размещенных, степенью заполняются данными (например, только 1 8 страниц элементы управления степени выделяется), что вызовет DBCC SHRINKFILE и Команды DBCC SHRINKDATABASE для over-estimate номер EstimatedPages, и команды не выполняют операции сжатия. Как правило в случаях, где возникла проблема, размер полной до 8 раз меньше, чем размеры файлов из резервной копии базы данных База данных после выполнения команды DBCC SHRINKFILE с файлами базы данных.

Решение

Если измененных таблиц не обязательно постоянно через Интернет, в то время как исправить эту ситуацию, можно использовать любой из указанных ниже Методы обхода для решения этой проблемы.
  • Передача всей таблицы с помощью инструкции SELECT INTO новые таблицы в той же базе данных. Удаление исходной таблицы, а затем запустите инструкцию DBCC Инструкция SHRINKFILE. Переименуйте новую таблицу в таблицу имя.
  • Передача всей таблицы с помощью инструкции SELECT INTO новую таблицу в другой базе данных. Усечение исходной таблицы, а затем запустить Инструкция DBCC SHRINKFILE. Передать данные исходной Таблица.
  • Скопировать таблицу из в машинный код с помощью программы массового копирования режим. Описать таблицу, а затем удалить существующую таблицу. Запустите инструкцию DBCC Инструкция SHRINKFILE. Создание новой таблицы, а затем использовать программу массового копирования для Скопируйте данные в таблицу.
  • С помощью служб DTS для передачи вся база данных для новой базы данных. Службы преобразования данных SQL Server 7.0 не разрешается передавать данных text и image больше, чем 64 КБ правильно. Это проблема не относится к версии SQL Server 2000 преобразования данных Службы.Для получения дополнительных сведений нажмите кнопку ниже номер статьи базы знаний Майкрософт:
    257425 ИСПРАВЛЕНИЕ: Переноса объектов служб DTS не переносятся данные BLOB, больше 64
    Можно искать столбцов text и image больше 64 КБ, с помощью следующего запроса:
    SELECT MAX (DATALENGTH (TextImageColumn)) FROM TableName
    Если больше 64 КБ, передачи текстовых и графических данных производит усечение данных и не вызывает ошибки, за исключением файлов журналов служб DTS. Если имеют больше 64 КБ данных text или image, сведения, приведенные в третий элемент маркированного списка таблиц, содержащих данные типа text или image. Затем с помощью служб DTS для остальных элементов в базе данных.
Если база данных должна находиться в оперативном режиме или размер базы данных слишком велико, чтобы переместить их в другую базу данных или во внешнем файле, вы можете Команда DBCC SHRINKFILE с аргументом EMPTYFILE. Чтобы использовать эту работу вокруг выполните следующие действия.
  1. При работе с Microsoft SQL Server 7.0 SP 3 Включение флагов трассировки 1180 и 1197.
  2. При работе с пакетом обновления 3 (Sp3) для SQL Server 7.0 Построение 7.00.987 или более поздней версии с пакетом обновления 4 (Sp4), в том числе включения флага трассировки 1180.
  3. Если распространиться по нескольким файлам для базы данных вопросы пространства диска или повышения производительности, создание 1 или более дополнительных файлы базы данных с помощью команды ALTER DATABASE, общий размер Сравним с результатом следующего запроса.
    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
    ПРИМЕЧАНИЕ: Предыдущий запрос использует таблицу, которая создается по запросу в разделе «Дополнительная информация» данной статьи. Кроме того размер файла итоговые суммы разбиты по файловой группы.

  4. Выполнить запрос DBCC SHRINKFILE с аргументом EMPTYFILE как второй параметр для каждого файла, который малой степенью заполнения универсальный большой двоичный объект экстенты.
  5. Отслеживание хода выполнения ИНСТРУКЦИЯ DBCC SRHINKFILE команда, создавая одну или несколько таблиц с той же схемы очередь extentinfo таблицы в разделе «Дополнительная информация» этой статьи. Затем Запустите "INSERT... EXEC import_extentinfo«запрос для заполнения данных в новые таблицы. Используйте следующие Анализ результатов запроса:
    select [file_id], 'page count'=sum(pg_alloc), 'min page'=min(page_id), 'max page'=max(page_id) from extentinfo group by [file_id]
    Кроме того, можно использовать следующий запрос для отслеживания при Если таблиц начинаются с та же последовательность была запущена команда DBCC EXTENTINFO письма и их создания около времени как команда DBCC EXTENTINFO:
    select crdate, [name] from sysobjects where type = 'U' and [name] like 'extent%' order by crdate
  6. По завершении запроса DBCC SHRINKFILE выполнить ALTER Запрос к базе данных для удаления старых файлов из базы данных.
  7. Возможно удалить дополнительное пространство, выполнение инструкции DBCC SHRINKFILE запроса с параметром НИКАКОГО на новые файлы, которые были созданный на шаге 3.
  8. Отключите на компьютере под управлением Microsoft SQL Server 7.0 флаги трассировки включен в шаге 1 или 2.

Дополнительная информация

Следующий запрос Transact-SQL можно запустить из любого запроса средства, такие как Query Analyzer, если вы вошли в систему как пользователь, имеющий sysadmin права. Выполнение запроса Transact-SQL для SQL Server для определения Если инструкция DBCC SHRINKFILE и команды DBCC SHRINKDATABASE нельзя сжатие файлов из-за малой степенью заполнения BLOB однородных экстентов.

ПРИМЕЧАНИЕ: Необходимо обновить строку «<database name="">» в имя проблемы баз данных и должна быть заключена в одиночные знаки.</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]
Если вы видите результат строки из последнего запроса index_id значения 255, а возможной степени / фактической степени столбец является менее 75, база данных содержит степенью заполняется экстенты BLOB и уменьшить размер с помощью методов, описанных в в разделе «Решение» этой статьи.

ПРИМЕЧАНИЕ: Этот запрос использует функциональность DBCC EXTENTINFO команда. Не следует использовать команду DBCC EXTENTINFO вне данной ситуации, поскольку функциональные возможности могут изменить или даже удалить их из будущих версий Microsoft SQL Server.

Ссылки

Для получения дополнительных сведений нажмите кнопку следующие номера статей базы знаний Майкрософт:
272220 ИСПРАВЛЕНИЕ: TEXT/IMAGE места для хранения данных не восстанавливается правильно
308627 ИСПРАВИТЬ: DBCC SHRINKDATABASE или DBCC SHRINKFILE может развернуть базу данных с помощью текстовых или графических данных

Свойства

Код статьи: 324432 - Последний отзыв: 8 июня 2011 г. - Revision: 3.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Ключевые слова: 
kbprb kbmt KB324432 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:324432

Отправить отзыв

 

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