Перейти к содержимому

Pr end of file error ошибка что делать

  • автор:

Код ошибки pr_end_of_file_error

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

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

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

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

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

Причины возникновения ошибки pr_end_of_file_error

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

Основными причинами возникновения ошибки pr_end_of_file_error могут быть:

  • Неправильная обработка конца файла. Программа может не правильно отслеживать конец файла и продолжать пытаться выполнить чтение данных дальше. Это может произойти, если не было выполнено условие проверки достижения конца файла.
  • Отсутствие данных в файле. Если файл не содержит данных, то при попытке чтения из него может возникнуть ошибка pr_end_of_file_error. В таком случае необходимо проверить наличие данных в файле перед выполнением чтения.
  • Некорректное открытие файла. Если файл был открыт некорректно или вообще не был открыт, то при попытке чтения из него будет возникать ошибка pr_end_of_file_error. Необходимо убедиться, что файл был успешно открыт перед выполнением операций чтения.

Для решения ошибки pr_end_of_file_error рекомендуется:

  1. Правильно обрабатывать конец файла. Перед выполнением операции чтения необходимо проверить условие достижения конца файла и прекратить чтение, если оно выполняется. Это можно сделать, например, с помощью условного оператора или специальных функций для работы с файлами.
  2. Проверять наличие данных в файле. Если файл не содержит данных, то перед выполнением операции чтения необходимо проверить его наличие и выполнять операцию только в том случае, если файл не пустой.
  3. Правильно открывать файл. Перед выполнением операции чтения необходимо убедиться, что файл был успешно открыт. Для этого следует проверить код возврата функции открытия файла и обработать возможные ошибки.

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

Возможные решения проблемы с кодом ошибки pr_end_of_file_error

Код ошибки pr_end_of_file_error обычно возникает при попытке доступа к файлу или чтении файловой системы, когда достигнут конец файла, но ожидалась еще информация. Эта ошибка может быть вызвана различными причинами, и для ее устранения могут потребоваться различные действия.

1. Проверьте целостность файла

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

2. Обновите программное обеспечение

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

3. Проверьте наличие вирусов и вредоносных программ

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

4. Восстановите файлы из резервной копии

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

5. Свяжитесь с разработчиком программы или технической поддержкой

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

Рекомендации по предотвращению ошибки pr_end_of_file_error

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

Чтобы предотвратить ошибку pr_end_of_file_error, следует придерживаться нескольких рекомендаций:

1. Проверка наличия файла

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

2. Проверка успешного открытия файла

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

3. Проверка конца файла

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

4. Обработка исключительных ситуаций

Если ошибка pr_end_of_file_error все же возникла, важно обрабатывать ее правильно. Можно использовать конструкцию try-catch для перехвата ошибки и выполнения соответствующих действий: закрытие файла, вывод сообщения об ошибке, запись логов и т.д.

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

Как исправить ошибку «PR END OF FILE ERROR» в Firefox?

При просмотре сайтов в Mozilla Firefox на некоторых из них не удается открыть содержимое из-за ошибки при установлении защищенного соединения PR_END_OF_FILE_ERROR. Неполадка при входе указывает на то, что браузеру не удалось установить безопасное подключение из-за сбоя всех пакетов шифрования.

Чем вызвана ошибка?

С ошибкой PR_END_OF_FILE_ERROR при открытии сайтов можно столкнуться по следующим причинам:

  1. Поврежденный профиль Firefox. Перед удалением профиля экспортируйте закладки для последующего импорта в новый, чтобы не потерять данные.
  2. Включен VPN или прокси-сервер.
  3. Доступ блокируется сторонним антивирусом. Известны случаи, когда к этой ошибке были причастны антивирус Касперского и Eset.

Удаление стороннего антивируса

В большинстве случаев к ошибке PR_END_OF_FILE_ERROR причастны сторонние антивирусы, в частности Касперского и Eset. Поэтому попробуйте его полностью удалить на время поиска причины.

Откройте вкладку Удаления или изменения программ командой appwiz.cpl , запущенной из окна «Выполнить» (Win + R).

В списке найдите антивирус, щелкните на него правой кнопкой мыши и выберите «Удалить». Следуйте инструкциям на экране до завершения удаления.

После перезагрузите компьютер. Попробуйте открыть сайт, доступ на который был прерван ошибкой PR_END_OF_FILE_ERROR.

Сброс Firefox

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

Нажмите в браузере на кнопку меню в правом верхнем углу экрана и перейдите в пункт Справка – Информация для решения проблем.

В верхней правой части экрана нажмите на «Очистить Firefox» .

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

Создание нового профиля Firefox

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

Кликните на значок журналов и перейдите на вкладку «Закладки». Затем щелкните «Показать все закладки».

В меню «Библиотека» нажмите на «Импорт и резервные копии» и выберите «Экспорт закладок в HTML-файл».

Выберите папку для сохранения (предварительно созданную перед этим), укажите имя и кликните на «Сохранить».

Затем в адресной строке браузера впишите «about:profiles» и кликните на Enter для входа в раздел «О профилях».

Затем нажмите на «Создать новый профиль». В первом окне мастера кликните на кнопку «Далее». Введите имя и щелкните на «Готово».

Теперь нужно импортировать сохраненные закладки. Для этого в меню библиотеки выберите «Импорт и резервные копии» – «Импорт закладок в HTML». Перейдите в папку, в которую были сохранены закладки и кликните на «Открыть» для импорта их в новый профиль.

