Уменьшение размера базы или лога SQL. Уменьшение размера базы или лога SQL Ms sql уменьшение размера log файла

После определенных манипуляций с базой возникают ситуации, когда размер ее файлов превышает разумные пределы (либо, как у меня, в два раза больше положенного 103 Гб вместо 65 Гб, и это только файл базы данных). Данная ситуация разрешается простым шринком.

Приведенные ниже варианты кода довольно просты:

  • DBCC shrinkdatabase(N’имя_базы’, TRUNCATE_ONLY) ; — усечение всей базы
  • use [имя_базы] DBCC SHRINKFILE (N’имя_базы_Data’, 101); — усечение только файла данных до размера 101 мб
  • use [имя_базы] DBCC SHRINKFILE (N’имя_базы_Log’, 0); — усечение только файла транзакций до размера 0 мб

Но при выполнении этой операции могут возникнуть проблемы. Проявляются они в основном на тех базах данных, для которых установлена модель архивирования Full (для модели Simple проблем, как правило, не возникает, далее поясним почему). В сообщениях об ошибке говорится о том, что log-файл находится в использовании, поэтому операцию выполнить невозможно — это более чем удивительно, поскольку обычно процесс шринка производится при завершенной работе пользователей (никто не обращается к базе). Монитор соединений так же показывает отсутствие какой-либо активности.


Прежде, чем выполнять шринк базы необходимо выполнить архивацию, но не всей базы, а именно файла транзакций. Только после завершения этой процедуры можно смело выполнять команду shrink, и результат будет достигнут. Надо сказать, что процедура архивации нужна только, если для базы данных установлена модель архивирования Full. В модели Simple log-файл автоматически помечается, как свободный для использования и команда shrink работает без проблем, в модели Full файл становится свободным для использования только после backup-а соответствующего файла.

Итого, для усечения размера файлов базы SQL 2005 имеет следующий код:

Use ИмяБазы
BACKUP Log[ИмяБазы] WITH TRUNCATE_ONLY
DBCC SHRINKFILE ("ИмяФайлаЛогическое")

Та же операция для SQL 2008 будет выглядеть по другому. Так как нет такого ключа как TRUNCATE_ONLY для команды BACKUP, то можно использовать временный перевод базы режим бекапирования SIMPLE, выполнить усечение файла, и вернуть режим FULL. конечно если изначально такой и был:

USE ИмяБазы
ALTER DATABASE ИмяБазы SET RECOVERY SIMPLE
DBCC SHRINKFILE ("ИмяФайлаЛогическое", 10);
ALTER DATABASEИмяБазы SET RECOVERY FULL

Так же, после проведенных манипуляций никогда не помешает сделать проверку базы. Как обычно переводим базу в монопольный режим (Если необходимо использовать аргументы REPAIR, выполните инструкцию DBCC CHECKDB без параметра восстановления, чтобы узнать требуемый уровень восстановления, и только потом восстановления )

Когда при подключении к базе MS SQL появляются ошибки:

Ошибка СУБД:
Microsoft OLE DB Provider for SQL Server: Журнал транзакций для базы данных «ReportServer» заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы
sys. databases HRESULT=80040E14, SQLStvr: Error state=2, Severity=11,native=9002, line=1
или
Ошибка СУБД:
Microsoft OLE Provider for SQL Server: The transaction log for database “ReportServer” is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column is sys.database
HRESULT=80040E14, SQLSTATE=4 2000, native=9002

это значит, что на диске, где расположен лог транзакций закончилось место и теперь СУБД некуда записывать данные о новых транзакциях. Чаще всего такое происходит, когда не установлено никаких ограничений на размер лога и в MS SQL не создано соответствующих планов обслуживания.

В таком случае нужно уменьшить размер самого файла транзакций (*.ldf), другими словами сделать шринк (сжатие) лога. Для этого можно использовать как запрос, так и сжатие лога вручную.

Рассмотрим сжатие лога транзакций вручную:

Шаг 1. Установить модель восстановления Простая (Simple). Правой кнопкой на базе — Свойства(Properties)

Далее: Параметры(Options) — 4-й сверху пункт Модель восстановления(Recovery model) — Простая(Simple) — OK.

Выполнить сжатие (Shrink) лога транзакций. Правой кнопкой на базе — Задачи(Tasks) — Сжать(Shrink) — Файлы(Files)

