Microsoft SQL Server 2005
Я хочу уменьшить начальный размер базы данных (до размера ниже текущего), а затем создать резервную копию файла журнала. Это безопасный способ уменьшить размер журнала? Создание резервной копии журнала без уменьшения исходного размера не дало мне свободного места.
Это не системная база данных, а база данных, созданная и заполненная пользователем.
Если для модели восстановления базы данных установлено значение FULL или BULK-LOGGED, база данных и журнал транзакций обрабатываются полностью отдельно.
Таким образом, резервное копирование базы данных не освобождает журнал; вы все равно должны сделать резервную копию журнала, чтобы использовать его повторно.
И наоборот, если файл журнала слишком велик для вас - но смотрите ниже - изменение размера файлов данных ничего не дает; вы должны явно создать резервную копию, а затем сжать физический журнал.
ОДНАКО, не используйте автоматическое выращивание только потому, что это выглядит удобно! Существуют серьезные штрафы за наличие многогигабайтного файла журнала, который был увеличен с шагом 10 МБ, что хорошо документировано на веб-сайте Microsoft.
Вкратце, увеличение или добавление к журналу разделит добавленное пространство на несколько новых виртуальных журналов, от нескольких до десятка - каждый раз, когда это происходит.
Когда ваш журнал транзакций увеличивается с 10 МБ до 1 ГБ с шагом 10 МБ, скорее всего, он будет фрагментирован на тысячу виртуальных журналов; это вредит производительности.
Мой совет - вычислить или понаблюдать, сколько журнала транзакций вам нужно между резервными копиями журналов, удвойте это количество и установите для журнала этот размер.
Затем отключите автоматический рост и включите мониторинг использования журналов, чтобы он предупреждал вас, когда оно превышает 90% или около того.
Гораздо лучше время от времени вручную добавлять несколько 100 МБ, сводя фрагментацию к минимуму.
Не уверены, что это правильное направление, но разве поворот журнала не сделает это за вас? Я предполагаю, что вы используете Linux. По сути, if будет копировать файл журнала, сжимать его, а затем удалять файл журнала (или усекать его в зависимости от конфигурации logrotate) и продолжать записывать файл журнала и все, что предварительно обрабатывается, пока сжатие происходило после компрессия или HUP; опять же, это логротат в Linux.
Если вы используете Windows, я уверен, что вы можете что-то написать, если это не то, что Windows может обрабатывать, но в целом вы, вероятно, хотите сжать файл журнала, а затем начать писать новую копию в свой журнал, ежедневно / еженедельно / ежемесячно (в зависимости от ваших требований).