Перезагрузите браузер и посмотрите, возникает ли сообщение PR_END_OF_FILE_ERROR при открытии страницы.

Отключение VPN или прокси-сервера

Если используете VPN-клиент или прокси-сервер, то, скорее всего, именно по этой причине сталкиваетесь с сообщением об ошибке. Для отключения этого программного обеспечения следуйте инструкции.

Удаление VPN-клиента

Откройте раздел «Программы и компоненты» командой appwiz.cpl из окна «Выполнить» (Win + R).

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

Отключение прокси-сервера

Перейдите на вкладку Прокси командой ms-settings:network-proxy из окна «Выполнить».

В правой части экрана найдите и отключите переключатель, связанный с использованием прокси-сервера.

Закройте окно, и перезагрузите компьютер. Попробуйте открыть страницу, которую до этого не удавалось из-за ошибки.

How to Fix the PR_END_OF_FILE_ERROR Secure Connection Error

PR_END_OF_FILE_ERROR

Browser-based errors are often rare, and when they pop up, you can quickly determine the cause. For example, 404 errors, 502 bad gateway errors, and more all have specific fixes or causes. The PR_END_OF_FILE_ERROR isn’t one you’ll see on a regular basis, but it’s frustrating when you do, and it’ll need your immediate attention. If you’re a Safari or Chromium-variant user, this error won’t affect you. It’s a Firefox-only issue that has a few different fixes. There’s no deep technical knowledge required, though, and you’ll have all of the tools and skills you need to resolve the error. For this article, we’re going to look at everything to do with the PR_END_OF_FILE_ERROR. We’ll show you how to fix it and avoid it in the future. First, though, we’re going to explain what the error is and how it’s caused.

What is the PR_END_OF_FILE_ERROR?

The PR_END_OF_FILE_ERROR is a secure connection issue. It’s a Firefox-specific error that happens when the browser can’t establish a secure connection with the website. Therefore, it is a problem on the client-side.

An example of the PR_END_OF_FILE_ERROR.

To go a little deeper into the details of this definition, we have to talk about “cipher suites.” This can get complex, but in a broad sense, it’s a list of instructions to help secure and authenticate a network connection over an encrypted protocol. If a connection uses Secure Sockets Layers (SSL) or Transport Layer Security (TLS), the browser will look to connect by running down the list of cipher suites. Once it finds a match, the connection is made, and the user can continue. If not, you’ll get a secure connection error. In a nutshell, the error tells you that the browser has run through its list of cipher suites and doesn’t have a match. In a literal sense, it has reached the end of the cipher suite file and returned nothing. The PR_END_OF_FILE_ERROR only happens on Mozilla Firefox, which means you won’t see this in Safari, Chrome, Brave, or Edge. It will often affect every website you try to navigate to. Our research didn’t uncover any explicit reason for why this is, but you’ll get more of an idea of the causes in later sections. This is a secure connection issue, but it’s not the same as those you’ll see in other browsers. Here, the problem lies with third-party software or a browser configuration issue rather than inherent security.

Error Code PR_END_OF_FILE_ERROR
Error Type Browser error
Error Variations Secure Connection Failed
Error Causes Incorrect or corrupted Firefox profile
Incorrect ciphers
Misconfigured VPN or proxy
Third-party security software interference

What Causes the PR_END_OF_FILE_ERROR?

  1. An incorrect or corrupt browser profile. This is a common cause for the error and could be the reason why it’s Firefox-specific.
  2. Incorrect ciphers. It could be that the ciphers themselves are incorrect, which means you’ll need to import the right ones.
  3. Misconfigured proxy or Virtual Private Network (VPN) connections. If your connection seems ambiguous with regard to your location, this can sometimes cause the error.
  4. Third-party security software interference. This is a classic reason for many errors and issues on a computer and will affect Windows machines much more than Mac.

For the most part, the specific causes aren’t too technical (although they may seem that way at first glance). Throughout this article, we’ll show you how to fix the PR_END_OF_FILE_ERROR and re-enable your ability to browse the web.

1. Disable Your Third-Party Security Software

One of the big differences between Windows and Mac machines is the reliance on security and antivirus software. Both Linux and macOS have an infrastructure that means these types of programs aren’t necessary to browse the web in safety.

As such, this first fix will apply mostly to Windows Firefox users. The concept is that your security and antivirus see the cipher suites as a potential threat. Taking this software out of the equation means you can test the connection without interference.

While there are too many available solutions to give specific details on here, there will be a similar process for all software:

  1. Access the dashboard for your solution and toggle it off. In lots of cases, there will be a marked button or switch for doing so.
  2. Once you’ve done this, exit out of the program and reboot your computer. We recommend you shut down, wait 30 seconds, then restart. This gives your computer’s memory time to clear.
  3. Check that the software isn’t running again when you’re back onto your desktop, as this can happen on startup.
  4. Check your browser and see if the error persists.

If not, you’re good to go about your browsing as before. If you still see the PR_END_OF_FILE_ERROR, though, you’ll want to look at the next few fixes.

2. Disable Your VPN or Proxy

Much like your security and antivirus software, your VPN and proxy settings could also have an impact on your browser. The reasons for this are similar to the previous section: the inherent functionality involved can “block” connections and cause your browser to think cipher suites don’t exist.

The good news is that you would disable your VPN the same way as your antivirus — it should be a one-click process. From there, reboot again and check your connection in-browser.

The process to disable your proxy is more involved but still achievable. For Mac users, first, open System Preferences > Network.

