Попала случайно под руку давняя инструкция по восстановлению undo. Может кому сгодится. Больше об undo ищите в специальном разделе блога.
Определяем поврежденные undo сегменты по статусу "Needs Recovery" по результатам следующего запроса (например - 29):
1. select SEGMENT_NAME, STATUS from dba_rollback_segs;
Переводим undo в ручной режим управления:
2. alter system set undo_management=MANUAL scope=both;
создаем свежий init.ora ( например, C:\oracle\ora92\database\initdb.ora):
3. create pfile from spfile;
вносим изменения в init.ora:
*._offline_rollback_segments=" _SYSSMU29$" *._corrupted_rollback_segments="_SYSSMU29$"
Если по каким либо причинам команду 2 не удалось выполнить, тогда в init.ora строчку *.undo_management='AUTO' поменять на *.undo_management='MANUAL'
Останавливаем базу данных
4. shutdown immediate
Открываем базу данных с откорректированным init.ora:
5. startup pfile=C:\oracle\ora92\database\initdb.ora;
создаем новое табличное пространство undo, например:
6. create undo tablespace undotbs2 datafile ' C:\oracle\oradata\db\undotbs2.dbf' size 500m;
Старое табличное пространство undo переводим в offline:
7. alter tablespace undotbs1 offline;
8.shutdown immediate
вносим изменения в init.ora:
*.undo_tablespace='UNDOTBS1' меняем на *.undo_tablespace='UNDOTBS2'
*.undo_management='MANUAL' поменять на *.undo_management='AUTO'
забираем параметры
_offline_rollback_segments
_corrupted_rollback_segments
9. startup pfile=C:\oracle\ora92\database\initdb.ora;
Создаем spfile:
9. create spfile from pfile;
10. shutdown immediate
11. startup