17 марта 2020 г.

Как пересоздать online redo log files Oracle

Не так давно в моём рассказе про опыт миграции одной SAP системы я упоминал о ситуации, когда онлайн журнальные файлы (redo log files) Oracle оказались узким местом при импорте данных. Решением стало пересоздание данных файлов намного большего размера. Давайте поговорим об этом более детально.

Про журнальные файлы Oracle я рассказывал в этом посте. Существует два вида данных журналов - онлайн и оффлайн. Вторые являются копией первых при активации режима работы базы данных - ARCHIVELOG MODE. Именно про этот режим в большей степени был мой прошлый пост. Сегодняшний же рассказ про первый вид - online redo log files.

Посмотреть список онлайн журналов, их размер и расположение можно тремя способами:
  1. Запустить в транзакции DB13 задание Check Database и просмотреть журнал выполнения (рис. 1).
      
  2. В утилите BR*Tools перейти по меню "2 - Space management -> 7 - Additional space functions -> 3 - Show redolog files -> cont, cont, cont" (рис. 2).
      
  3. В утилите SQLPlus выполнить 2 SQL-запроса:
    col MEMBER format a38; 
    SELECT v$logfile.group#, v$logfile.member, v$log.bytes/1024/1024 as FS_SIZE,  v$log.status
    FROM v$logfile
    LEFT JOIN v$log ON v$logfile.group#=v$log.group#
    ORDER  BY v$logfile.group#, v$logfile.member; 

    Первый запрос изменяет формат экрана для удобного просмотра результатов работы второго. А второй собирает информацию из двух системных представлений (Oracle Views) V$LOGFILE и V$LOG. Результатом будет список онлайн журналов с размером и статусом (рис. 3).

Рис. 1. Просмотр информации об онлайн журналах в DB13.

Рис. 2. Просмотр информации об онлайн журналах в BR*Tools.

Рис. 3. Просмотр информации об онлайн журналах в SQLPlus

Как видно из снимков экранов в данном случае в системе 4 группы онлайн журнальных файлов, в каждой группе по 2 копии файлов, а размер каждого файла 200 Мб. Данные журналы используются по кругу, предыдущая информация каждый раз перезаписывается. В текущий момент времени запись может производиться только в одну группу. На снимках экранов это четвёртая группа файлов, она имеет статус CURRENT. Те журнальные файлы, записи в которых уже были внесены в дата-файлы, имеют статус INACTIVE. То есть система помечает, что их можно перезаписать. И существует еще статус ACTIVE, когда указатель переключился на следующий журнал, но перезаписывать журнал ещё нельзя. Так как СУБД ещё не зафиксировала данные изменения в дата-файлах.

Задача пересоздания онлайн журналов может возникнуть по разным причинам. Например, для решения проблемы с производительностью, когда в системном журнале Oracle наблюдаются ошибки вида 'Chekpoint not complete' (SAP note 79341 - Checkpoint not complete) и рекомендуется увеличить размер журнальных файлов. Или как в моей истории при импорте большого объёма данных в систему. Иногда бывает необходимо перенести файлы журналов в другое место, изменить состав групп или решить другие  подобные административные задачи. 

Пересоздать отдельную группу онлайн журнальных файлов можно на живую, при работающей системе. Единственное условие - группа не должна использоваться, то есть должна находиться в статусе INACTIVE. Для выполнения операции придётся использовать SQLPlus. В BR*Tools такой функциональности не предусмотрено. Ну и, как вы поймёте из описания процедуры, необходимо выбрать период с минимальной нагрузкой на систему. Нам необходимо чтобы во время проведения операции переключение между группами журналов происходило как можно реже. 

Итак, перейдём к процедуре и инструментарию (набору SQL-запросов и команд). Для примера увеличим размер online redo log files до 250 Мб.
  1. В терминале операционной системы переключаемся в пользователя <ora>sid. Входим в SQLPlus и открываем подключение к базе данных командами:
    sqlplus /nolog 
    connect /as sysdba 
      
  2. Для начала необходимо просмотреть информацию о текущем состоянии онлайн журнальных файлов, выполнив 2 SQL-запроса из списка выше (пункт 3) (рис. 4).

    Рис. 4. Процесс пересоздания онлайн журнальных файлов - 1.
      
  3. После этого выбираем первую неактивную группу онлайн журнальных файлов для удаления. В данном случае это группа 1 (G11). Удаление группы производится SQL-запросом вида:
    ALTER DATABASE DROP LOGFILE GROUP 1; 

    После выполнения в списке журнальных файлов данной группы быть не должно (рис. 5).

    Рис. 5. Процесс пересоздания онлайн журнальных файлов - 2.
      
  4. Открыть еще один терминал операционной системы и в нём удалить файлы только что удалённой группы онлайн журналов. Для этого использовать команды вида:
    rm /oracle/EI8/origlogA/log_g11m1.dbf 
    rm /oracle/EI8/mirrlogA/log_g11m2.dbf 

    Для удаления файлов необходимо иметь достаточные полномочия: суперпользователя root, пользователя <ora>sid (Oracle до версии 11g) либо пользователя oracle (при использовании базы данных Oracle 12c и выше) (рис. 6).
      
    Рис. 6. Процесс пересоздания онлайн журнальных файлов - 3.
      
  5. Вернуться в терминал с SQLPlus и создать удалённую группу онлайн журнальных файлов Oracle заново SQL-запросом вида:
    ALTER DATABASE ADD LOGFILE GROUP 1 
    ('/oracle/EI8/origlogA/log_g11m1.dbf', 
    '/oracle/EI8/mirrlogA/log_g11m2.dbf') 
    SIZE 250M; 

    После этого данная группа должна появиться в списке. Статус UNUSED означает что база данных эти журналы еще ни разу не использовала (рис. 7).
       
    Рис. 7. Процесс пересоздания онлайн журнальных файлов - 4.

    Если необходимо создать группу онлайн журнальных файлов с одним файлом, без зеркалирования, то в SQL-запросе в скобках указываем только один файл.
      
  6. Повторить шаги, описанные в пунктах 3-5, для следующих групп онлайн журнальных файлов имеющих статус INACTIVE.
       
  7. Для того, чтобы выполнить операцию удаления и создания для группы, файлы которой находятся в статусе ACTIVE или CURRENT, можно выбрать 2 способа. В первом случае просто подождать. Рано или поздно система заполнит текущий журнальный файл и переключится на следующий.
    Во втором же случае можно выполнить следующие SQL-запросы:
    ALTER SYSTEM SWITCH LOGFILE; 
    ALTER SYSTEM CHECKPOINT; 

    Первый запрос принудительно переключает текущий журнал Oracle на следующий, а второй инициирует принудительное выполнение контрольной точки базы данных (Checkpoint). В этом случае все записи из журнала фиксируются в дата-файлах и журнал освобождается (рис. 8).
      

    Рис. 8. Пример переключения текущего журнального файла.
         
  8. В итоге после пересоздания всех групп журнальных файлов у вас должна получиться требуемая вам картина (рис. 9).  

Рис. 9. Онлайн журнальные файлы после пересоздания.

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

На данную тему существует SAP note 309526 - Enlarging redo log files.
Как факультатив ещё можно прочитать SAP note 1627481 - Preemptive redolog switches in Oracle 11.2 and higher.




Комментариев нет:

Отправить комментарий