Opening the Apple Network page.

If you need to click the “lock” icon to make changes, do so here.

Select the network service you use (likely Wi-Fi in most cases) when you’re ready, then click the Advanced button. On the next screen, open the Proxies tab:

The Proxies page.

In our example, we have no proxies configured or selected. In your case, you may see some of the options checked. Your task here is to uncheck them, click OK, reboot your computer, then test your connection.

For Windows users, disabling your proxy server is just as straightforward. First, type “Proxy” into the search bar, and open the shortcut to the proxy settings:

The Windows proxy settings.

From here, scroll down to the Manual proxy setup section, and toggle the Use a proxy server switch to Off:

The proxy server toggle switch within Windows.

As with the other methods, reboot your computer again and try to navigate to a page. If you still have the PR_END_OF_FILE_ERROR, you may need to dig into your browser’s settings.

3. Reset Firefox’s Secure Sockets Layer (SSL) Settings

Your first instinct might be to skip over this solution, especially if you haven’t touched your browser’s SSL settings. However, it’s still worth going through this fix because it’s quick to accomplish and could resolve your issues without further work.

To reset your SSL settings, head to the “hamburger” menu within Firefox and click the Help option:

The Firefox Help menu.

From here, select More Troubleshooting Information. This will pop a screen up in-browser showing some diagnostics:

The Troubleshooting Information screen.

Here, click the Refresh Firefox button, and your browser will restart. This is enough to reset your SSL settings, so check out whether you can browse the web at this point. If not, there is another technical fix we can carry out.

4. Disable the Domain Name System (DNS) Over HTTPS Within Firefox

In short, your DNS is how you can browse the web using URLs such as kinsta.com. DNS over HTTPS is a protocol for these DNS requests through HTTPS.

The goal of the protocol is to stop machine-in-the-middle attacks and prevent malicious “eavesdropping,” but this normally helpful feature of Firefox can also cause the PR_END_OF_FILE_ERROR.

The solution is to disable it. To do this, head to your Firefox Preferences screen. This is through the hamburger menu within the browser, or you could use the toolbar instead:

Firefox’s Preferences menu option.

From here, make sure you’re on the General screen:

Firefox’s General Preferences.

If you scroll down to the Network Settings section and click the Settings… button, you’ll open the Connection Settings:

The Firefox Connection Settings.

From here, find the Enable DNS over HTTPS option, and uncheck the box. Once you restart Firefox, check your browser and see if the error has gone.

5. Create a New Firefox Profile

At this point, you will have run through most of the fixes for the PR_END_OF_FILE_ERROR. If you still have no luck resolving it, rebuilding your Firefox browser profile should get you back up and running.

Before you do this, it’s a good idea to save your bookmarks. You can access the bookmark library in a few ways — you can use the Library button in the toolbar, utilize a keyboard shortcut, or click the Bookmarks > Show All Bookmarks in the menu bar:

The Show All Bookmarks option within Firefox.

Here, select the All Bookmarks option from the tree explorer, and choose the Import and Export option at the top. It looks like two arrows pointing in opposite directions:

Exporting bookmarks within Firefox.

Click Export Bookmarks to HTML…, and save the file somewhere you can reach it again. From here, open the Profile Manager by typing “about:profiles” into the Firefox browser bar and clicking Enter. This will bring up a screen showing your current list of profiles and a button to create a new one:

The Create a New Profile button in Firefox.

If you click this button, you can enter a new user name. Once you confirm, this new user will show at the bottom of the Profile Manager:

A new user within the Firefox Profile Manager.

At this point, click Launch profile in new browser, and the PR_END_OF_FILE_ERROR should disappear. You’ll also want to import your bookmarks, following our advice from earlier on. It’s the same process, but this time you’ll choose Import Bookmarks From HTML….

How To Avoid the PR_END_OF_FILE_ERROR?

In the future, you’ll want to make sure the PR_END_OF_FILE_ERROR won’t return. To do this, you should consider the following:

  • Determine whether your third-party security or antivirus software is actually needed. At the same time, consider whether you need a new solution (or new settings) that won’t cause the error again. You might also want to check your VPN solution for the same reasons.
  • Take a look at your proxy settings to see if a change is necessary. If you’re causing an issue here, there may be other areas that your proxy is affecting.
  • Your SSL settings are often set in an optimal way. As such, tinkering with them if you’re not an expert could spell disaster.

It could be that you’ll see the PR_END_OF_FILE_ERROR again regardless of your preventative measures. As such, having the knowledge on hand is going to serve you well alongside taking precautions.

Summary

Browser errors are few and far between and often are straightforward to diagnose and fix. That said, the PR_END_OF_FILE_ERROR is a strange one because it’s Firefox-specific and rare.

Even so, you can fix the issue without digging too deep into your technical knowledge. The first port of call is to disable any security or antivirus software. From there, you can check and reset any SSL or DNS settings and — if all else fails — rebuild your Firefox browser profile.

While we’re known for stellar uptime and rock-solid stability, our support team is on hand round-the-clock to help you with website or hosting issues. Kinsta customers can contact us through the MyKinsta dashboard and be back up and running in no time!

Get all your applications, databases, and WordPress sites online and under one roof. Our feature-packed, high-performance cloud platform includes:

  • Easy setup and management in the MyKinsta dashboard
  • 24/7 expert support
  • The best Google Cloud Platform hardware and network, powered by Kubernetes for maximum scalability
  • An enterprise-level Cloudflare integration for speed and security
  • Global audience reach with up to 35 data centers and 260 PoPs worldwide

