Пример восстановления работоспособности базы данных

dbstalker, 09 июня

Пригласили подремонтировать чужой сервер. Признаки неработоспособности : приложения не могут подключиться к базе. Ну что ж, поможем. База в режиме NOARCHIVELOG.

Захожу на сервер пробую подключиться:

Sqlplusw /nolog
Conn / as sysdba
 

На что в ответ получаю:

ORA-01041: internal error. hostdef extension doesn't exist

Подправляю SQLNET.ORA:

SQLNET.AUTHENTICATION_SERVICES = (NONE)

И, конечно же, получаю:

SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges

Без пароля не получается подключиться. Убираю строку

SQLNET.AUTHENTICATION_SERVICES = (NONE)

И пробую с паролем.

SQL> conn sys/пароль as sysdba
Connected.
SQL> shutdown immediate
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
Database mounted.
ORA-01113: file 15 needs media recovery
ORA-01110: data file 15: 'C:\ORACLE\ORADATA\MDB\DATA01.DBF'

SQL> recover automatic database; 
Media recovery complete.

SQL> alter database open; 
alter database open
*
ERROR at line 1:
ORA-00322: log 1 of thread 1 is not current copy
ORA-00312: online log 1 thread 1: 'C:\ORACLE\ORADATA\MDB\REDO01.LOG'

Наверное, глупо было так делать, но тем не менее :


SQL> ALTER DATABASE RECOVER UNTIL CANCEL; 
ALTER DATABASE RECOVER UNTIL CANCEL
*
ERROR at line 1:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 2 needs more recovery to be consistent
ORA-01110: data file 2: 'C:\ORACLE\ORADATA\MDB\UNDOTBS01.DBF'


SQL> recover database until cancel using backup controlfile; 
ORA-00279: change 56019916560 generated at 06/05/2010 09:17:18 needed for
thread 1
ORA-00289: suggestion : C:\ORACLE\ORA92\RDBMS\ARC01073.001
ORA-00280: change 56019916560 for thread 1 is in sequence #1073


Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 2 needs more recovery to be consistent
ORA-01110: data file 2: 'C:\ORACLE\ORADATA\MDB\UNDOTBS01.DBF'

ORA-01112: media recovery not started



SQL> recover database using backup controlfile UNTIL CANCEL; 
ORA-00279: change 56019916560 generated at 06/05/2010 09:17:18 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORA92\RDBMS\ARC01073.001
ORA-00280: change 56019916560 for thread 1 is in sequence #1073


Specify log: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log 'C:\ORACLE\ORA92\RDBMS\ARC01073.001'
ORA-27041: unable to open file
OSD-04002: unable to open file


ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 2 needs more recovery to be consistent
ORA-01110: data file 2: 'C:\ORACLE\ORADATA\MDB\UNDOTBS01.DBF'

Подсовываю редолог, предварительно переименовав его в ARC01073.001.


SQL> recover database using backup controlfile UNTIL CANCEL; 
ORA-00279: change 56019916560 generated at 06/05/2010 09:17:18 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORA92\MDB\ARC01073.001
ORA-00280: change 56019916560 for thread 1 is in sequence #1073


Specify log: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00326: log begins at change 56019916561, need earlier change 56019916560
ORA-00334: archived log: 'C:\ORACLE\ORA92\RDBMS\ARC01073.001'


ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 2 needs more recovery to be consistent
ORA-01110: data file 2: 'C:\ORACLE\ORADATA\MDB\UNDOTBS01.DBF'

Оказалось, что редолог не тот, что нужно. Берем другой .


SQL> recover database using backup controlfile UNTIL CANCEL; 
ORA-00279: change 56019916560 generated at 06/05/2010 09:17:18 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORA92\RDBMS\ARC01073.001
ORA-00280: change 56019916560 for thread 1 is in sequence #1073


Specify log: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: change 56019916561 generated at 06/05/2010 12:53:19 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORA92\RDBMS\ARC01074.001
ORA-00280: change 56019916561 for thread 1 is in sequence #1074
ORA-00278: log file 'C:\ORACLE\ORA92\RDBMS\ARC01073.001' no longer needed for this recovery