Установить Тип файла(File type) — Журнал(Log) — в Операция сжатия(Shrink action) — выбрать Реорганизовать страницы, перед тем освоить неиспользуемое место(Reorganize pages before releseasing unused space) — Сжать файл (Shrink file to)
указать приемлемый размер лога.

Когда при подключении к базе MS SQL появляются ошибки:

Ошибка СУБД:
Microsoft OLE DB Provider for SQL Server: Журнал транзакций для базы данных "ReportServer" заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы
sys. databases HRESULT=80040E14, SQLStvr: Error state=2, Severity=11,native=9002, line=1

Ошибка СУБД:
Microsoft OLE Provider for SQL Server: The transaction log for database “ReportServer” is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column is sys.database
HRESULT=80040E14, SQLSTATE=4 2000, native=9002

это значит, что на диске, где расположен лог транзакций закончилось место и теперь СУБД некуда записывать данные о новых транзакциях. Чаще всего такое происходит, когда не установлено никаких ограничений на размер лога и в MS SQL не создано соответствующих планов обслуживания.

В таком случае нужно уменьшить размер самого файла транзакций (*.ldf) , другими словами сделать шринк (сжатие) лога. Для этого можно использовать как запрос, так и сжатие лога вручную.

Рассмотрим сжатие лога транзакций вручную:

Шаг 1. Установить модель восстановления Простая (Simple). Правой кнопкой на базе - Свойства(Properties) - Параметры(Options) - 4-й сверху пункт Модель восстановления(Recovery model) - Простая(Simple) - OK.

Шаг 2. Выполнить шринк (сжатие) лога транзакций. Правой кнопкой на базе - Задачи(Tasks) - Сжать(Shrink) - Файлы(Files) - установить Тип файла(File type) - Журнал(Log) - в Операция сжатия(Shrink action) - выбрать Реорганизовать страницы, перед тем осводить неиспользуемое место(Reorganize pages before releseasing unused space) - Сжать файл (Shrink file to) -
указать приемлемый размер лога.

Шаг 3. Установить модель восстановления Полная(Full). Правой кнопкой на базе - Свойства(Properties) - Параметры(Options) - 4-й сверху пункт Модель восстановления(Recovery model) - Полная(Full) - OK.


Подробности Категория: MS SQL Опубликовано 16.05.2015

При проведении транзакции СУБД записывает в файл журнала свои действия, что бы в случае ошибки откатится в исходное состояние. И Иногда этот файлик разрастается до ОЧЕНЬ больших размеров, при чем размер не зависит от размера самой базы данных.

Например, сейчас я столкнулся с проблемой нехватки места на жестком диске. Начал разбираться: База 1С Зарплата и управление персонало 3.0 размером 500 мб, в которой работают 2 колеки 2 раза в месяц, имеет файл логов 398 Гб (просто на жестком место кончилось).

Хорошо надо этот файл уменьшить. Правильнее всего это делать регулярно через "Планы обслуживания", но сейчас покажу как это делать в ручном режиме.

SQL позволяет высвободить место ОС только то, что ранее было забекаплено, поэтому в начале необходимо произвести бекап журанала транзакций.

1. Выбираем базу. Правой кнопкой. Заходим в раздел задачи -> создать резервную копию.

2. Выбираем тип резервной копии "Журнал транзакций". указываем куда сохранять и жмем ок.

Тоже самое можно сделать и с помощью скрипта:

BACKUP LOG [Имя базы] TO DISK = N"путь до файла бекапа" WITH NOFORMAT, NOINIT, NAME = N"имя базы-Журнал транзакций Резервное копирование", SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

После окончания процесса можно переходить не посредственно к сжатию.

1. Заходим в пункт меню задачи -> сжать -> файлы

2. Выбираем тип файла "Журнал". Обратите внимание на поле "Доступное свободное место" - оно должно быть близкое к 100 % от файла логов.

3. Жмем ок

Тоже самое с помощью скрипта

USE [имя базы] GO DBCC SHRINKFILE (N"имя файла логов" , 0, TRUNCATEONLY) GO

Все смотрим, что файл логов уменьшился до минимального значения.

Все бы хорошо, но периодически появляется вот ошибка

Не удалось сжать файл журнала 2 (), так как все логические файлы журналов, расположенные в конце файла, находятся в использовании.