Get started with a free trial of our Application Hosting or Database Hosting. Explore our plans or talk to sales to find your best fit.

Is your WordPress site slow?

Uncover your website’s performance bottlenecks to deliver a better user experience.

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

Эта статья посвящена SQL Server. Дополнительные сведения об этой ошибке на платформах SQL Azure см. в статье «Устранение ошибок журнала транзакций с помощью База данных SQL Azure и устранения ошибок журнала транзакций с помощью Управляемый экземпляр SQL Azure». База данных SQL Azure и Управляемый экземпляр SQL Azure основаны на последней стабильной версии ядра СУБД Microsoft SQL Server, поэтому большая часть изложенной здесь информации об устранении неполадок совпадает, а инструменты могут отличаться.

Вариант 1. Выполнение действий непосредственно в исполняемой записной книжке с помощью Azure Data Studio

Прежде чем пытаться открыть эту записную книжку, убедитесь, что на локальном компьютере установлен экземпляр Azure Data Studio. Инструкции по установке см. в статье Узнайте, как установить Azure Data Studio.

Вариант 2. Выполнение шага вручную

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

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

Распространенные причины переполнения журнала транзакций

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

  • журнал не усекается;
  • Том диска заполнен
  • для размера журнала задано фиксированное максимальное значение или отключено автоматическое увеличение;
  • не удается завершить синхронизацию группы доступности или репликацию.

Решение проблемы переполнения журнала транзакций

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

1. Усечение журнала

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

Описание процесса усечения журнала

Существует разница между усечением журнала транзакций и сжатием журнала транзакций. Усечение журнала обычно происходит во время резервного копирования журнала транзакций. Это логическая операция, при которой удаляются зафиксированные записи в журнале. При сжатии журнала освобождается физическое пространство файловой системы путем уменьшения размера файла. Усечение журнала происходит на границе виртуального файла журнала (VLF), а файл журнала может содержать много VLF. Файл журнала может быть сжат только в том случае, если в файле журнала пустое место для восстановления. Сжатие файла журнала в одиночку не может решить проблему полного файла журнала, вместо этого необходимо обнаружить, почему файл журнала заполнен и не может быть усечен.

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

Что препятствует усечению журнала?

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

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

