Ошибка ORA-00312: online log string thread string — повреждение журналов Redo
- Ошибка
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/redo01.log'при старте базы (STARTUP) или в процессе выполнения DML. - Ошибка сопровождается кодами
ORA-00313,ORA-00314или ошибками I/O ввода-вывода подсистемы хранения. - База данных переходит в статус
MOUNTи отказывается открываться (ALTER DATABASE OPEN).
1. Проверка статуса поврежденной группы Redo Log
SELECT group#, thread#, sequence#, bytes/1024/1024 AS mb, members, status, archived
FROM v$log;Проверьте расположение файлов группы:
SELECT group#, status, member FROM v$logfile;2. Сценарий 1: Группа находится в статусе INACTIVE или UNUSED
Если поврежденный журнал не является активным (CURRENT), очистите его:
ALTER DATABASE CLEAR LOGFILE GROUP 1;
-- Или, если журнал не был заархивирован:
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;После очистки откройте базу: ALTER DATABASE OPEN;.
3. Сценарий 2: Группа находится в статусе CURRENT (Активный лог)
Повреждение текущего журнала требует неполного восстановления (Point-in-Time Recovery):
-- Подключение к RMAN в состоянии MOUNT
rman target /
RESTORE DATABASE;
RECOVER DATABASE UNTIL CANCEL;
-- Введите CANCEL при запросе отсутствующего логаОткройте базу с пересозданием журналов Redo:
ALTER DATABASE OPEN RESETLOGS;4. Настройка мультиплексирования (Multiplexing) Redo Log
Для предотвращения подобных аварий в будущем создайте зеркальные копии членов в каждой группе на разных дисковых массивах:
ALTER DATABASE ADD LOGFILE MEMBER '/u02/oradata/redo01_mirror.log' TO GROUP 1;
ALTER DATABASE ADD LOGFILE MEMBER '/u02/oradata/redo02_mirror.log' TO GROUP 2; Частые вопросы (FAQ)
К чему приводит открытие базы с параметром RESETLOGS?
RESETLOGS сбрасывает текущую цепочку инкарнации журнала Redo, обнуляет счетчики sequence# и заново инициализирует заголовочные метаданные всех файлов журналов. Старые бэкапы до RESETLOGS требуют перерегистрации.
Можно ли удалить поврежденный Redo Log файл через ALTER DATABASE DROP LOGFILE MEMBER?
Можно, но только если в группе осталось более одного рабочего участника (member) и группа не находится в статусе CURRENT.
Что делать, если база находится в состоянии NOARCHIVELOG и поврежден CURRENT лог?
В режиме NOARCHIVELOG потеря активного журнала неизбежно приводит к потере данных с момента последнего холодного бэкапа. Придется восстанавливать последний полный бэкап.
Как избежать единой точки отказа для журналов Redo?
Настройте мультиплексирование: каждая группа должна иметь как минимум 2 члена (members), расположенных на физически независимых дисковых контроллерах или разных LUN.