2013-07-16 6 views
73

У меня есть длительный процесс, который содержит транзакцию на полную длительность.Полный журнал транзакций для базы данных

У меня нет контроля над тем, как это выполняется.

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

Таким образом, процесс выходит из строя с ошибкой "The transaction log for database 'xxx' is full".

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

Не уверен, что я должен попробовать дальше. Процесс работает в течение нескольких часов, поэтому играть в пробную версию и ошибки непросто.

Любые идеи?

Если кому-то интересно, то процесс импорта организации в Microsoft Dynamics CRM 4.0.

Существует много дискового пространства, у нас есть журнал в простом режиме регистрации и резервное копирование журнала до сбрасывая процесса.

- = - = - = - = - ОБНОВЛЕНИЕ - = - = - = - = -

Спасибо всем за комментарии до сих пор. Ниже то, что привело меня к мысли о том, что журнал не будет расти из-за открытой сделки:

Я получаю следующее сообщение об ошибке ...

Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception: 
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases 

Так следуя этому совету я пошел в «log_reuse_wait_desc column in sys.databases» и он держал значение «ACTIVE_TRANSACTION».

Согласно Microsoft: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx

Это означает следующее:

транзакция активна (все модели восстановления). • Долгосрочная транзакция может существовать в начале резервной копии журнала. В этом случае для освобождения пространства может потребоваться другая резервная копия журнала. Дополнительные сведения см. В разделе «Длительные активные транзакции» далее в этом разделе.

• Отложенная транзакция (только для SQL Server 2005 Enterprise Edition и более поздних версий). Отложенная транзакция - это фактически активная транзакция, откат которой заблокирован из-за некоторого недоступного ресурса. Для получения информации о причинах отложенных транзакций и способах их перемещения из состояния отложенного платежа см. Раздел Отложенные транзакции.

Я что-то не понял?

- = - = - = - ОБНОВЛЕНИЕ 2 - = - = - = -

Просто стартовал процесс с начальным размером файла журнала, установленным в 30GB. Это займет пару часов.

- = - = - = - Final ОБНОВЛЕНИЕ - = - = - = -

Вопрос был фактически вызван лог-файл, потребляющего все доступное дисковое пространство.В последней попытке я освободил 120 ГБ, и он все еще использовал все это и в конечном итоге потерпел неудачу.

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

Спасибо всем за ваш вклад.

+0

re "... и резервное копирование журнала" .... если база данных находится в Простом режиме, вы не сможете создать резервную копию журнала, резервные копии журнала неприменимы для простого режима. Это объемный журнал? – SqlACID

+1

Я создал резервную копию всей БД и сократил ее, что привело к сокращению журнала до 1 МБ. Затем я увеличил размер файла журнала до 20 ГБ, а теперь 30 ГБ. – Jimbo

ответ

12

Это одноразовый скрипт или регулярная работа?

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

+0

Я бы не сказал, что это разовая работа, но нам редко приходится это делать. Я не создал второй файл журнала, но я увеличил начальный размер моего текущего файла журнала до 30 ГБ. Во время моего последнего запуска он был установлен на 20 ГБ, и он все еще не прошел. – Jimbo

+0

Будет ли второй файл журнала лучше чем-то лучше, чем иметь один большой, учитывая, что у меня есть только один диск для работы? – Jimbo

+0

Как я помню, дополнительный файл в основном позволил нам получить доступ к другому, более крупному приводу. –

11

У вас есть Включить авторасширения и Неограниченные роста файла и включен в лог-файл? Вы можете редактировать их через SSMS в «Свойства базы данных> Файлы»

+0

Да. Он установлен на автокроу 10%, неограничен. Проблема заключается в том, что автонастройка не будет работать, пока есть открытая транзакция. – Jimbo

+1

Вы хоть представляете, насколько велика сделка? попробуйте установить размер журнала транзакций, превышающий эту оценку, в любом случае, если выделение диска не является проблемой, вначале выделяйте много места для данных и журнала. Это улучшает производительность. Не надо * autogrow на 10% *, сделайте это несколькими ГБ, поэтому производительность будет достаточно хорошей. –

+3

SQL Server * будет * автоматически запускать журнал во время транзакции, если для завершения этой транзакции требуется больше места. –

8

Это старый подход к школе, но если вы выполняете итеративное обновление или вставляете операцию в SQL, то, что работает в течение длительного времени, рекомендуется периодически (программно) называть «контрольную точку». Вызов «контрольной точки» заставляет SQL записывать на диск все эти изменения только для памяти (грязные страницы, они называются) и элементы, хранящиеся в журнале транзакций. Это приводит к периодической очистке журнала транзакций, что предотвращает проблемы, подобные описанным.

+1

К сожалению, у меня нет контроля над тем, как выполняется процесс. Dynamics CRM - это приложение Microsoft, и процесс импорта организации является частью этого приложения. – Jimbo

+1

понял ... удачи – Brian

1

Следующее будет обрезать журнал.

USE [yourdbname] 
GO 

-- TRUNCATE TRANSACTION LOG -- 
DBCC SHRINKFILE(yourdbname_log, 1) 
BACKUP LOG yourdbname WITH TRUNCATE_ONLY 
DBCC SHRINKFILE(yourdbname_log, 1) 
GO 

-- CHECK DATABASE HEALTH -- 
ALTER FUNCTION [dbo].[checker]() RETURNS int AS BEGIN RETURN 0 END 
GO 
+4

Привет, Pinal, эта функциональность полностью удалена из SQL Server 2008 и выше: http://www.brentozar.com/archive/2009/08/backup-log-with-truncate-only-in -sql-server-2008/ – Conor

+3

С более поздними версиями попробуйте BACKUP LOG TO DISK = N'NUL: ' – HansLindgren

25

У меня была эта ошибка один раз, и она оказалась на жестком диске сервера, который исчерпывает дисковое пространство.

63

Чтобы устранить эту проблему, измените модель восстановления в Простой затем термоусадочную лог-файлы

1. Database Properties> Параметры> модель восстановления> Простой

2. Задачи базы данных> Усадка> Файлы> Журнал

Готово.

Затем проверьте дб размер файла журнала в Database Properties> Файлы> Файлы базы данных> Путь

Для проверки полного журнала SQL Server: открыть окно просмотра файла журнала в SSMS> База данных> Управление> Logs SQL Server > Current

+7

Нет, это не устраняет проблему. Проблема заключалась в том, что файл журнала рос в течение длительного времени, пока не закончилось дисковое пространство. Он был скорректирован путем временного перемещения файла журнала на другой диск с 1 ТБ свободного места. Вы не можете сжимать файл журнала, пока выполняется длительный процесс, который удерживает транзакцию. Этот процесс несет исключительную ответственность за рост файла. – Jimbo

+0

Как уже сказал @Jimbo, это не устраняет проблему OP. Это может освободить некоторое неиспользуемое пространство, но как только длинная транзакция снова запустится, пространство снова будет занято (и, вероятно, не будет выполнено раньше) – Marcel

+0

Perfect! Благодаря! –

1

Если ваша модель восстановления базы данных заполнена и у вас не было плана обслуживания резервного копирования журнала, вы получите эту ошибку, потому что журнал транзакций будет заполнен из-за LOG_BACKUP.

Это предотвратит любые действия в этой базе данных (например, сжимается), а SQL Server Database Engine вызовет ошибку 9002.

Чтобы преодолеть это поведение, я советую вам проверить это The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP, в котором описаны подробные шаги для решения проблемы.

Смежные вопросы