SET NOCOUNT ON DECLARE @SQL VARCHAR (8000), @log_reuse_wait tinyint, @log_reuse_wait_desc nvarchar(120), @dbname sysname, @database_id int, @recovery_model_desc varchar (24) IF ( OBJECT_id (N'tempdb..#CannotTruncateLog_Db') is not null) BEGIN DROP TABLE #CannotTruncateLog_Db END --get info about transaction logs in each database. IF ( OBJECT_id (N'tempdb..#dm_db_log_space_usage') is not null) BEGIN DROP TABLE #dm_db_log_space_usage END SELECT * INTO #dm_db_log_space_usage FROM sys.dm_db_log_space_usage where 1=0 DECLARE log_space CURSOR FOR SELECT NAME FROM sys.databases OPEN log_space FETCH NEXT FROM log_space into @dbname WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = ' insert into #dm_db_log_space_usage ( database_id, total_log_size_in_bytes, used_log_space_in_bytes, used_log_space_in_percent, log_space_in_bytes_since_last_backup ) select database_id, total_log_size_in_bytes, used_log_space_in_bytes, used_log_space_in_percent, log_space_in_bytes_since_last_backup from ' + @dbname +'.sys.dm_db_log_space_usage' BEGIN TRY exec (@SQL) END TRY BEGIN CATCH SELECT ERROR_MESSAGE() AS ErrorMessage; END CATCH; FETCH NEXT FROM log_space into @dbname END CLOSE log_space DEALLOCATE log_space --select the affected databases SELECT sdb.name as DbName, sdb.log_reuse_wait, sdb.log_reuse_wait_desc, log_reuse_wait_explanation = CASE WHEN log_reuse_wait = 1 THEN 'No checkpoint has occurred since the last log truncation, or the head of the log has not yet moved beyond' WHEN log_reuse_wait = 2 THEN 'A log backup is required before the transaction log can be truncated.' WHEN log_reuse_wait = 3 THEN 'A data backup or a restore is in progress (all recovery models). Please wait or cancel backup' WHEN log_reuse_wait = 4 THEN 'A long-running active transaction or a defferred transaction is keeping log from being truncated. You can attempt a log backup to free space or complete/rollback long transaction' WHEN log_reuse_wait = 5 THEN 'Database mirroring is paused, or under high-performance mode, the mirror database is significantly behind the principal database. (Full recovery model only)' WHEN log_reuse_wait = 6 THEN 'During transactional replication, transactions relevant to the publications are still undelivered to the distribution database. Investigate the status of agents involved in replication or Changed Data Capture (CDC). (Full recovery model only.)' WHEN log_reuse_wait = 7 THEN 'A database snapshot is being created. This is a routine, and typically brief, cause of delayed log truncation.' WHEN log_reuse_wait = 8 THEN 'A transaction log scan is occurring. This is a routine, and typically a brief cause of delayed log truncation.' WHEN log_reuse_wait = 9 THEN 'A secondary replica of an availability group is applying transaction log records of this database to a corresponding secondary database. (Full recovery model only.)' WHEN log_reuse_wait = 13 THEN 'If a database is configured to use indirect checkpoints, the oldest page on the database might be older than the checkpoint log sequence number (LSN).' WHEN log_reuse_wait = 16 THEN 'An In-Memory OLTP checkpoint has not occurred since the last log truncation, or the head of the log has not yet moved beyond a VLF.' ELSE 'None' END, sdb.database_id, sdb.recovery_model_desc, lsu.used_log_space_in_bytes / 1024 as Used_log_size_MB, lsu.total_log_size_in_bytes / 1024 as Total_log_size_MB, 100 - lsu.used_log_space_in_percent as Percent_Free_Space INTO #CannotTruncateLog_Db FROM sys.databases AS sdb INNER JOIN #dm_db_log_space_usage lsu ON sdb.database_id = lsu.database_id WHERE log_reuse_wait > 0 SELECT * FROM #CannotTruncateLog_Db DECLARE no_truncate_db CURSOR FOR SELECT log_reuse_wait, log_reuse_wait_desc, DbName, database_id, recovery_model_desc FROM #CannotTruncateLog_Db; OPEN no_truncate_db FETCH NEXT FROM no_truncate_db into @log_reuse_wait, @log_reuse_wait_desc, @dbname, @database_id, @recovery_model_desc WHILE @@FETCH_STATUS = 0 BEGIN if (@log_reuse_wait > 0) select '-- ''' + @dbname + ''' database has log_reuse_wait = ' + @log_reuse_wait_desc + ' --' as 'Individual Database Report' if (@log_reuse_wait = 1) BEGIN select 'Consider running the checkpoint command to attempt resolving this issue or further t-shooting may be required on the checkpoint process. Also, examine the log for active VLFs at the end of file' as Recommendation select 'USE ''' + @dbname+ '''; CHECKPOINT' as CheckpointCommand select 'select * from sys.dm_db_log_info(' + CONVERT(varchar,@database_id)+ ')' as VLF_LogInfo END else if (@log_reuse_wait = 2) BEGIN select 'Is '+ @recovery_model_desc +' recovery model the intended choice for ''' + @dbname+ ''' database? Review recovery models and determine if you need to change it. https://learn.microsoft.com/sql/relational-databases/backup-restore/recovery-models-sql-server' as RecoveryModelChoice select 'To truncate the log consider performing a transaction log backup on database ''' + @dbname+ ''' which is in ' + @recovery_model_desc +' recovery model. Be mindful of any existing log backup chains that could be broken' as Recommendation select 'BACKUP LOG [' + @dbname + '] TO DISK = ''some_volume:\some_folder\' + @dbname + '_LOG.trn ''' as BackupLogCommand END else if (@log_reuse_wait = 3) BEGIN select 'Either wait for or cancel any active backups currently running for database ''' +@dbname+ '''. To check for backups, run this command:' as Recommendation select 'select * from sys.dm_exec_requests where command like ''backup%'' or command like ''restore%''' as FindBackupOrRestore END else if (@log_reuse_wait = 4) BEGIN select 'Active transactions currently running for database ''' +@dbname+ '''. To check for active transactions, run these commands:' as Recommendation select 'DBCC OPENTRAN (''' +@dbname+ ''')' as FindOpenTran select 'select database_id, db_name(database_id) dbname, database_transaction_begin_time, database_transaction_state, database_transaction_log_record_count, database_transaction_log_bytes_used, database_transaction_begin_lsn, stran.session_id from sys.dm_tran_database_transactions dbtran left outer join sys.dm_tran_session_transactions stran on dbtran.transaction_id = stran.transaction_id where database_id = ' + CONVERT(varchar, @database_id) as FindOpenTransAndSession END else if (@log_reuse_wait = 5) BEGIN select 'Database Mirroring for database ''' +@dbname+ ''' is behind on synchronization. To check the state of DBM, run the commands below:' as Recommendation select 'select db_name(database_id), mirroring_state_desc, mirroring_role_desc, mirroring_safety_level_desc from sys.database_mirroring where mirroring_guid is not null and mirroring_state <> 4 and database_id = ' + convert(sysname, @database_id) as CheckMirroringStatus select 'Database Mirroring for database ''' +@dbname+ ''' may be behind: check unsent_log, send_rate, unrestored_log, recovery_rate, average_delay in this output' as Recommendation select 'exec msdb.sys.sp_dbmmonitoraddmonitoring 1; exec msdb.sys.sp_dbmmonitorresults ''' + @dbname+ ''', 5, 0; waitfor delay ''00:01:01''; exec msdb.sys.sp_dbmmonitorresults ''' + @dbname+ '''; exec msdb.sys.sp_dbmmonitordropmonitoring' as CheckMirroringStatusAnd END else if (@log_reuse_wait = 6) BEGIN select 'Replication transactions still undelivered from publisher database ''' +@dbname+ ''' to Distribution database. Check the oldest non-distributed replication transaction. Also check if the Log Reader Agent is running and if it has encoutered any errors' as Recommendation select 'DBCC OPENTRAN (''' + @dbname + ''')' as CheckOldestNonDistributedTran select 'select top 5 * from distribution..MSlogreader_history where runstatus in (6, 5) or error_id <> 0 and agent_id = find_in_mslogreader_agents_table order by time desc ' as LogReaderAgentState END else if (@log_reuse_wait = 9) BEGIN select 'Always On transactions still undelivered from primary database ''' +@dbname+ ''' to Secondary replicas. Check the Health of AG nodes and if there is latency is Log block movement to Secondaries' as Recommendation select 'select availability_group=cast(ag.name as varchar(30)), primary_replica=cast(ags.primary_replica as varchar(30)),primary_recovery_health_desc=cast(ags.primary_recovery_health_desc as varchar(30)), synchronization_health_desc=cast(ags.synchronization_health_desc as varchar(30)),ag.failure_condition_level, ag.health_check_timeout, automated_backup_preference_desc=cast(ag.automated_backup_preference_desc as varchar(10)) from sys.availability_groups ag join sys.dm_hadr_availability_group_states ags on ag.group_id=ags.group_id' as CheckAGHealth select 'SELECT group_name=cast(arc.group_name as varchar(30)), replica_server_name=cast(arc.replica_server_name as varchar(30)), node_name=cast(arc.node_name as varchar(30)),role_desc=cast(ars.role_desc as varchar(30)), ar.availability_mode_Desc, operational_state_desc=cast(ars.operational_state_desc as varchar(30)), connected_state_desc=cast(ars.connected_state_desc as varchar(30)), recovery_health_desc=cast(ars.recovery_health_desc as varchar(30)), synchronization_health_desc=cast(ars.synchronization_health_desc as varchar(30)), ars.last_connect_error_number, last_connect_error_description=cast(ars.last_connect_error_description as varchar(30)), ars.last_connect_error_timestamp, primary_role_allow_connections_desc=cast(ar.primary_role_allow_connections_desc as varchar(30)) from sys.dm_hadr_availability_replica_cluster_nodes arc join sys.dm_hadr_availability_replica_cluster_states arcs on arc.replica_server_name=arcs.replica_server_name join sys.dm_hadr_availability_replica_states ars on arcs.replica_id=ars.replica_id join sys.availability_replicas ar on ars.replica_id=ar.replica_id join sys.availability_groups ag on ag.group_id = arcs.group_id and ag.name = arc.group_name ORDER BY cast(arc.group_name as varchar(30)), cast(ars.role_desc as varchar(30))' as CheckReplicaHealth select 'select database_name=cast(drcs.database_name as varchar(30)), drs.database_id, drs.group_id, drs.replica_id, drs.is_local,drcs.is_failover_ready,drcs.is_pending_secondary_suspend, drcs.is_database_joined, drs.is_suspended, drs.is_commit_participant, suspend_reason_desc=cast(drs.suspend_reason_desc as varchar(30)), synchronization_state_desc=cast(drs.synchronization_state_desc as varchar(30)), synchronization_health_desc=cast(drs.synchronization_health_desc as varchar(30)), database_state_desc=cast(drs.database_state_desc as varchar(30)), drs.last_sent_lsn, drs.last_sent_time, drs.last_received_lsn, drs.last_received_time, drs.last_hardened_lsn, drs.last_hardened_time,drs.last_redone_lsn, drs.last_redone_time, drs.log_send_queue_size, drs.log_send_rate, drs.redo_queue_size, drs.redo_rate, drs.filestream_send_rate, drs.end_of_log_lsn, drs.last_commit_lsn, drs.last_commit_time, drs.low_water_mark_for_ghosts, drs.recovery_lsn, drs.truncation_lsn, pr.file_id, pr.error_type, pr.page_id, pr.page_status, pr.modification_time from sys.dm_hadr_database_replica_cluster_states drcs join sys.dm_hadr_database_replica_states drs on drcs.replica_id=drs.replica_id and drcs.group_database_id=drs.group_database_id left outer join sys.dm_hadr_auto_page_repair pr on drs.database_id=pr.database_id order by drs.database_id' as LogMovementHealth select 'For more information see https://learn.microsoft.com/troubleshoot/sql/availability-groups/error-9002-transaction-log-large' as OnlineDOCResource END else if (@log_reuse_wait in (10, 11, 12, 14)) BEGIN select 'This state is not documented and is expected to be rare and short-lived' as Recommendation END else if (@log_reuse_wait = 13) BEGIN select 'The oldest page on the database might be older than the checkpoint log sequence number (LSN). In this case, the oldest page can delay log truncation.' as Finding select 'This state should be short-lived, but if you find it is taking a long time, you can consider disabling Indirect Checkpoint temporarily' as Recommendation select 'ALTER DATABASE [' +@dbname+ '] SET TARGET_RECOVERY_TIME = 0 SECONDS' as DisableIndirectCheckpointTemporarily END else if (@log_reuse_wait = 16) BEGIN select 'For memory-optimized tables, an automatic checkpoint is taken when transaction log file becomes bigger than 1.5 GB since the last checkpoint (includes both disk-based and memory-optimized tables)' as Finding select 'Review https://blogs.msdn.microsoft.com/sqlcat/2016/05/20/logging-and-checkpoint-process-for-memory-optimized-tables-2/' as ReviewBlog select 'use ' +@dbname+ ' CHECKPOINT' as RunCheckpoint END FETCH NEXT FROM no_truncate_db into @log_reuse_wait, @log_reuse_wait_desc, @dbname, @database_id, @recovery_model_desc END CLOSE no_truncate_db DEALLOCATE no_truncate_db 

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

