Реферат: 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. Обзор некоторых новых возможностей