У меня есть файл журнала, который вырос до 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.
У меня есть процедура на моем сайте это делает именно это.
Когда мне нужно.