LOG_BACKUP log_reuse_wait

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

Рассмотрим модель восстановления базы данных

Возможно, вам не удастся усечь журнал транзакций, если для LOG_BACKUP используется категория log_reuse_wait, так как вы никогда не создавали резервную копию. Также возможно, что база данных использует модель восстановления FULL или BULK_LOGGED, но резервное копирование журналов транзакций не выполнялось. Следует тщательно изучить каждую модель восстановления базы данных: чтобы избежать возникновения ошибки 9002, выполните резервное копирование журналов транзакций для всех баз данных с моделями восстановления FULL или BULK LOGGED. Дополнительные сведения см. в статье о моделях восстановления.

Резервное копирование журнала

В рамках моделей восстановления FULL и BULK_LOGGED резервное копирование может предотвратить усечение журнала транзакций, если резервная копия журнала не была создана недавно. Необходимо создать резервную копию журнала транзакций, чтобы разрешить освобождение записей журнала и усечение журнала. Если журнал никогда не был создан, необходимо создать две резервные копии журналов, чтобы позволить ядро СУБД усечь журнал до точки последней резервной копии. Усечение журнала освобождает логическое пространство для новых записей журнала. Чтобы избежать повторного переполнения журнала, резервное копирование следует выполнять часто и регулярно. Дополнительные сведения см. в статье о моделях восстановления.

