Я считаю себя очень опытным человеком SQL. Но я не могу сделать эти две вещи:
- Уменьшить размер выделенного журнала.
-
Обрезать журнал.
DBCC sqlperf (logspace)
возвращает:
Database Name Log Size (MB) Log Space Used (%) Status
ByBox 1964.25 30.0657 0
В SQL 2008 не работает
DUMP TRANSACTION ByBox WITH TRUNCATE_ONLY
Выполнение следующего ничего не делает
DBCC SHRINKFILE ('ByBox_1_Log' , 1)
DBCC shrinkdatabase(N'bybox')
Я попробовал резервное копирование. Я также попытался установить свойства базы данных "Восстановить модель" как "ПОЛНЫЙ", так и "ПРОСТОЙ" и комбинацию всех вышеперечисленных. Я также попытался установить совместимость с SQL Server 2005 (я использую этот параметр, поскольку я хочу соответствовать нашему производственному серверу) и SQL Server 2008.
Независимо от того, что я пытаюсь сделать, журнал остается на уровне 1964.25 Мб, при использовании 30%, который все еще растет.
Я хотел бы, чтобы журнал возвращался вниз около 0% и уменьшал размер файла журнала до, скажем, 100 Мб, что много. Моя база данных должна ненавидеть меня; он просто игнорирует все, что я прошу сделать в отношении журнала.
Еще одно примечание. В производственной базе данных имеется довольно много реплицированных таблиц, которые я отключу, когда выполняю восстановление в своем окне разработки, используя следующее:
-- Clear out pending replication stuff
exec sp_removedbreplication
go
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL,
@numtrans = 0, @time = 0, @reset = 1
go
Попытка:
SELECT log_reuse_wait, log_reuse_wait_desc
FROM sys.databases
WHERE NAME='bybox'
Возвращает
log_reuse_wait log_reuse_wait_desc
0 NOTHING
Как я могу исправить эту проблему?
Посмотрев this и установив модель восстановления в FULL Я пробовал следующее:
USE master
GO
EXEC sp_addumpdevice 'disk', 'ByBoxData', N'C:\<path here>\bybox.bak'
-- Create a logical backup device, ByBoxLog.
EXEC sp_addumpdevice 'disk', 'ByBoxLog', N'C:\<path here>\bybox_log.bak'
-- Back up the full bybox database.
BACKUP DATABASE bybox TO ByBoxData
-- Back up the bybox log.
BACKUP LOG bybox TO ByBoxLog
который возвратил:
Processed 151800 pages for database 'bybox', file 'ByBox_Data' on file 3.
Processed 12256 pages for database 'bybox', file 'ByBox_Secondary' on file 3.
Processed 1 pages for database 'bybox', file 'ByBox_1_Log' on file 3.
BACKUP DATABASE successfully processed 164057 pages in 35.456 seconds (36.148 MB/sec).
Processed 2 pages for database 'bybox', file 'ByBox_1_Log' on file 4.
BACKUP LOG successfully processed 2 pages in 0.056 seconds (0.252 MB/sec).
Perfect! Но это не так.
И DBCC SHRINKFILE ('ByBox_1_Log', 1) теперь возвращается с
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
7 2 251425 251425 251424 251424
и DBCC SQLPERF (LOGSPACE) по-прежнему сообщает о 30% использовании.
Я думаю, мне, возможно, придется смириться с тем, что в SQL Server 2008 может быть ошибка, или что файл моего журнала был поврежден каким-то образом. Однако моя база данных находится в хорошем рабочем состоянии, что заставляет меня думать, что есть ошибка (дрожь при мысли).