ORA-00308: cannot open archived log 'C:\ORACLE\ORA92\RDBMS\ARC01074.001'
ORA-27041: unable to open file
OSD-04002: unable to open file

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 2 needs more recovery to be consistent
ORA-01110: data file 2: 'C:\ORACLE\ORADATA\IKISDB\UNDOTBS01.DBF'

На этот раз оракл скушал и хочет еще один редолог. Подсовываю следующий, назвав его ARC01074.001'


SQL>  recover database using backup controlfile UNTIL CANCEL;
ORA-00279: change 56019916561 generated at 06/05/2010 12:53:19 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORA92\RDBMS\ARC01074.001
ORA-00280: change 56019916561 for thread 1 is in sequence #1074


Specify log: {=suggested | filename | AUTO | CANCEL}
AUTO
Log applied.
Media recovery complete.
SQL> ALTER DATABASE OPEN; 
ALTER DATABASE OPEN
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> ALTER DATABASE OPEN RESETLOGS; 

Database altered.

Делаем холодный бекап и все приложения начинают работать, все счастливы. Занавес.

Может у кого-то будут замечания-исправления? Хотелось бы.

12 комментариев

Прокоментировать

er
9 июня 2010 г. в 11:35

>> База в режиме NOARCHIVELOG.
поддерживает ли комманду
>> recover automatic database;
?
и еще пересоздать REDO было бы не проще ?
или открыть базу с RESETLOG ?

dbstalker
9 июня 2010 г. в 14:19

1.recover automatic database; - поддерживать то поддерживает, да вот накатывать нечего. :(
2.создать REDO - как его пересоздать, если он текущий и нужен для восстановления согласованности базы?
2. после неполного восстановления NORESETLOG невозможен. только RESETLOG

asivkov
9 июня 2010 г. в 21:16

Скажите, пожалуйста. Почему вы переименовываете реду в архивники, при базе в noarchivelog? Почему база вообще требует архивники? Кроме того, как раз после неполного восстановления только и можно открыть базу как с RESETLOG (это к вашему комментарию). В вашем случае ресетлог пришлось делать потому что вы рекавери делали из бэкапа контрольного файла.

dbstalker
10 июня 2010 г. в 09:32

По поводу RESETLOG и NORESETLOG вы правы, уже исправлено комментарий. Видно вчера слишком жарко было. :) Прошу прощения.

По поводу архивников: все так и было. попробуйте у себя на тестовой базе.
Если вам не составляет особого труда - предложите свой сценарий. Все будут благодарны.

mczim
22 июня 2010 г. в 23:48

Если информация в redo не очень важна то можно было сделать вот так:

_allow_resetlogs_corruption=TRUE

alter database open resetlogs

dbstalker
23 июня 2010 г. в 09:37

А как в таком случае согласованность базы данных? не будет ли она нарушена?

mczim
23 июня 2010 г. в 09:46

да, она будет нарушена!

dbstalker
23 июня 2010 г. в 10:07

тогда сразу же нужно делать новую базу , выполнять экспорт из старой и импорт в новую.

mczim
23 июня 2010 г. в 10:15

Всю та базу зачем?

dbstalker
23 июня 2010 г. в 11:40

Вы правы, если можно локализовать проблему, то тогда дело обойдется несколькими конкретными схемами.

PcBuild
20 июля 2010 г. в 05:35

Хорошая статья.

yaroslavbat
4 марта 2013 г. в 02:37

Чтобы не переименовывать и не подсовывать вручную архивлоги и редологи можно сделать
ALTER DATABASE REGISTER LOGFILE '<путь к файлу, имеющему отношение к восстановлению>' для всех подходящих файлов
после чего запустить автоматическое восстановление.
Не надо ничего подсовывать и переименовывать. Оракл сам найдёт, что ему нужно

 

Новый комментарий

Я не спамер: введите суму 4+0



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

средства для рук
17 августа, 3 ответа
(Без темы)Шкаф купе
17 августа, 2 ответа
Страховая компания
17 августа, 1 ответа