Полный журнал резервных копий и операций восстановления в экземпляре сервера SQL Server хранится в системной базе данных msdb . Чтобы ознакомиться с полным журналом резервного копирования базы данных, используйте следующий пример скрипта:

SELECT bs.database_name , backuptype = CASE WHEN bs.type = 'D' and bs.is_copy_only = 0 THEN 'Full Database' WHEN bs.type = 'D' and bs.is_copy_only = 1 THEN 'Full Copy-Only Database' WHEN bs.type = 'I' THEN 'Differential database backup' WHEN bs.type = 'L' THEN 'Transaction Log' WHEN bs.type = 'F' THEN 'File or filegroup' WHEN bs.type = 'G' THEN 'Differential file' WHEN bs.type = 'P' THEN 'Partial' WHEN bs.type = 'Q' THEN 'Differential partial' END + ' Backup' , bs.recovery_model , BackupStartDate = bs.Backup_Start_Date , BackupFinishDate = bs.Backup_Finish_Date , LatestBackupLocation = bf.physical_device_name , backup_size_mb = bs.backup_size/1024./1024. , compressed_backup_size_mb = bs.compressed_backup_size/1024./1024. , database_backup_lsn -- For tlog and differential backups, this is the checkpoint_lsn of the FULL backup it is based on. , checkpoint_lsn , begins_log_chain FROM msdb.dbo.backupset AS bs LEFT OUTER JOIN msdb.dbo.backupmediafamily AS bf ON bs.[media_set_id] = bf.[media_set_id] WHERE recovery_model in ('FULL', 'BULK-LOGGED') AND bs.backup_start_date > DATEADD(month, -2, sysdatetime()) --only look at last two months ORDER BY bs.database_name asc, bs.Backup_Start_Date desc; 

Полный журнал резервных копий и операций восстановления в экземпляре сервера SQL Server хранится в системной базе данных msdb . Дополнительные сведения о журнале резервного копирования см. в статье Журнал и сведения о заголовке резервной копии (SQL Server).

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

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

BACKUP LOG [dbname] TO DISK = 'some_volume:\some_folder\dbname_LOG.trn' 
  • Создание резервной копии журнала транзакций (SQL Server)
  • SqlBackup (SMO)

ACTIVE_TRANSACTION log_reuse_wait

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

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

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

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

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

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

AVAILABILITY_REPLICA log_reuse_wait

Если изменения транзакций на первичной реплике доступности еще не зафиксированы на вторичной реплике, журнал транзакций на первичной реплике не может быть усечен. Это может привести к росту журнала и может произойти, задан ли дополнительный реплика для синхронного или асинхронного режима фиксации. Сведения о том, как устранить неполадки такого типа, см. в статье Ошибка 9002. Журнал транзакций для базы данных переполнен из-за ошибки AVAILABILITY_REPLICA.

CHECKPOINT log_reuse_wait

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

Это широко распространенная причина задержки усечения журнала. При возникновении задержки можно применить команду CHECKPOINT в базе данных или проверить файлы VLF журнала.

USE dbname; CHECKPOINT select * from sys.dm_db_log_info(db_id('dbname')) 

Дополнительные сведения о факторах log_reuse_wait

2. Устранение проблемы с переполнением тома диска

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

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

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

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

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

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

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

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

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

Скрипт служебной программы для выполнения рекомендуемых действий

Эти действия могут быть частично автоматизированы, выполнив этот скрипт T-SQL, который будет определять файлы журналов, которые используют большой процент дискового пространства и предлагают действия:

