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