Реферат: Oracle9i. Обзор некоторых новых возможностей
insert into Small_extent_table
select * from Small_extent_table;
Примернонапятой-шестойпопыткеполучимошибку «ORA-01631: max # extents (1) reached in table SCOTT.SMALL_EXTENT_TABLE». Включим возобновляемые операции (для этого пользователь должен иметь привилегию Resumable):
alter session enable resumable; |
Попробуем еще раз:
insert into Small_extent_table select * from Small_extent_table; |
Сессия зависает и ждет возможности добавить экстент в таблицу. Из другой сессии обнаружим это:
select name, sql_text, error_msg from dba_resumable; |
Получим:
User SCOTT(70), Session 7, Instance 1 insert into small_extent_table s select * from small_extent_table ORA-01631: max # extents (1) reached in table SCOTT.SMALL_EXTENT_TABLE |
Устраним причину ошибки:
alter table Scott.Small_extent_table storage (maxextents 10); |
Теперь осталось только убедиться, что в первой сессии оператор Insert успешно закончился.
Еще один классический вид сбоев – ошибки пользователей. Если кто-то из пользователей, разработчиков или сам администратор случайно удалил таблицу или запустил неотлаженную процедуру, восстановить потерянные данные бывает очень трудно. В Oracle8i в таких случаях очень помогает утилита Log Miner. В Oracle9i эта утилита обогатилась новыми возможностями, такими как восстановление текста DDL-операций или возможность пропуска поврежденной части журнала.
Кроме Log Miner, восстановить данные после пользовательской ошибки помогает еще одно нововведение – ретроспективные запросы (flashback query). С помощью процедур пакета dbms_flashback пользователь может задать нужный момент времени (предшествующий ошибке), и после этого все его запросы будут возвращать состояние данных на указанный момент. Попробуем это сделать.
Удалим важные данные из таблицы:
delete from small_extent_table; Commit; |
Посмотрим состояние данных на момент, предшествующий фиксации транзакции (точное время фиксации можно получить с помощью LogMiner):
exec dbms_flashback.enable_at_time(‘05.12.2001 15:21:58') select * from small_extent_table; |
Полученные «старые» данные можно сохранить в базе и ликвидировать последствия ошибки:
declare cursor c is (select * from scott.small_extent_table); cc c%rowtype; begin exec dbms_flashback.enable_at_time(‘05.12.2001 15:21:58') open c; -- открываем курсор, находясь в режиме FlashBack dbms_flashback.disable; -- выключаем FlashBack, чтобы разрешить DML К-во Просмотров: 233
Бесплатно скачать Реферат: Oracle9i. Обзор некоторых новых возможностей
|