Как вы знаете, мы можем делать резервную копию базы данных ORACLE с остановом работы пользователей (оффлайн резервная копия, холодный бэкап БД) и без останова (онлайн резервная копия, горячий бэкапа БД). Я про это упоминал в этом посте.
Напомню, что когда мы выполняем онлайн резервную копию, то процесс резервного копирования производит с табличными пространствами БД следующие операции:
- Табличное пространство переводится в специальный режим BEGIN BACKUP.
- Производится копирование дата-файлов табличного пространства.
- Табличное пространство переводится в нормальный режим работы (END BACKUP).
То есть, во время выполнения онлайн бэкапа дата-файлы базы данных имеют разные SCN - те которые в данный момент находятся в режиме BEGIN BACKUP, имеют более старый SCN, чем база данных (контрольные файлы и остальные дата-файлы).
И если в процессе бэкапа произойдет останов базы данных (в случае сбоя или вынужденной корректной остановки), то при попытке старта и открытия базы данных мы получим следующую ошибку:
ORA-1113 signalled during: alter database openЭта ошибка означает, что часть дата-файлов находится в режиме BEGIN BACKUP, имеет более низкий номер SCN, чем вся БД и, в данном случае, без восстановления, база данных не может быть открыта. То есть база данных поднимается только до уровня MOUNT.
Решение в данной ситуации следующее:
- Войти в SQLPLUS, поднять (если еще не поднята) базу до уровня MOUNT:
> sqlplus /nolog
SQL> connect /as sysdba
SQL> startup mount - Определить какие дата-файлы находятся в режиме BEGIN BACKUP. Для этого получить из ORACLE view V$BACKUP команды возврата в нормальный режим, которые ORACLE не успел сделать из-за вынужденной остановки:
SQL> select 'ALTER DATABASE DATAFILE '''||name||''' END BACKUP;'
2 from v$backup b, v$datafile f
3 where b.file#=f.file#
4 and b.status='ACTIVE'; - Выполнить команды вида
SQL> ALTER DATABASE DATAFILE '''||name||''' END BACKUP;
для всех дата-файлов, которые выдаст команда из пункта 2. - Открыть базу данных командой:
SQL> ALTER DATABASE OPEN;
Автор: Шиболов Вячеслав Анатольевич
Еще может пригодиться вывести tablespace из режима резервного копирования.
ОтветитьУдалитьALTER TABLESPACE PSAPSR3 END BACKUP; (где PSAPSR3 - имя нужного tablespace)
Да, этой командой было бы проще, но, к сожалению, в ORACLE 8i точно, не работает такая команда в MOUNT режиме. А выше база не поднимается из-за вышеуказанной ошибки.
Удалить