sql - Журнал транзакций для базы данных заполнен. Журнал транзакций для базы данных переполнен


sql - Журнал транзакций для базы данных заполнен

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

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

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

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

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

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

Любые идеи?

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

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

- = - = - = - = - UPDATE - = - = - = - = -

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

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

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 - = - = - = -

Только что начался процесс с первоначальным размером файла журнала, установленным в 30 ГБ. Это займет пару часов.

- = - = - = - Final UPDATE - = - = - = -

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

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

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

qaru.site

Устранение неполадок при переполнении журнала транзакций (ошибка SLQ Server 9002)

 

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

Когда журнал транзакций переполняется, в компоненте Компонент SQL Server Database Engine происходит ошибка 9002. Журнал может заполниться, когда база данных работает в режиме "в сети" или находится в процессе восстановления. Если журнал заполняется, когда база данных находится в режиме «в сети», база данных остается в режиме «в сети», но доступной только для чтения, но не для обновления. Если журнал заполняется, когда база данных находится в процессе восстановления, компонент Компонент Database Engine помечает базу данных как RESOURCE PENDING. В любом случае необходимо вмешательство пользователя, чтобы сделать журнал транзакций доступным.

Ответные действия при переполнении журнала транзакций частично зависят от условий, которые вызвали переполнение журнала.

Чтобы определить, что препятствует усечению журнала транзакций в конкретном случае, используйте столбцы log_reuse_wait и log_reuse_wait_desc представления каталога sys.database. Дополнительные сведения см. в разделе sys.databases (Transact-SQL). Описание причин, которые могут задержать усечение журнала, см. в разделе Журнал транзакций (SQL Server).

ВАЖНО!Если при возникновении ошибки 9002 база данных находилась в состоянии восстановления, то после устранения проблемы восстановите базу данных с помощью инструкции ALTER DATABASE имябазыданных SET ONLINE.

При переполнении журнала транзакций предусмотрены следующие ответные действия:

  • создание резервной копии журнала;

  • освобождение места на диске, чтобы журнал мог автоматически расти;

  • перемещение файла журнала на диск с достаточным объемом свободного места;

  • увеличение размера файла журнала;

  • добавление файла журнала на другой диск;

  • завершение или уничтожение длительной транзакции.

Эти возможности описаны в следующих разделах. Выберите ответное действие, наиболее подходящее в конкретной ситуации.

Для полных моделей восстановления и моделей с неполным протоколированием резервное копирование может предотвратить усечение журнала транзакций, если оно не было сделано недавно. Если резервная копия журнала создается в первый раз, следует сделать вторую резервную копию журнала, чтобы разрешить компоненту Компонент Database Engine усечение журнала до точки последнего резервного копирования. Усечение журнала освобождает пространство для новых записей журнала. Чтобы избежать повторного переполнения журнала, следует чаще выполнять резервное копирование.

Создание резервной копии журнала транзакций

ВАЖНОЕсли база данных повреждена, см. раздел Резервные копии заключительного фрагмента журнала (SQL Server).

Освобождение места на диске

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

Перемещение файла журнала на другой диск

Если на текущем диске невозможно освободить достаточное количество места, следует переместить файл на другой диск, где места достаточно.

ВАЖНО! Файлы журнала ни в коем случае не следует размещать в файловых системах со сжатием.

Перемещение файла журнала

Увеличение размера файла журнала

Если на диске, на котором находится журнал, доступно свободное место, можно увеличить размер файла журнала. Максимальный объем файлов журнала составляет 2 терабайта (ТБ) на файл журнала.

Увеличение размера файла

Если автоувеличение отключено, база данных находится в режиме «в сети» и на диске достаточно свободного места, выполните одно из следующих действий.

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

  • Включить свойство автоматического увеличения при помощи инструкции ALTER DATABASE, чтобы установить отличное от нуля значение шага роста для параметра FILEGROWTH.

ПРИМЕЧАНИЕ. В любом случае, если достигнут текущий предел размера файла, увеличьте значение MAXSIZE.

Добавление файла журнала на другой диск

