Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Что произойдет, если завалится длительная DDL ?   Найти похожие ветки 

 
ANB ©   (2006-08-31 18:17) [0]

Значится выполняем скрипт :
create table Test_T1 (ID integer);
/
insert into Test_T1 (ID)
select rownum from dual
connect by level <= 1000;
/
commit;
/
alter table Test_t1 add (N varchar2(200) default "Вася" not null);
/
select * from test_t1;
/
drop table test_t1;
/

Операция alter table при большом объеме данных может быть довольно длительной (я знаю, что грамотно было бы создать поле без деволта, пропадейтить и потом повесить дефолт, но интересен именно такой вариант). Что будет, если прервать именно этот альтер (например, сервак упал) ?


 
Sam Stone ©   (2006-08-31 20:07) [1]

Сделал тест на 10к записей. Альтер прошел мгновенно.
На 1кк успел зарубить. В итоге в таблице один столбец.


 
Desdechado ©   (2006-08-31 20:14) [2]

а для чего эти стресс-тесты?


 
Petr V. Abramov ©   (2006-08-31 21:11) [3]

по идее ничего не будет. вроде нормальная транзакция, только затрагивающая еще и словарь.


 
Desdechado ©   (2006-08-31 21:19) [4]

думаю, падение будет похоже на ситуацию при активном триггере
CREATE OR REPLACE TRIGGER TR_T1
 BEFORE UPDATE FOR "Test_T1"
 FOR EACH ROW
BEGIN
 IF( :old."ID" >= 100 ) THEN
   RAISE_APPLICATION_ERROR( -50000, "bla-bla" );
 END IF;
END;


 
ANB ©   (2006-09-01 09:03) [5]


> по идее ничего не будет. вроде нормальная транзакция, только
> затрагивающая еще и словарь.

В оракле DDL - выполняется вроде как бы не в контексте транзакции.
Это в FB любые манипуляции с БД, включая DLL - это транзакция, т.е. либо все либо ничего.
А с ораклом не совсем понятки. Вот результат
> Sam Stone ©   (31.08.06 20:07) [1]

показал, что фактически операций было 2, причем добавление столбца прошло, а апдейт откатился.
Просто FB - полный версионник, а оракл - его иммитация.


 
Desdechado ©   (2006-09-01 11:02) [6]

> причем добавление столбца прошло,
Мне мой сервер жалко так терзать, но из
> В итоге в таблице один столбец.
видно, что добавление столбца таки НЕ прошло.


 
ANB ©   (2006-09-01 11:04) [7]


> Desdechado ©   (01.09.06 11:02) [6]

Мне мой тоже, вот я и спросил на форуме :) По идее, по принципу оракла, оператор должен выполнятся либо весь, либо весь отваливаться. Для DML так и есть.


 
Petr V. Abramov ©   (2006-09-01 17:25) [8]

> ANB ©   (01.09.06 09:03) [5]
> В оракле DDL - выполняется вроде как бы не в контексте транзакции
 а в контексте чего ж он выполняется???
это другой вопрос, что сразу коммитится.
запустите длительны DDL и посмотрите v$transaction
кстати, в OCI если брать св-ва базы, есть загадочный для меня атрибут OCI_ATTR_AUTOCOMMIT_DDL. Т.е, возможно через пару версий на уровне alter session можно будет и отменить этот autocommit


 
ANB ©   (2006-09-01 17:45) [9]


> Т.е, возможно через пару версий на уровне alter session
> можно будет и отменить этот autocommit

Да, было неплохо. А то как то выбивается из общей концепции. Еще неплохо бы ошибку мутации таблиц отменили.


 
Petr V. Abramov ©   (2006-09-01 23:54) [10]

> Еще неплохо бы ошибку мутации таблиц отменили.
 это врядли, это логично в общем случае


 
ANB ©   (2006-09-04 10:10) [11]


>  это врядли, это логично в общем случае

Может и логично, зато жутко неудобно. В некоторых компаниях вообще триггеры не используют именно из-за этой ошибки, т.к. на нее можно нарваться довольно непредсказуемо.
Могли бы просто принять решение - в середине операции возвращать либо старые данные, либо (что более логично) ту часть, которая поменялась, возрващать уже новую (моя сессия должна видеть все изменения еще до коммита). А оракл вместо этого тупо генерит ошибку и все. Кстати, этой ошибки больше нигде не встречал (в MS SQL триггера уровня оператора и тут все понятно, но и в FB/IB я про нее не слышал). Кстати, умудрялся я получить эту ошибку даже без триггеров - только работа с пакетами.


 
Val ©   (2006-09-04 10:55) [12]

>[5] ANB ©   (01.09.06 09:03)
>[11] ANB ©   (04.09.06 10:10)
какие в оракле придурки работают, правда? ;)
может попытаемся почитать да понять почему ТАК происходит?


 
ANB ©   (2006-09-04 10:58) [13]


> какие в оракле придурки работают, правда? ;)

1. Ну, придуроков то там хватает :) Некоторые баги ни в какие ворота не лезут.
2. Читал - все равно не понял. Т.е. логически понятно, из-за чего ошибка, а вот почему она логически не разрешима - не понятно. В IB/FB то ее нету, а они очень близки к ораклу по идеологии и языку (или таки есть ???).


 
Desdechado ©   (2006-09-04 11:02) [14]

table is mutating - прими как данность. Дергаться бесполезно, не будут они это менять.
Мне это тоже дико не нравилось поначалу, теперь же просто на автомате пишу обертку из 3 триггеров с пакетной переменной.


 
ANB ©   (2006-09-04 11:15) [15]


> теперь же просто на автомате пишу обертку из 3 триггеров
> с пакетной переменной.

Да лениво же каждый раз так писать. А почему из трех ? Мы обычно 2 писали - один собирает строки в таблицу (в пакете), а второй уже обрабатывает ее.


> Дергаться бесполезно, не будут они это менять.

Казлы, однозначно. Но из-за этой грабли с оракла все равно не слезу :)


 
Desdechado ©   (2006-09-04 11:20) [16]

table is mutating - прими как данность. Дергаться бесполезно, не будут они это менять.
Мне это тоже дико не нравилось поначалу, теперь же просто на автомате пишу обертку из 3 триггеров с пакетной переменной.


 
Desdechado ©   (2006-09-04 11:22) [17]

Вот это проксю плющит....

Из трех - ДО на операцию, ДО на строку, ПОСЛЕ на операцию.


 
ANB ©   (2006-09-04 11:24) [18]


> ДО на операцию

А "ДО на операцию" зачем ?


 
Desdechado ©   (2006-09-04 12:18) [19]

Инициализировать табличную переменную.


 
ANB ©   (2006-09-04 12:44) [20]


> Инициализировать табличную переменную.

Дык ее можно прямо в пакете инициализировать. Так даже надежнее. А очищать в триггере оператор после. Хотя очистка в триггере оператор до понадежнее . . .



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.048 c
15-1159932205
Александр Иванов
2006-10-04 07:23
2006.10.29
Смешение бизнес-логики и интерфейса в классах


15-1159983160
ArtemESC
2006-10-04 21:32
2006.10.29
#


15-1159883324
GRAND25
2006-10-03 17:48
2006.10.29
Американские обыватели на ситуацию Россия-Грузия (рыдалъ!)


2-1160897410
weeeeee
2006-10-15 11:30
2006.10.29
Нормализовать строку


2-1160720820
kolj
2006-10-13 10:27
2006.10.29
Робота с MS Word