пятница, 27 декабря 2013 г.

Oracle и дохлый винчестер

Началось все с сообщений о поврежденных файлах табличного пространства USERS (пример сообщения для одного из таких файлов):
26.12.13 17:24:20.523,ORB-12117208(57),ERROR,TransactJob,
com.bssys.db.jdbc.DBSQLException: ORA-01115: ошибка ввода/вывода при чтении блока из файла (блок # )
ORA-01110: файл данных 25: '/mnt/hdd2tb/oracle/ORACLE11/users20.dbf'
ORA-27072: Ошибка ввода/вывода файла
Additional information: 3
Additional information: 3632835
Additional information: 8192

Таких сообщений становилось все больше и больше.
В чем моя ошибка?
Во-первых, в том, что я не включил режим "ARCHIVELOG", поэтому восстановить файлы в RMAN не удалось.
Во-вторых, в том, что я его включил уже после ошибки: это привело к аварийной остановке Oracle, т.к. быстро растущие файлы FAST-RECOVERY сожрали все оставшееся свободное место на HDD с системой.
Ладно, довольно-таки быстро сообразил режим отключить и удалить файлы. Место свободное появилось.

После этого настала очередь борьбы с проблемой: Что делать, если умер HDD с частью табличных пространств и Oracle из-за этого не запускается, сообщая при startup'е:
ORA-01157: cannot identify/lock data file 15 - see DBWR trace file
ORA-01110: data file 15: '/mnt/hdd2tb/oracle/ORACLE11/USERS2/users2_07.dbf'
ORA-27037: unable to obtain file status
?

Помогло отключение недостающих DATA-файлов:
alter database datafile '/mnt/hdd2tb/oracle/ORACLE11/users10.dbf' offline drop;
После этого Oracle запустился.
Далее дело техники: либо удалить схемы, которые лежали на недостающих DATA-файлах (drop user cascade;), либо пересоздать табличное пространство
- drop tablespace including contents;
- см. описание "create tablespace".

----после 3-х часов безуспешных попыток удалить датафайлы, чтобы освободить место на диске---
В итоге, на Oracle 11g система не позволяет удалить датафайлы из USERS, сообщая:
SQL> alter tablespace USERS drop datafile '/opt/oracle/oradata/ORACLE11/users25.dbf';
alter tablespace USERS drop datafile '/opt/oracle/oradata/ORACLE11/users25.dbf'
*
ERROR at line 1:
ORA-01662: tablespace 'USERS' is non-empty and cannot be made temporary

Плюнул. Пересоздал БД Oracle.

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

Архив