Добавьте новый файл журнала базы данных на другом диске, где достаточно места, с помощью инструкции ALTER DATABASE <имябазыданных> ADD LOG FILE.

Добавление файла журнала

Обнаружение длительных транзакций

Очень длительная транзакция может привести к переполнению журнала транзакций. Длительные транзакции можно обнаружить следующими способами:

  • sys.dm_tran_database_transactions. Данное динамическое административное представление возвращает сведения о транзакциях на уровне базы данных. Столбцы этого представления содержат сведения о времени первой записи журнала (database_transaction_begin_time), текущем состоянии транзакции (database_transaction_state) и регистрационном номере (LSN) первой записи в журнале транзакций (database_transaction_begin_lsn).

  • DBCC OPENTRAN. Эта инструкция позволяет установить идентификатор владельца транзакции, таким образом, можно отследить источник транзакции для более упорядоченной остановки (фиксацией, а не откатом).

Завершение транзакции

В некоторых случаях может потребоваться завершить процесс, для этого можно применить инструкцию KILL. Ее следует использовать с осторожностью, особенно если запущены критические процессы, которые нельзя завершать. Дополнительные сведения см. в разделе KILL (Transact-SQL).

Статья базы знаний — неожиданное увеличение или переполнение журнала транзакций в SQL Server ALTER DATABASE (Transact-SQL) Управление размером файла журнала транзакций Резервные копии журналов транзакций (SQL Server) sp_add_log_file_recover_suspect_db (Transact-SQL)

technet.microsoft.com

sql-server - Журнал транзакций для базы данных "databasename" заполнен.

Наиболее вероятным ответом является выполнение резервных копий журнала или существует открытая транзакция.

Вот еще немного, чтобы помочь вам...

Запустите этот script на своем сервере:

-- last FULL backup ;with FULLBUs as ( select d.name, max(b.backup_finish_date) as 'Last FULL Backup' from sys.databases d join msdb.dbo.backupset b on d.name = b.database_name where b.type = 'D' group by d.name ), -- last LOG backup for FULL and BULK_LOGGED databases LOGBUs as ( select d.name, max(b.backup_finish_date) as 'Last LOG Backup' from sys.databases d join msdb.dbo.backupset b on d.name = b.database_name where d.recovery_model_desc <> 'SIMPLE' and b.type = 'L' group by d.name ) -- general overview of databases, recovery model, and what is filling the log, last FULL, last LOG select d.name, d.state_desc, d.recovery_model_desc, d.log_reuse_wait_desc, f.[Last FULL Backup], l.[Last LOG Backup] from sys.databases d left outer join FULLBUs f on d.name = f.name left outer join LOGBUs l on d.name = l.name where d.name not in ('model', 'TempDB') order by d.name

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

Посмотрите на столбец с надписью log_reuse_wait_description. Скорее всего, он говорит BACKUP. Следующая наиболее вероятная причина - TRANSACTION.

Если это BACKUP, вот некоторая информация:

В основном, для ваших простых баз данных каждый день запускайте ПОЛНУЮ резервную копию. Для ваших FULL баз данных каждый день выполняйте полную резервную копию и резервную копию журнала. Отрегулируйте частоту ваших баз данных LOG, чтобы они соответствовали вашей способности потерять данные, сохраняя при этом вашу работу.

Самый простой способ управления резервными копиями - использовать скрипты обслуживания Ola Hallengren. Посетите его веб-сайт и попробуйте использовать их.

Если вы видите TRANSACTION, попробуйте запустить:

dbcc opentran

И отследите, кто имеет открытые транзакции.

qaru.site

sql - Журнал транзакций для базы данных заполнен

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

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

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

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

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

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

Есть идеи?

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

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

- = - = - = - = - UPDATE - = - = - = - = -

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

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

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 « 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 - = - = - = -

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

- = - = - = - Окончательное ОБНОВЛЕНИЕ - = - = - = -

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

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

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

code-examples.net

Полный журнал транзакций для базы данных

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

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

Поскольку транзакция удерживается открытой в течение всего времени, когда журнал транзакций заполняется, 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 ГБ, и он все еще использовал все это и в конечном итоге потерпел неудачу.

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

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

stackoverrun.com