Я пробовал различные варианты, но в итоге мне помог вот этот скрипт:

USE имя базы; GO -- Truncate the log by changing the database recovery model to SIMPLE. ALTER DATABASE имя базы SET RECOVERY SIMPLE; GO -- Shrink the truncated log file to 1 MB. DBCC SHRINKFILE (имя файла логов, 1); GO -- Reset the database recovery model. ALTER DATABASE имя базы SET RECOVERY FULL; GO

Инструкция

В свойствах меню «Мой компьютер» выберите пункт, отвечающий за управление. В операционных системах Seven и Windows Vista данный пункт указан в левой части панели меню «Мой компьютер». Также вы можете запустить данное меню из «Администрирования» в панели управления. У вас на экране должна появиться специальная консоль управления.

При выполнении работ с лог-файлами в обязательном порядке обратите внимание на ограничения учетной записи, поскольку все действия должны выполняться только администратором. Гостям и другим ограниченным учетным записям данное действие будет недоступно.

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

В пункте просмотра событий очистите логи операционной системы Windows, выделив его левой кнопкой мыши. Раскройте пункт «Действие», после чего запустите его контекстное меню при помощи выделения правой кнопкой мыши.

В отображенном на вашем экране окне выберите пункт с названием «Стереть все события» и, если вы действительно хотите это сделать, подтвердите операцию в появившемся диалоговом окне. Дождитесь окончания удаления содержимого лог-файлов с вашего компьютера.

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

Полезный совет

Не выполняйте чистку логов самостоятельно, если не имеете навыков уверенного пользователя ПК.

Задача очистки журнала транзакций 1С на основе Microsoft SQL Server представляет собой определенные трудности в силу функции автоматического наращивания размера собственных файлов, несмотря на существующую возможность автоматического уменьшения выбранного файла.

Инструкция

Убедитесь в том, что вам понятна схема выбранной операции очистки, а вернее, усечения журнала транзакций: процедура может быть осуществлена только усечением свободного пространства в конце файла и напрямую связана с выбранным способом создания резервной копии. При выборе опции Full требуется обязательное завершение всех сохраняемых транзакций и создание резервной копии в режиме Remove inactive entries from transactional log. Выбор опции Simple приводит к усечению всего файла, но не подразумевает обязательного восстановления транзакций.

Усечение файла журнала транзакций может быть осуществлено с использованием инструмента Query Analyzer командойDBCC Shrinkfile (имя_файла_лога, нужный_размер_файла),а выполнение операции очистки возможно только после создания полной резервной базы той же командой. Используйте следующий синтаксис для определения параметров копирования:BackUp Log имя_выбранной_базы with truncate only.

Создайте полную резервную копию подлежащего очистке файла журнала транзакций, если необязательно восстановление данных с помощью инструмента Backup Database и снимите флажок на поле Remove inactive entries from transactional log. Перейдите на вкладку Options и измените значение параметра Recovery Model на Simple. Выполните операцию усечения выбранного файла вышеуказанной командой или воспользуйтесь синтаксисомDBCC ShrinkDatabase (имя_выбранной_базы_данных, необходимый_размер_остаточного_файла_в_%).

Примените флажок на поле Remove inactive entries from transactional log и осуществите создание резервной копии в исходном наборе из Enterprise Manager. Восстановите значение параметра Recovery Model - Full и повторите восстановление журнала из Enterprise Manager поверх существующей копии. Снова снимите флажок на поле Remove inactive entries from transactional log и, в очередной раз, выполните резервное копирование выбранного журнала транзакций.

Видео по теме

Источники:

  • Некоторые особенности эксплуатации Microsoft SQL Server 2000

Любое программное обеспечение выполняет определенные функции. Независимо от того, как она это делает по умолчанию в папке с утилитой создается log-файл. Данный файл является текстовым документом, в котором отображаются все действия программы.

Вам понадобится

  • Программное обеспечение:
  • - любой текстовый редактор;
  • - архиватор 7Zip.

Инструкция

В некоторых случаях требуется узнать, как себя вел запущенный процесс до его зависания или по каким причинам программа была закрыта. Если смотреть в сторону Linux-систем данное действие можно совершить и без просмотра log-файла (при условии ее запуска через терминал или консоль). В операционных системах семейства Windows создаются логи или добавляется запись в системный журнал.