Обслуживание баз данных (SQL Server Compact Edition)
Со временем внутренняя структура базы данных Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition)становится все более фрагментированной, что ведет к нерациональному использованию дискового пространства и снижению производительности. Для уменьшения фрагментации используйте описанные ниже функции обслуживания базы данных SQL Server Compact Edition.
Дополнительные сведения об использовании описанных в этом разделе методов и свойств см. в разделе Объекты пространства имен System.Data.SqlServerCe.
Сжатие
Воспользуйтесь методом Compact (метод CompactDatabase в программировании собственного кода) для восстановления места в файле базы данных. Метода также можно использовать для изменения параметров базы данных, например пароля и идентификатора языка (LCID).
Файлы базы данных SQL Server Compact Edition разбиты на логические единицы размером по 4 КБ, называемые страницами. Поскольку в базу данных постоянно вносятся изменения, некоторые страницы могут содержать неиспользуемое пространство, а некоторые страницы не используются. Неиспользуемые страницы со временем перерабатываются механизмом AutoShrink. Дополнительные сведения см. в подразделе "Автосжатие" текущего раздела.
Пустое место на страницах можно восстановить только с помощью метода Compact. Метод Compact читает строки исходной базы данных и записывает их в конечную базу данных, тем самым минимизируя объем нерационально используемого пространства в конечной базе данных.
Примечание. |
---|
Если для конечной базы данных не указано свойство Data Source, метод Compact перезаписывает исходную базу данных новой сжатой базой, которой присваивается то же имя. |
При сжатии базы данных выполняются следующие операции.
- Заново создается новая база, и для нее создаются индексы.
- Страницы таблицы реорганизуются так, чтобы они располагались в соседних страницах базы данных. За счет дефрагментации таблиц в базе данных достигается более рациональное использование места.
- Неиспользуемое пространство, возникающее в результате удаления объектов и записей, восстанавливается за счет перезаписи всех данных базы в новые страницы данных. При удалении из базы данных объектов и записей занимаемое ими место помечается как доступное для внесения новых дополнений в базу данных. До тех пор пока вся страница с данными не будет полностью удалена, она считается частично заполненной. Размер базы данных не уменьшится до тех пор, пока из страницы не будут удалены последние данные, либо пока база данных не будет сжата. Базы данных, в которых часто добавляются, удаляются и обновляются объекты и записи, рекомендуется регулярно сжимать.
- Возрастающие столбцы удостоверения сбрасываются так, чтобы последующее выделенное значение на один шаг превышало самое большое значение в оставшихся записях. Например, если все записи базы данных удалены, то при сжатии базы данных значению столбца удостоверения следующей записи присваивается начальное значение. Если самое большое оставшееся значение идентификатора базы данных — 50, а значение шага — 5, то при сжатии базы данных для следующей записи устанавливается значение 55. Это произойдет, даже если прежде добавлялись записи со значением больше 50, но до сжатия они были удалены. Значение шага может быть отрицательным. Например, при значении шага, равном –5, и минимальном значении, равном 15, в процессе сжатия базы данных для следующей записи устанавливается значение 10.
Примечание. Такое поведение имеет место при использовании исходной выпущенной версии Microsoft Visual Studio 2005. Сжатие базы данных не влияет на сведения об идентификации в пакете обновления 1 (SP1) для Visual Studio 2005. - Если в строке подключения конечной базы данных указать значения для идентификатора языка или пароля, эти значения будут использованы при создании конечной базы данных.
Прежде чем сжимать базу данных, убедитесь, что соблюдаются следующие условия.
- База данных должна быть закрыта.
- При вызове метода Compact из конечной базы данных выходить нельзя. Если база данных, указанная DestConnection, уже существует или существует другой файл с тем же именем, возникнет ошибка.
- Должно быть достаточно места для хранения исходной и сжатой базы данных, а также для размещения кэшированных данных и временной базы данных.
Важно! |
---|
При использовании метода Compact объем свободного места на устройстве должен по меньшей мере в два раза превышать размер исходной базы данных |
Автосжатие
Для сжатия базы данных необходимо создать новую базу данных и скопировать туда все объекты исходной базы данных. Обычно процесс сжатия автоматически не запускается. Процедура автоматического регулирования размера файла базы данных называется AutoShrink. Этот способ практически не использует ресурсы процессора и память, что особенно важно для переносных устройств и предназначенных для них продуктов баз данных. Способ Autoshrink перемещает страницы по файлу так, чтобы все пустые или невыделенные страницы размещались последовательно в конце файла. Затем выполняется усечение пустых страниц, после чего усеченные страницы становятся доступными для файловой системы базы данных. Возвращение усеченных страниц в файловую систему базы данных увеличивает свободное пространство файловой системы.
Для настройки Autoshrink с управляемым кодом воспользуйтесь свойством строки подключения AutoShrink Threshold. В случае с собственным кодом воспользуйтесь свойством DBPROP_SSCE_AUTO_SHRINK_THRESHOLD. Свойство указывает процент свободного места в файле перед запуском Autoshrink.
Примечание. |
---|
Кроме того, можно сжать базу данных, вызвав метод Shrink. Дополнительные сведения см. в разделе Объекты пространства имен System.Data.SqlServerCe. |
Проверка
Файлы базы данных SQL Server Compact Edition разбиты на логические единицы размером по 4 КБ, называемые страницами. При записи каждой страницы в файл базы данных SQL Server Compact Edition вычисляет и сохраняет ее контрольную сумму. Если после записи в файл страница была изменена или повреждена, она уже не соответствует ожидаемой контрольной сумме. Когда SQL Server Compact Edition считывает такую страницу, он возвращает собственную ошибку SSCE_M_DATABASECORRUPTED (25017).
При вызове метода Verify класса SqlCeEngine выполняется пересчет контрольной суммы для каждой страницы файла базы данных с проверкой соответствия контрольных сумм ожидаемым значениям. Если метод возвращает значение true, файл базы данных не поврежден. Если метод возвращает значение false, файл базы данных поврежден и приложение должно вызвать метод Repair.
Восстановление
В случае повреждения файла базы данных можно попытаться восстановить его при помощи метода Repair(System.String,System.Data.SqlServerCe.RepairOption) объекта SqlCeEngine или метода Repair собственного объекта Объект ядра СУБД SQL Server Compact Edition. Метод Repair служит для сканирования базы данных и вычисления контрольных сумм страниц. Если контрольная сумма не совпадает с суммой, вычисленной в момент записи страницы в базу данных, такая страница считается поврежденной. Если метод Repair вызывается со значением RepairOption.DeleteCorruptedRows, то все поврежденные страницы удаляются и в случае, если поврежденная страница содержит схему базы данных, ее удаление может вызвать значительную потерю данных. Данные, восстановленные с использованием метода Repair, не должны иметь повреждений. Если метод Repair вызывается со значением RepairOption.RecoverCorruptedRows, то база данных предпримет попытку считать данные из поврежденных страниц тоже. Это может восстановить значительную часть данных. Тем не менее, использование указанного параметра не может гарантировать, что восстановленные данные не будут иметь логических повреждений.
Примечание. |
---|
Метод Repair используется, только если SQL Server Compact Edition возвращает собственную ошибку SSCE_M_DATABASECORRUPTED (25017) либо вызов метода Verify объекта SqlCeEngine возвращает значение false. |
Автоматическая запись
Если в процессе транзакций в базу данных вносятся изменения, они удерживаются в пуле буферов, пока транзакция не будет зафиксирована или прервана. Если транзакция прерывается, изменения отменяются. Если транзакция фиксируется, ее изменения становятся видимыми другим пользователям и транзакциям, однако, возможно, в базу данных они будут записаны не сразу. В случае непредвиденного завершения программы, например в результате сброса устройства, зафиксированные транзакции, изменения которых не были записаны в базу данных, будут отменены.
Обратите внимание, что транзакции всегда записываются в базу данных в порядке их фиксации. Это означает, что даже в случае потери некоторых транзакций в базе данных всегда соблюдается строгая последовательность. Рассмотрим, к примеру, случай, когда приложение зафиксировало транзакцию А, а затем транзакцию Б. Если в приложении произошел сбой или устройство было сброшено, база данных будет находиться в одном из трех состояний:
- Без изменений
- Изменена транзакцией А
- Изменена транзакциями А и Б.
Запись транзакций в базу данных в порядке их фиксации увеличивает производительность за счет сокращения количества операций записи в файл базы данных. Увеличение производительности особенно заметно, когда за короткий промежуток времени фиксируется много небольших транзакций. В этом случае все транзакции записываются в файл базы данных одновременно вместо того, чтобы вызывать в базе данных отдельную операцию записи.
Отложенные в пул буферов изменения записываются или сбрасываются в базу данных через промежутки времени, указанные свойством строки подключения Flush Interval в ADO .NET (свойством DPROP_SSCE_FLUSH_INTERVAL в OLE DB). Эти свойства устанавливают максимальное количество секунд перед фиксацией транзакций на диск.
Примечание. |
---|
Для транзакций, которые должны быть обязательно зафиксированы в базе данных, приложение может использовать перечисление CommitMode (или свойство DBPROP_SSCE_TRANSACTION_COMMIT_MODE в OLE DB), чтобы переопределить стандартное поведение сброса в момент фиксации. С помощью этих свойств приложение может обеспечить успешное сохранение всех транзакций в базе данных. |
Создание резервной копии, восстановление, удаление
Поскольку SQL Server Compact Edition — это система баз данных на основе файлов, с ними можно выполнять многие обычные задачи, связанные с базой данных, например создавать резервные копии, восстанавливать и удалять базу данных с помощью интерфейсов API файловой системы.
- Чтобы создать резервную копию базы данных, закройте все подключения к ней и скопируйте файл SDF.
- Чтобы восстановить базу данных, скопируйте файл SDF обратно в его обычное рабочее расположение. Операция будет корректной, даже если база данных настроена для репликации.
- Чтобы удалить базу данных, удалите файл базы данных SDF.
См. также
Другие ресурсы
Метод CompactDatabase (SQL Server Compact Edition)
Метод Repair (SQL Server Compact Edition)