Я не являюсь экспертом по SQL, и мне напоминают об этом каждый раз, когда мне нужно сделать что-то, выходящее за рамки основ. У меня есть тестовая база данных, которая невелика по размеру, но журнал транзакций определенно имеет большой размер. Как очистить журнал транзакций?
Делая лог-файл меньшего размера должны быть зарезервированы для ситуаций, где был обнаружен неожиданный рост, который вы не ожидаете, чтобы повториться. Если файл журнала будет расти снова на тот же размер, не очень достигается путем сокращения временно. Теперь, в зависимости от целей восстановления вашей базы данных, эти действия вы должны предпринять.
Никогда не вносите изменения в вашу базу данных без обеспечения вы можете восстановить его если что-то пойдет не так.
(И точка-в-время восстановления, я имею в виду, вы заботитесь о том, чтобы восстановиться на полную или разностную резервную копию.) Предположительно, база данных в "полный" режим восстановления. Если нет, то убедитесь, что он:
ALTER DATABASE testdb SET RECOVERY FULL;
Даже если вы принимаете регулярного полного резервного копирования, файл журнала будет расти и расти, пока вы выполняете журнал резервное копирование - это для вашей защиты, не напрасно разъедать вашего дискового пространства. Вы должны выполнять эти резервные копии журнала довольно часто, в соответствии с вашими целями восстановления. Например, если у вас есть бизнес-правило, которое гласит, что вы можете позволить себе потерять не более 15 минут данные в случае катастрофы, вы должны иметь работу, которая создает резервные копии журнала каждые 15 минут. Вот скрипт, который будет генерировать меткой имена файлов на основе текущего времени (но вы также можете сделать это с помощью планов обслуживания и т. д. просто Дон'т выбрать любой из вариантов сокращения в планы обслуживания, они'вновь ужасно).
DECLARE @path NVARCHAR(255) = N'\\backup_share\log\testdb_'
+ CONVERT(CHAR(8), GETDATE(), 112) + '_'
+ REPLACE(CONVERT(CHAR(8), GETDATE(), 108),':','')
+ '.trn';
BACKUP LOG foo TO DISK = @path WITH INIT, COMPRESSION;
Обратите внимание, что \backup_share \\
должен быть на другой машине, которая представляет собой различные базовые устройства хранения. Поддерживает до той же машине (или на другой машине, который использует тот же базовый дисков, или другой виртуальной машине, что's на одном физическом узле) на самом деле не помочь вам, поскольку если машина взрывается, вы'вэ потерял свою базу данных и ее резервное копирование. В зависимости от сетевой инфраструктуры, это может сделать больше смысла для резервного копирования локально, а затем перенесите их в другое место за сценой; в любом случае, вы хотите, чтобы получить их от основной компьютер базы данных как можно быстрее.
Теперь, после того, как вы регулярно выполнять резервное копирование журнала, она должна быть разумной, чтобы сжать файл журнала на что-нибудь более разумное, чем все, что она'с ветром до сих пор. Это не означает запуск shrinkfile команда
снова и снова, пока лог-файла-1 мб - даже если вы не резервное копирование часто бревно, его еще нужно учесть сумму любой параллельных транзакций, которые могут возникнуть. Файл журнала событий авторасширения стоят дорого, поскольку SQL-сервер с нуля файлы (в отличие от файлов данных, когда мгновенная инициализация файлов включен), и операции пользователей должны ждать, пока это произойдет. Хочешь расти-сокращение-расти-термоусадочная рутине как можно меньше, и вы, конечно, Дон'т хотите, чтобы ваши пользователи платят за это.
Обратите внимание, что вам может понадобиться для резервного копирования дважды журнала после сокращения можно (спасибо Роберту).
Итак, вам нужно придумать практичный размер для файла журнала. Никто здесь может сказать вам, что это такое, не зная больше о вашей системе, но если вы'вэ часто сжатие файла журнала, и она растет снова, хороший знак, наверное 10-50% выше, чем в крупнейших IT'ы были. Позвольте's отмечают, что доходит до 200 МБ, и вы хотите, чтобы какие-либо последующие события авторасширение на 50 МБ, а затем вы можете настроить размер файла журнала таким образом:
USE [master];
GO
ALTER DATABASE Test1
MODIFY FILE
(NAME = yourdb_log, SIZE = 200MB, FILEGROWTH = 50MB);
GO
Обратите внимание, что если файл журнала в настоящее время и GT; 200 МБ, вам может потребоваться запустить это в первую очередь:
USE yourdb;
GO
DBCC SHRINKFILE(yourdb_log, 200);
GO
Если это тестовая база данных, а вы Дон'т волнует точка-в-время восстановления, то вы должны убедиться, что ваша база данных находится в "простой" режим восстановления.
ALTER DATABASE testdb SET RECOVERY SIMPLE;
Ввод базы данных в "простой" режим восстановления будет убедиться, что SQL Server повторно использует части лог-файла (по сути, постепенный отказ транзакции) вместо того, чтобы расти, чтобы вести учет все операций (например, полный
выздоровление, пока вы резервное копирование журнала). КПП
событий поможет контролировать журнал и убедитесь, что он не'т должны расти, если вы генерируете много Т-журнал операций между контрольно-пропускного пункта.
Далее, вы должны сделать абсолютный уверены, что рост этот журнал был действительно из-за аварийного события (скажем, ежегодной весенней чистки или восстановления ваших самых больших индексов), а не из-за обычного, повседневного использования. Если вы сжать файл журнала на смехотворно малый размер, и SQL сервер просто должен снова вырастить его, чтобы удовлетворить ваши нормальную деятельность, что вы приобрели? Вы сможете использовать это дисковое пространство можно высвободить только временно? Если вам нужно немедленно исправить, то можно выполнить следующие действия:
USE yourdb;
GO
CHECKPOINT;
GO
CHECKPOINT; -- run twice to ensure file wrap-around
GO
DBCC SHRINKFILE(yourdb_log, 200); -- unit is set in MBs
GO
В противном случае, установите соответствующий размер и темпы роста. Как в Примере в момент времени дело восстановления, вы можете использовать тот же код и логику, чтобы определить, какой размер подходит и установить разумные параметры авторасширения.
TRUNCATE_ONLY
и затем shrinkfile команда
. Для одного, этот вариант TRUNCATE_ONLY
является устаревшим и более не доступен в текущей версии SQL сервера. Во-вторых, если вы не в полной модели восстановления, это разрушит вашу цепочку журналов и требовать новый полный архив. Инструкция DBCC shrinkdatabase С
и содержание плана возможность сделать то же самое плохие идеи, особенно если вам действительно нужно только решить проблемный вопрос журнала. Целевой файл, который вы хотите отрегулировать и настроить его самостоятельно, с помощью инструкции DBCC shrinkfile приложения или изменять базы данных, ... изменять файл` (выше примеры). Вместо сокращения ваш лог-файл на небольшие суммы и давая ему постоянно автоувеличение на небольшой скорости самостоятельно, установите его в какой-то достаточно большой размер (тот, который будет учитывать сумму вашей большой набор параллельных транзакций) и установить разумный параметр автоувеличение в качестве запасного варианта, так что это не'т должны расти несколько раз, чтобы удовлетворить отдельные операции и так, что он будет относительно редко для того, чтобы когда-нибудь вырасти во время нормальной работы. Худший из возможных здесь настройки 1 МБ рост или рост 10%. Как ни странно, эти значения по умолчанию для SQL Server (который я'вэ жаловался и спросил на изменения нет avail](https://web.archive.org/web/20140108204835/http://connect.microsoft.com:80/SQLServer/feedback/details/415343)) - 1 МБ для файлов данных, и 10% для файлов журнала. Прежний слишком мал, в этот день и возраст, и последняя приводит к больше и больше событий в любое время (скажем, лог-файл 500 МБ, во-первых, рост 50 МБ, далее рост 55 МБ, далее рост 60.5 МБ, и т. д. и т. д. - и на медленный ввода/вывода, поверьте мне, вы действительно заметите этой кривой).
Пожалуйста, Дон'т останавливаться, пока большая часть рекомендаций вы видите там о сжатии файлов журнала-Это изначально плохо и даже потенциально катастрофическими, есть некоторые люди, которые больше заботятся о целостности данных, чем высвободить место на диске. Новый пост в блоге я написал в 2009 году, когда я увидел несколько, что "Здесь's, как сжать файл журнала" по должности весны up. В блоге Брент Озар писал четыре года назад, указывая на несколько ресурсов, в ответ на статью в журнале SQL-сервера, что следует не было published. В своем блоге пол Рэндал объясняя, почему Т-журнал технического обслуживания-это важная и почему вы должны'т сжатие файлов данных, либо. Майк Уолш имеет отличный ответ, охватывающие некоторые из этих аспектов, в том числе причины, почему вы не сможете immediately сжать файл журнала.
-- DON'T FORGET TO BACKUP THE DB :D (Check [here][1])
USE AdventureWorks2008R2;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2008R2_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY FULL;
GO
От: инструкция DBCC shrinkfile приложения (язык Transact-SQL) в
Вы можете сначала сделать резервную копию.
Предупреждение: пожалуйста, прочитайте замечания ниже внимательно, и я предполагаю, что вы'ве уже прочитали принято отвечать. Как я сказал, почти 5 лет назад:
если у кого есть какие-либо замечания для добавления в ситуациях, когда это не адекватного или оптимального решения, то, пожалуйста, комментарий ниже
Щелкните правой кнопкой мыши на имени базы данных.
Выберите Задачи → Сжатие Базы Данных →
Нажмите кнопку <и>ОК</КБД>!
Я обычно открываю директорию Проводника Windows, содержащий файлы базы данных, так что я могу сразу увидеть эффект.
На самом деле я был весьма удивлен, это сработало! Обычно я'вэ используется команда DBCC раньше, но я просто попытался это и он не'т сожмите что-нибудь, поэтому я старался ГИП (2005), и он работал отлично - освобождая 17&ампер;усилитель; nbsp;ГБ за 10 секунд
В режиме полного восстановления может не работать, поэтому вам придется либо создать резервную копию журнала во-первых, или изменить на простое восстановление, а затем сжать файл. [спасибо @onupdatecascade для этого]
--
ЗЫ: я ценю то, что некоторые комментарии по поводу опасности этого, но в моем окружении я не'Т есть какие-либо вопросы, делаю это сам тем более, что я всегда сначала делать полную резервную копию. Поэтому, пожалуйста, примите во внимание то, что твое окружение такое, и как это влияет на вашу стратегию резервного копирования и безопасности работы, прежде чем продолжить. Все, что я делаю, показываю людям возможность, предоставляемая корпорацией Майкрософт!
Ниже скрипт, чтобы сжать журнал транзакций, но я определенно рекомендую резервное копирование журнала транзакций до сокращения.
Если вы просто сжать файл, вы собираетесь потерять кучу данных, что может быть жизнь заставка в случае стихийных бедствий. Журнал транзакций содержит много полезных данных, которые могут быть прочитаны с помощью стороннего читателя журнала транзакций (это можно прочитать вручную, но с крайним усилием правда).
Журнал транзакций-это также является обязательным, когда дело доходит до восстановления на момент времени, чтобы не просто выбросить, но убедитесь, что вы вернуться его заранее.
Вот несколько постов, где люди используют данные, хранящиеся в журнале транзакций, для выполнения восстановления:
&ампер;усилитель; nbsp;
USE DATABASE_NAME;
GO
ALTER DATABASE DATABASE_NAME
SET RECOVERY SIMPLE;
GO
--First parameter is log file name and second is size in MB
DBCC SHRINKFILE (DATABASE_NAME_Log, 1);
ALTER DATABASE DATABASE_NAME
SET RECOVERY FULL;
GO
Вы можете получить сообщение об ошибке, которое выглядит как это, когда выполнение команд выше
“не удалось сжать файл журнала (файла журнала), потому что логично файл журнала, расположенный в конце файл уже используется“
Это означает, что TLOG находится в использовании. В этом случае пробуйте выполнить это несколько раз подряд или найти способ уменьшить деятельности базы данных.
Вот простой и очень неэлегантный & потенциально опасный способ.
Я предполагаю, что вы не делаете резервное копирование журнала. (При этом журнал усекается). Мой совет - изменить модель восстановления с full на simple. Это предотвратит разрастание журнала.
Если вы не используете журналы транзакций для восстановления (т.е. делаете только полные резервные копии), вы можете установить режим восстановления "Простой", и журнал транзакций очень быстро уменьшится и больше никогда не будет заполняться.
Если вы используете SQL 7 или 2000, вы можете включить опцию "Усекать журнал при контрольной точке" на вкладке опций базы данных. Это дает тот же эффект.
Это не рекомендуется использовать в производственных средах, так как вы не сможете восстановить данные на определенный момент времени.
Журнал транзакций SQL Server должен быть надлежащим образом во избежание его нежелательного роста. Это означает, что выполняется резервное копирование журнала транзакций достаточно часто. Поступая так, вы рискуете журнала транзакций, чтобы стать полной и начинают расти.
К тому же ответы на этот вопрос рекомендую почитать и понимание журнала транзакций распространенных мифов. Эти показания могут помочь в понимании журнала транзакций и решить, какие приемы использовать, чтобы "ясный" это:
С 10 наиболее важных транзакций из журнала мифы:
миф: мой SQL сервер слишком занят. Я не хочу делать SQL сервер резервного копирования журнала транзакций
один из крупнейших интенсивное выполнение операций в SQL Server-это автоматическое увеличение событий в файл журнала транзакций. Не делая резервных копий журнала транзакций достаточно часто, онлайн журнал транзакций станет полной и будет расти. Размер роста по умолчанию составляет 10%. Больше база данных, тем быстрее онлайн журнал транзакций будет расти, если резервные копии журнала транзакций не создаются Создание резервной копии журнала транзакций SQL Server не блокировать онлайн журнала транзакций, но автоматический рост события. Он может блокировать всю деятельность в онлайн-журнале транзакций
миф: регулярный журнал отпрянуть хороший ремонт практике
ложная. Рост журнала стоит очень дорого, потому что новый блок должен быть обнуленные. Все пишут прекращает работу на этой базе, пока пристрелка закончена, и если ваши записи на диск медленный или размер авторасширение большой, что пауза может быть огромным и пользователи заметят. Это одна из причин, почему вы хотите, чтобы избежать роста. Если вы сожмите журнала, он будет расти снова, и вы просто тратите дисковых операций на само сокращение-и-расти-опять игра
Большинство ответов здесь пока предполагается, что вы фактически не нуждаетесь в файл журнала транзакций, однако, если ваша база данных использует "полную" модель восстановления, и вы хотите, чтобы сохранить ваши резервные копии в случае, если вам нужно восстановить базу данных, то не обрезать или удалить файл журнала как многие из этих ответов предложить.
Исключения в лог-файл (через усек он, отбрасывая ее, стирая ее, и т. д.) будут ломать ваши резервные цепи, и предотвратит восстановление на любой момент времени с момента последнего полного, дифференциального или резервной копии журнала транзакций, до следующей полной или разностной резервной копии осуществляется.
От [Майкрософт на'BACKUP`](http://msdn.microsoft.com/en-us/library/ms186865(в=в SQL.90).аспн)
не рекомендуется использовать параметр no_log и TRUNCATE_ONLY вручную усечь журнал транзакций, так как это нарушает цепочку журналов. Пока В следующую полную или разностную резервную копию базы данных, база данных не защищен от сбоя носителя. Используйте ручное усечение журнала только особые обстоятельства, и создавать резервные копии данных сразу.
Чтобы избежать этого, резервное копирование файла журнала С диск прежде чем уменьшить его. Синтаксис будет выглядеть так:
BACKUP LOG MyDatabaseName
TO DISK='C:\DatabaseBackups\MyDatabaseName_backup_2013_01_31_095212_8797154.trn'
DBCC SHRINKFILE (N'MyDatabaseName_Log', 200)
Эта техника, что Джон рекомендует не рекомендуется, поскольку нет никакой гарантии, что база данных будет присоединить без файла журнала. Изменение базы данных с полной на простую, сил контрольно-пропускной пункт и подождите несколько минут. В SQL Server будет очистить журнал, который потом можно сократить, используя DBCC shrinkfile приложения.
Используйте инструкцию DBCC shrinkfile команда ({logicalLogName}, никакого) команда`. Если это тестовая база данных и вы пытаетесь спасти/освободить пространство, это поможет.
Помните, однако, что журналы Техас есть своего рода минимальной/устойчивого состояния, размера, что они вырастут. В зависимости от модели вашего восстановления, вы не можете быть в состоянии сжать лог - если в полном объеме и вы'т выдачи Техас резервные копии журнала Журнал может'т быть сокращен - он будет расти вечно. Если вы Don'т нужна Техас резервные копии журналов, переключить модель восстановления простой.
И помните, никогда ни при каких обстоятельствах удалить журнал (ЛДФ) файл! Вы будете в значительной степени имеют мгновенный повреждение базы данных. Приготовлено! Молодец! Потерянные данные! Если оставили "ремонтом" в основной MDF файл может быть поврежден навсегда.
Никогда не удалить журнал транзакций - вы потеряете данные! Часть данных находится в Техас журнала (независимо от модели восстановления)... при отключении и "переименовать" в Техас файл журнала, который эффективно удаляет частью вашей базы данных.
Для тех, кто удалил журнал Техас, вы можете запустить несколько CHECKDB в команды и исправить повреждения, прежде чем вы потеряете больше данных.
Проверьте пол Рэндал's в блогах на эту тему, вредные советы.
И вообще не используйте shrinkfile с файлами MDF, как это может сильно фрагментировать свои данные. Проверьте свою плохую раздел советов для получения дополнительной информации ("Почему вы не должны сжать свои файлы данных и")
Проверьте пол'сайт S - он охватывает эти вопросы. В прошлом месяце он прошел через многие из этих вопросов в его мифы день серии.
Сначала проверьте модель восстановления базы данных. По умолчанию SQL Server, Экспресс-выпуск создаст базу данных для простого восстановления модель (если не ошибаюсь).
Резервную копию журнала базы данных с Truncate_Only:
DBCC ShrinkFile(yourLogical_LogFileName, 50)
SP_helpfile даст вам логическое имя файла журнала.
Обратитесь к:
Оправиться от переполнения журнала транзакций в базе данных SQL-сервера
Если ваша база данных в модели полного восстановления, а если вы не принимаете резервного копирования Тл, а затем изменить его на простой.
По моему опыту на большинстве SQL-серверов нет резервной копии журнала транзакций. Полные резервные копии или дифференциальные резервные копии являются обычной практикой, но резервные копии журналов транзакций очень редко. Поэтому файл журнала транзакций растет вечно (пока диск не будет заполнен). В этом случае модели восстановления должен быть установлен, чтобы "простойи". Дон'т забудьте изменить систему баз данных на "модели" и "база данных tempdb-то" тоже.
Резервное копирование базы данных "база данных tempdb на" смысла нет, так как модель восстановления БД всегда должен быть "простой" по.
Для усечения файла журнала:.
Чтобы уменьшить файл журнала:.
Резервное копирование журнала [DBName] с параметром No_Log
Сократите базу данных либо:
Используя Enterprise manager :- Щелкните правой кнопкой мыши на базе данных, Все задачи, Сократить базу данных, Файлы, Выберите файл журнала, OK.
Используя T-SQL :- Dbcc Shrinkfile ([Log_Logical_Name]).
Вы можете найти логическое имя файла журнала, запустив sp_helpdb или посмотрев в свойствах базы данных в Enterprise Manager.
Попробуйте это:
USE DatabaseName
GO
DBCC SHRINKFILE( TransactionLogName, 1)
BACKUP LOG DatabaseName WITH TRUNCATE_ONLY
DBCC SHRINKFILE( TransactionLogName, 1)
GO
База данных → щелкните правой кнопкой мыши Свойства файл → → добавить еще один лог-файл с другим именем и указать путь такой же как и старый лог-файл с другим именем файла.
База данных автоматически подбирает вновь созданный файл журнала.
Это будет работать, но он предложил, чтобы взять резервную копию базы данных в первую очередь.
Это случилось со мной, когда файл журнала базы данных 28 ГБС.
Что вы можете сделать, чтобы уменьшить это? На самом деле, лог-файлы-это те файл данных, которые SQL-сервер держит, когда сделка совершилась. Операции для процесса SQL Server выделяет страниц то же самое. Но после завершения сделки, это не вдруг выпустили в надежде, что там может быть сделка идет как один и тот же. Это держит пространство.
Шаг 1: Сначала выполните эту команду в запрос к базе данных, изучены контрольно-пропускной пункт
Шаг 2: Щелкните правой кнопкой мыши на базе данных Задача> резервное копирование Выберите тип как журнал транзакций Добавить адрес назначения и имя файла для сохранения данных резервного копирования (.бак)
Повторите этот шаг снова и на этот раз дать другое имя файла
Шаг 3: Теперь перейдите к базе данных Щелкните правой кнопкой мыши на базе данных
Задачи> усыхает> файлы Выбрать тип файла как войти Термоусадочная действия как освободить неиспользуемое пространство
Шаг 4:
Проверьте файл журнала обычно в SQL 2014 это может быть найдено в
C:\Program файлы MSSQL12\корпорация Майкрософт SQL сервер.MSSQL2014EXPRESS\MSSQL ДАННЫХ\
В моем случае, ее сократили с 28 ГБ до 1 МБ
Некоторые другие ответы не работает для меня: не удалось создать контрольную точку, пока БД была на сайте, потому что журнал транзакций был полный (как иронично). Однако, после установки базы данных в аварийный режим, мне удалось сжать файл журнала:
alter database <database_name> set emergency;
use <database_name>;
checkpoint;
checkpoint;
alter database <database_name> set online;
dbcc shrinkfile(<database_name>_log, 200);
DBCC SQLPERF(LOGSPACE)
BACKUP LOG Comapny WITH TRUNCATE_ONLY
DBCC SHRINKFILE (Company_log, 500)
DBCC SQLPERF(LOGSPACE)