SQL Server 2000
Страница 49

Автоматическое уменьшение размера базы данных происходит в том случае, когда сервер обнару­живает в базе данных слишком много неиспользуемого пространства.

Несмотря на некоторые недостатки автоматического уменьшения размера базы данных, нельзя не отметить и неоспоримое преимущество — администратор освобождается от необходимости следить за размером базы данных, а также за объемом используемого и свободного пространства, переложив эту обязанность на сервер.

Для разрешения или запрещения автоматического уменьшения базы данных используется хранимая процедура sp_dboption:

sp_dboption "database_name", "autoshrink". ("true" | "false")

С помощью первого аргумента указывается имя базы данных, свойства кото­рой предполагается изменять. Второй аргумент должен оставаться таким, как он приведен выше. Указывая значение "true" или " f al se", можно соответствен­но разрешать и запрещать автоматическое уменьшение файлов базы данных.

Автоматическое уменьшение размера базы данных можно разрешить и с помощью команды ALTER DATABASE, воспользовавшись аргументом SET. Более подробно управление свойствами базы дан­ных будет рассмотрено в следующем разделе.

Помимо автоматического можно также выполнять ручное уменьшение раз­мера базы данных. Это делается с помощью команды контроля согласованности (или целостности) базы данных (database consistency check, DBCC):

DBCC SHRINKDATABASE

( databasejname [ , target_percent ]

[ , { NOTRUNCATE | TRUNCATEONLY } ]

)

Рассмотрим назначение аргументов.

О database_name. Имя базы данных, которую необходимо сжать.

О target_percent. Количество процентов свободного пространства, которое же­лательно оставить в базе данных после выполнения ее сжатия. Говоря точ­нее, с помощью рассматриваемого аргумента указывается процент от общего объема файлов базы данных, который должен быть незаполненным. Напри­мер, если в файле размером 10 Мбайт имеется 4 Мбайта свободного простран­ства, то для уменьшения количества неиспользуемого пространства до 2 Мбайт необходимо указать значение аргумента target_percent равным 25. Снача­ла сервер вычисляет объем свободного и занятого пространства (соответствен­но 4 и 6 Мбайт). Чтобы получить искомые 25 процентов, соотношение сво­бодного и занятого пространства должно быть 3 к 1. Путем нехитрых вычислений сервер приходит к выводу, что нужный результат будет получен при размере файла, равном 8 Мбайт. После этого сервер переносит все данные из последних 2 Мбайт файла в первые 8 Мбайт, помещая их в любое незанятое место на странице. После того как все данные будут перенесены, выполняется уменьшение размера файла. Заметим, что в аргументе target_percent нельзя указывать размер, превышающий текущий процент свободного пространства. В противном случае уменьшение размера файла выполнено не будет. Таким образом, выполняя команду DBCC SHRINKDATABASE

г со слишком большим значением аргумента target_percent, можно получить ситуацию, когда уменьшения размера базы данных вообще не происходит.

О NOTRUNCATE. При задании этого аргумента свободное пространство не возвра­щается операционной системе, а резервируется в файлах для будущего ис­пользования, то есть физически уменьшения размера базы данных не проис­ходит. Тем не менее, сервер все же выполняет перенос данных в начало файла, как это было описано для предыдущего аргумента.

О TRUNCATEONLY. При задании этого аргумента сервер удаляет все свободное про­странство в файле за последним используемым экстентом. Значение аргумента target_percent при этом игнорируется. Не предпринимается никакой по­пытки перемещения данных для более эффективного их распределения в фай­ле. Если в файле размером 2 Мбайт выделено всего два экстента в начале и в середине файла, то при использовании команды DBCC SHRINKDATABASE бу­дет освобождена только половина файла, начиная от второго экстента и до конца файла. Размер файла будет составлять около 1 Мбайт, хотя в принци­пе он мог быть уменьшен до 128 Кбайт.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63