DECLARE @log_reached_disk_size BIT = 0 SELECT name LogName, physical_name, CONVERT(bigint, size)*8/1024 LogFile_Size_MB, volume_mount_point, available_bytes/1024/1024 Available_Disk_space_MB, (CONVERT(bigint, size)*8.0/1024)/(available_bytes/1024/1024 )*100 file_size_as_percentage_of_disk_space, db_name(mf.database_id) DbName FROM sys.master_files mf CROSS APPLY sys.dm_os_volume_stats (mf.database_id, file_id) WHERE mf.[type_desc] = 'LOG' AND (CONVERT(bigint, size)*8.0/1024)/(available_bytes/1024/1024 )*100 > 90 --log is 90% of disk drive ORDER BY size DESC if @@ROWCOUNT > 0 BEGIN set @log_reached_disk_size = 1 -- Discover if any logs have are close to or completely filled disk volume they reside on. -- Either Add A New File To A New Drive, Or Shrink Existing File -- If Cannot Shrink, Go To Cannot Truncate Section DECLARE @db_name_filled_disk sysname, @log_name_filled_disk sysname, @go_beyond_size bigint DECLARE log_filled_disk CURSOR FOR SELECT db_name(mf.database_id), name FROM sys.master_files mf CROSS APPLY sys.dm_os_volume_stats (mf.database_id, file_id) WHERE mf.[type_desc] = 'LOG' AND (convert(bigint, size)*8.0/1024)/(available_bytes/1024/1024 )*100 > 90 --log is 90% of disk drive ORDER BY size desc OPEN log_filled_disk FETCH NEXT FROM log_filled_disk into @db_name_filled_disk , @log_name_filled_disk WHILE @@FETCH_STATUS = 0 BEGIN SELECT 'Transaction log for database "' + @db_name_filled_disk + '" has nearly or completely filled disk volume it resides on!' AS Finding SELECT 'Consider using one of the below commands to shrink the "' + @log_name_filled_disk +'" transaction log file size or add a new file to a NEW volume' AS Recommendation SELECT 'DBCC SHRINKFILE(''' + @log_name_filled_disk + ''')' AS Shrinkfile_Command SELECT 'ALTER DATABASE ' + @db_name_filled_disk + ' ADD LOG FILE ( NAME = N''' + @log_name_filled_disk + '_new'', FILENAME = N''NEW_VOLUME_AND_FOLDER_LOCATION\' + @log_name_filled_disk + '_NEW.LDF'', SIZE = 81920KB , FILEGROWTH = 65536KB )' AS AddNewFile SELECT 'If shrink does not reduce the file size, likely it is because it has not been truncated. Please review next section below. See https://learn.microsoft.com/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql' AS TruncateFirst SELECT 'Can you free some disk space on this volume? If so, do this to allow for the log to continue growing when needed.' AS FreeDiskSpace FETCH NEXT FROM log_filled_disk into @db_name_filled_disk , @log_name_filled_disk END CLOSE log_filled_disk DEALLOCATE log_filled_disk END 

3. Изменение лимита размера журнала или включение автоувеличения

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

SELECT DB_NAME(database_id) DbName, name LogName, physical_name, type_desc , CONVERT(bigint, SIZE)*8/1024 LogFile_Size_MB , CONVERT(bigint,max_size)*8/1024 LogFile_MaxSize_MB , (SIZE*8.0/1024)/(max_size*8.0/1024)*100 percent_full_of_max_size, CASE WHEN growth = 0 THEN 'AUTOGROW_DISABLED' ELSE 'Autogrow_Enabled' END as AutoGrow FROM sys.master_files WHERE file_id = 2 AND (SIZE*8.0/1024)/(max_size*8.0/1024)*100 > 90 AND max_size not in (-1, 268435456) OR growth = 0 if @@ROWCOUNT > 0 BEGIN DECLARE @db_name_max_size sysname, @log_name_max_size sysname, @configured_max_log_boundary bigint, @auto_grow int DECLARE reached_max_size CURSOR FOR SELECT db_name(database_id), name, CONVERT(bigint, SIZE)*8/1024, growth FROM sys.master_files WHERE file_id = 2 AND ( (SIZE*8.0/1024)/(max_size*8.0/1024)*100 > 90 AND max_size not in (-1, 268435456) OR growth = 0 ) OPEN reached_max_size FETCH NEXT FROM reached_max_size into @db_name_max_size , @log_name_max_size, @configured_max_log_boundary, @auto_grow WHILE @@FETCH_STATUS = 0 BEGIN IF @auto_grow = 0 BEGIN SELECT 'The database "' + @db_name_max_size+'" contains a log file "' + @log_name_max_size + '" whose autogrow has been DISABLED' as Finding SELECT 'Consider enabling autogrow or increasing file size via these ALTER DATABASE commands' as Recommendation SELECT 'ALTER DATABASE ' + @db_name_max_size + ' MODIFY FILE ( NAME = N''' + @log_name_max_size + ''', FILEGROWTH = 65536KB)' as AutoGrowth END ELSE BEGIN SELECT 'The database "' + @db_name_max_size+'" contains a log file "' + @log_name_max_size + '" whose max limit is set to ' + convert(varchar(24), @configured_max_log_boundary) + ' MB and this limit has been reached!' as Finding SELECT 'Consider using one of the below ALTER DATABASE commands to either change the log file size or add a new file' as Recommendation END SELECT 'ALTER DATABASE ' + @db_name_max_size + ' MODIFY FILE ( NAME = N''' + @log_name_max_size + ''', MAXSIZE = UNLIMITED)' as UnlimitedSize SELECT 'ALTER DATABASE ' + @db_name_max_size + ' MODIFY FILE ( NAME = N''' + @log_name_max_size + ''', MAXSIZE = something_larger_than_' + CONVERT(varchar(24), @configured_max_log_boundary) +'MB )' as IncreasedSize SELECT 'ALTER DATABASE ' + @db_name_max_size + ' ADD LOG FILE ( NAME = N''' + @log_name_max_size + '_new'', FILENAME = N''SOME_FOLDER_LOCATION\' + @log_name_max_size + '_NEW.LDF'', SIZE = 81920KB , FILEGROWTH = 65536KB )' as AddNewFile FETCH NEXT FROM reached_max_size into @db_name_max_size , @log_name_max_size, @configured_max_log_boundary, @auto_grow END CLOSE reached_max_size DEALLOCATE reached_max_size END ELSE SELECT 'Found no files that have reached max log file size' as Findings 

Увеличьте размер файла журнала или включите автоувеличение.

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

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

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

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

Следующие шаги

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *