Назад | Перейти на главную страницу

SQL не сжимает файл журнала, даже если он составляет 99% свободного места, выдает ошибку «все файлы логического журнала уже используются»

У меня есть файл журнала, который вырос до 32 ГБ и заполнил мой жесткий диск. Итак, я сделал резервную копию журнала транзакций, и теперь, когда я выполняю «DBCC SQLPERF (LOGSPACE)», он говорит, что 99% моего файла журнала - это пустое пространство, и это здорово:

DBCC SQLPERF ( LOGSPACE )
Database Name   Log Size (MB)   Log Space Used (%)  Status
abc             32140.02        0.3069714       0

Теперь я хочу сжать файл (это должно быть всего несколько мегабайт !!!), поэтому я делаю:

DBCC SHRINKFILE ( abc_log )

В результатах запроса в SSMS я получаю следующее:

Results tab:
DbId    FileId  CurrentSize MinimumSize UsedPages   EstimatedPages
14  2   4113923 128 4113920 128

И во вкладке "Сообщения" эта небольшая информация:

Cannot shrink log file 2 (abc_log) because all logical log files are in use.
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

В чем дело?

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

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

Сжатие через полчаса может быть просто автоматическим (вы только что включили эту опцию?). Это происходит каждые 30 минут.

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

Это странно, но, может быть, в то время выполнялась какая-то операция с БД, хотя активной «транзакции» не было? Я недостаточно хорошо знаю SQL-сервер. В любом случае, я сомневаюсь, что это было связано со свободным пространством.

Возможно, вам больше повезет с такими вопросами на serverfault.com, чем на SU.

У меня есть процедура на моем сайте это делает именно это.

Когда мне нужно.