Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Что произойдет, если завалится длительная 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.045 c
15-1160112642
Sergey Konuhov
2006-10-06 09:30
2006.10.29
Задачи о расписаниях (комивояджера)


2-1160741357
_Mouse_
2006-10-13 16:09
2006.10.29
Вопрос по StringGrid


2-1160544824
gvozdkoff
2006-10-11 09:33
2006.10.29
Ключевре поле DB Paradox


15-1159992827
dreamse
2006-10-05 00:13
2006.10.29
Есть ли на свете кнопка ?


1-1158676217
Express
2006-09-19 18:30
2006.10.29
MDI-дочерная форма из библиотеки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский