-
В процессе использования SQL Server мы часто сталкиваемся с ситуациями, когда журнал базы данных очень велик. Сталкиваясь с этой проблемой, мы представляем два метода ее решения.
Способ первый
В обычных обстоятельствах сжатие базы данных SQL не может существенно уменьшить размер базы данных. Его основная функция — уменьшение размера журнала. Эту операцию следует выполнять регулярно, чтобы журнал базы данных не стал слишком большим.
1. Установите простой режим базы данных: откройте SQL Enterprise Manager, щелкните Microsoft SQL Server в корневом каталоге консоли --> группа SQL Server --> дважды щелкните, чтобы открыть сервер --> дважды щелкните, чтобы открыть базу данных. каталог -> выберите имя базы данных (например, база данных форума Forum) -> затем щелкните правой кнопкой мыши и выберите «Свойства» -> «Выбрать параметры» -> выберите «Простой» в режиме аварийного переключения, а затем нажмите «ОК», чтобы сохранить
2. Щелкните правой кнопкой мыши текущую базу данных и просмотрите сжатую базу данных во всех задачах. Как правило, настройки по умолчанию не требуют изменения. Просто нажмите «ОК».
3. После сжатия базы данных рекомендуется сбросить свойства базы данных в стандартный режим. Метод работы тот же, что и в первом пункте, поскольку журнал часто является важной основой для восстановления базы данных в некоторых нештатных обстоятельствах. Способ 2.
УСТАНОВИТЬ NOCOUNT ON
ОБЪЯВИТЬ @LogicalFileName системное имя,
@MaxMinutes ИНТ,
@NewSizeINT
USE tablename — имя базы данных, с которой будет осуществляться работа.
SELECT @LogicalFileName = 'tablename_log', -- имя файла журнала
@MaxMinutes = 10, -- Ограничение времени, разрешенного для переноса журнала.
@NewSize = 1 — размер файла журнала, который вы хотите установить (М)
--Настройка/инициализация
ОБЪЯВИТЬ @OriginalSize int
ВЫБЕРИТЕ @OriginalSize = размер
ИЗ системных файлов
ГДЕ имя = @LogicalFileName
SELECT 'Исходный размер ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8 КБ страниц или ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'МБ'
ИЗ системных файлов
ГДЕ имя = @LogicalFileName
СОЗДАТЬ ТАБЛИЦУ
(Символ DummyColumn (8000) не равен нулю)
ОБЪЯВИТЬ @Counter INT,
@StartTime ДАТАВРЕМЯ,
@TruncLog ВАРЧАР(255)
ВЫБЕРИТЕ @StartTime = ПОЛУЧИТЬ ДАТУ(),
@TruncLog = 'ЖУРНАЛ РЕЗЕРВНОГО КОПИРОВАНИЯ' + db_name() + 'С TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
ИСПОЛНИТЕЛЬ (@TruncLog)
-- При необходимости оберните журнал.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) — время еще не истекло
И @OriginalSize = (ВЫБЕРИТЕ размер ИЗ системных файлов, ГДЕ name = @LogicalFileName)
И (@OriginalSize * 8/1024) > @NewSize
НАЧАЛО -- Внешний цикл.
ВЫБРАТЬ @Счетчик = 0
WHILE (@Counter < @OriginalSize / 16) И (@Counter < 50000))
НАЧАТЬ – обновить
ВСТАВИТЬ ЗНАЧЕНИЯ DummyTrans («Заполнить журнал»)
УДАЛИТЬ DummyTrans
ВЫБРАТЬ @Счетчик = @Счетчик + 1
КОНЕЦ
ИСПОЛНИТЕЛЬ (@TruncLog)
КОНЕЦ
SELECT 'Окончательный размер ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),размер) + ' 8 КБ страниц или ' +
CONVERT(VARCHAR(30),(размер*8/1024)) + 'МБ'
ИЗ системных файлов
ГДЕ имя = @LogicalFileName
DROP TABLE DummyTrans
УСТАНОВИТЬ NOCOUNT ВЫКЛ.