Здравствуйте, SergSV, Вы писали:
SSV> Есть сервер с Windodws NT 4 EE и Oracle 8.1.7. Создаем две таблицы :
SSV>Master (главная) и Detail (подчиненная). Вопрос состоит в следующем:
SSV>записываются ли при каскадном удалении записи из таблицы Detail
SSV>в сегмент отката или нет и можно ли будет удаленные записи из таблицы Detail
SSV>потом восстановить ?
Данные из таблицы detail в rollback, безусловно, записываются. Проверить это легко:
Создаем схему:
create table master as select object_id from all_objects;
create table detail (object_id) as select object_id from master;
alter table master add constraint m_pk primary key (object_id);
alter table detail add constraint md_fk
foreign key (object_id) references master(object_id)
on delete cascade;
Заносим данные:
insert into detail select * from detail;
insert into detail select * from detail;
Проверяем, сколько места они заняли:
SQL> select bytes / 1024 from dba_segments where segment_name in ('MASTER', 'DETAIL');
BYTES/1024
----------
256
768
Создаем rollback segment, достаточный только для того, чтобы вместить удаление из master (удвоим размер master, чробы быть уверенными, что для него точно места хватит, но не для detail-а):
create rollback segment rbs_masteronly
storage (initial 256K minextents 2 maxextents 2)
tablespace rbs;
alter rollback segment rbs_masteronly oline;
Завершаем эту транзакцию, чтобы в новой явно указать, какой rollback segment использовать:
commit;
set transaction use rollback segment rbs_masteronly;
Удаляем:
delete from master;
Результат не заставил себя ждать:
ERROR at line 1:
ORA-01562: failed to extend rollback segment number 8
ORA-01628: max # extents (2) reached for rollback segment RBS_MASTERONLY
Данные из detail не влезли в rollback.