Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
-2-
каверзный вопрос

Почему зеркало (плоское) переворачивает лево и право, а верх и низ - нет.

Зеркало ничего не переворачивает, то что находится слева слева и отражается :)
20 ноя 10, 12:18    [9812680]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
Dimitry Sibiryakov
Serializable не увидит мастера даже если он закоммитится, стало быть ждать смысла нет, нет повода для deadlock.

ну так допишите
set transaction isolation level serializable;
при отложенной проверке ограничения целостности FK тоже нет никакого смысла при вставке что-то ждать. И тем не менее :)
20 ноя 10, 12:21    [9812687]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
-2-
Member

Откуда:
Сообщений: 15330
mmar
-2-
Почему зеркало (плоское) переворачивает лево и право, а верх и низ - нет.
потому что глаза левые и правые, а не верхние и нижние:)
Пока вывод - аналитические способности отсутствуют. Склонен действовать по шаблону.
20 ноя 10, 12:23    [9812692]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
mmar
Member

Откуда: -)
Сообщений: 391
-2-
mmar
пропущено...
потому что глаза левые и правые, а не верхние и нижние:)
Пока вывод - аналитические способности отсутствуют. Склонен действовать по шаблону.

Задачка-то на самом деле боян тот еще)) Правильный ответ скучный
20 ноя 10, 12:25    [9812697]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
_Nikotin
ORA-29471: DBMS_SQL access denied

разобрался, эта штука кешируется где-то в сессии и дальше начинает ругаться на все попытки вызвать dbms_sql.to_refcursor. Первый раз обламывался если триггеры дёргались не в том порядке, а дпльше спасала только новая сессия с триггерами в другом порядке.
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> declare
  2    s sys_refcursor;
  3    n number;
  4  begin
  5    open s for select * from dual;
  6    n := dbms_sql.to_cursor_number(s);
  7    s := dbms_sql.to_refcursor(n);
  8    close s;
  9  end;
 10  /

PL/SQL procedure successfully completed.

SQL>
SQL> declare
  2    s sys_refcursor;
  3    n number := -1;
  4  begin
  5    s := dbms_sql.to_refcursor(n);
  6    close s;
  7  end;
  8  /
declare
*
ERROR at line 1:
ORA-29471: DBMS_SQL access denied
ORA-06512: at "SYS.DBMS_SQL", line 2603
ORA-06512: at line 5


SQL>
SQL> declare
  2    s sys_refcursor;
  3    n number;
  4  begin
  5    open s for select * from dual;
  6    n := dbms_sql.to_cursor_number(s);
  7    s := dbms_sql.to_refcursor(n);
  8    close s;
  9  end;
 10  /
declare
*
ERROR at line 1:
ORA-29471: DBMS_SQL access denied
ORA-06512: at "SYS.DBMS_SQL", line 2603
ORA-06512: at line 7
20 ноя 10, 13:08    [9812763]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Dimitry Sibiryakov
брадобрей
да, уровень моего вчерашнего полуночного полоумия достиг предела

Serializable не увидит мастера даже если он закоммитится, стало быть ждать смысла нет, нет
повода для deadlock.

alter session set isolation_level=serializable;
 
Session altered

insert into ane_t values(2);
 
insert into ane_t values(2)
 
ORA-00060: deadlock detected while waiting for resource
ORA-06512: at "ANDREY.ANE_T_AIR", line 4
ORA-04088: error during execution of trigger 'ANDREY.ANE_T_AIR'

..."не увидит парента" <> "не отреагирует".
Кстати, а как именно отреагирует serializаble транзакция на вставку парента конкурентом?
Чур не подглядывать :)
20 ноя 10, 13:12    [9812771]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
andrey_anonymous,

Лучше покажите где в документации описывается такое поведение с ожиданиями при проверке FK, или хотя бы статью про это.
20 ноя 10, 13:32    [9812808]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51815

_Nikotin
Лучше покажите где в документации описывается такое поведение с ожиданиями при проверке
FK, или хотя бы статью про это.

Не оно?
PL/SQL User Guide
If an autonomous transaction attempts to access a resource held by
the main transaction, a deadlock can occur. Oracle raises an exception in the autonomous
transaction, which is rolled back if the exception goes unhandled.

Posted via ActualForum NNTP Server 1.4

20 ноя 10, 13:45    [9812838]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
Dimitry Sibiryakov,

не, я про это:
create table parents(n number primary key);
create table childs(n number, constraint fkc foreign key (n) references parents (n));

<session1>
insert into parents values(1);

<session2>
insert into childs values(1);
...wait for session1
Зачем тут ждать если можно смело сказать
ORA-02291: integrity constraint (TEST_PARTITION.FKC) violated - parent key not found
Такая же проверка нужна при вставке двух значений из параллельных сессий в уникальный столбец.
20 ноя 10, 14:01    [9812871]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
_Nikotin, вот тут что делать?
<session1>
insert into parents values(1);
COMMIT;
DELETE parents;
<session2>
insert into childs values(1);
...wait for session1

_Nikotin
Такая же проверка нужна при вставке двух значений из параллельных сессий в уникальный столбец.

И что эта проверка должна вернуть? "Ок, дублей нет, вставляем"?
Вы легко можете воспроизвести это поведение, убрав PK и сделав соответствующие проверки на триггерах. Классические грабли для нубов :)
20 ноя 10, 14:08    [9812888]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
andrey_anonymous
_Nikotin, вот тут что делать?
<session1>
insert into parents values(1);
COMMIT;
DELETE parents;
<session2>
insert into childs values(1);
...wait for session1

не понял вопроса, если мы жём то дожидаемся коммита и после DELETE parents; зависает в ожидании второй сессии. Если нас сразу посылают во второй транзакции с ORA-02291, то спокойно удаляем в первой.

andrey_anonymous
_Nikotin
Такая же проверка нужна при вставке двух значений из параллельных сессий в уникальный столбец.

И что эта проверка должна вернуть? "Ок, дублей нет, вставляем"?
Вы легко можете воспроизвести это поведение, убрав PK и сделав соответствующие проверки на триггерах. Классические грабли для нубов :)

Стоп, я про проверку PK на наличие uncommited значений, с этим всё нормально, вопросов нет.
20 ноя 10, 14:17    [9812904]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
_Nikotin
Такая же проверка нужна при вставке двух значений из параллельных сессий в уникальный столбец.

Видимо я не выспался и плохо формулирую мысль: имелось в виду что для проверки PK и FK при вставках используется один и тот же механизм. Зачем он нужен для FK - мне не понятно. Где такое поведение описано в документации я не нашёл..
20 ноя 10, 14:20    [9812909]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
_Nikotin
Dimitry Sibiryakov,

не, я про это:
create table parents(n number primary key);
create table childs(n number, constraint fkc foreign key (n) references parents (n));

<session1>
insert into parents values(1);

<session2>
insert into childs values(1);
...wait for session1
Зачем тут ждать если можно смело сказать
ORA-02291: integrity constraint (TEST_PARTITION.FKC) violated - parent key not found


а какая будет реакция на commit в первой сессии?
А какая, по Вашему мнению должна быть реакция? parent key not found?
20 ноя 10, 14:28    [9812931]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
_Nikotin
andrey_anonymous
_Nikotin, вот тут что делать?
<session1>
insert into parents values(1);
COMMIT;
DELETE parents;
<session2>
insert into childs values(1);
...wait for session1

не понял вопроса, если мы жём то дожидаемся коммита и после DELETE parents; зависает в ожидании второй сессии. Если нас сразу посылают во второй транзакции с ORA-02291, то спокойно удаляем в первой.

Видимо, я выразился непонятно.
<session one-year-ago>
insert into parents values(1);
COMMIT;
<session1>
DELETE parents;
<session2>
insert into childs values(1);
Как должен был бы повести себя сервер, если бы проверка fk не была основана та тех же механизмах что и pk?
20 ноя 10, 14:55    [9812979]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
-2-
Member

Откуда:
Сообщений: 15330
andrey_anonymous
Как должен был бы повести себя сервер, если бы проверка fk не была основана та тех же механизмах что и pk?
Эта ситуация отличается от первоначальной, для второй сессии родительский ключ "существует" и на него надо наложить share lock.
Когда при инсерте закомиченного родительского ключа нет, логично было бы сразу выдавать ошибку, а не пытаться заблокировать "несуществующую" запись, как это делается с PK.
20 ноя 10, 15:07    [9813001]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
-2-
не пытаться заблокировать "несуществующую" запись, как это делается с PK.

То есть, Вы предложили бы держать два механизма проверки parent key:
Первый - существующий, использующийся для проверки PK и FK во всех случаях кроме.
И второй - шпицательный для проверки Parent Key именно в случае, если конкурент выполняет insert этого самого parent key.
Не уверен что это хорошая идея :)
20 ноя 10, 15:15    [9813019]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
тема весёлая, но своему названию не соответствует ни разу.
т.е. имхо, не надо на собеседовании такие вопросы задавать.
вот, за пивом - самое то :)
20 ноя 10, 15:25    [9813045]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
_Nikotin
Судя по всему Вы бы тоже споткнулись об ORA-29471: DBMS_SQL access denied :)
Угадайте не читая в чем причина?

Не, не споткнулся.
Причем ожидал, даже планировал тест-кейс (о вполне детерминированном "неопределенном порядке" выполнения триггеров - еще на 9i исследовали тему), но... 11.2 отказалась выполнять триггера неправильно - новый повод на "поковыряться" :)
20 ноя 10, 15:37    [9813071]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
-2-
andrey_anonymous
Как должен был бы повести себя сервер, если бы проверка fk не была основана та тех же механизмах что и pk?
Эта ситуация отличается от первоначальной, для второй сессии родительский ключ "существует" и на него надо наложить share lock.
Когда при инсерте закомиченного родительского ключа нет, логично было бы сразу выдавать ошибку, а не пытаться заблокировать "несуществующую" запись, как это делается с PK.


я считаю, что это неправильно. Допустим, что в обе таблицы записи заносятся с TimeStamp-ами. Если возникает ошибка parent not found, то в журнал ошибок запись тоже пишется с TimeStamp-ом. Тогда будет явно видно, что в момент записи родительский ключ существует и, соответственно, с точки зрения целостности таблиц ошибка не должна возникать.
20 ноя 10, 15:50    [9813106]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Bfink
Тогда будет явно видно, что в момент записи родительский ключ существует и, соответственно, с точки зрения целостности таблиц ошибка не должна возникать.

Не согласен. Memento ACID :)
20 ноя 10, 16:00    [9813131]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3778
_Nikotin
Лучше покажите где в документации описывается такое поведение с ожиданиями при проверке FK, или хотя бы статью про это.


похоже?
oracle
INSERT, UPDATE, and DELETE statements on the child table do not acquire any locks on the parent table, although INSERT and UPDATE statements wait for a row-lock on the index of the parent table to clear.
20 ноя 10, 16:04    [9813142]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
Техничкин
Guest
nazimka
В продолжение темы https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=807398&msg=9811587
(суть - задачи на собеседовании)
Итак первая задачка, предложенная товарищем softwarer
softwarer
Тогда позвольте контрольный вопрос. Пусть у нас есть две таблицы, связанные внешним ключом. Вешаем на таблицу-мастер триггер after insert, вставляющий в детальную табличку запись, ссылающуюся на вставленную - надеюсь, вопросов не вызывает, функционирование понятно.

Теперь берём и начинаем выполнять тело этого триггера в автономной транзакции - можем сделать? После чего пишем следующий код:

begin
  insert into master (..) values (..);
  rollback;
end;

Сервер оказывается в непростой ситуации: ему вроде как надо откатить вставку в мастер-таблицу, но тогда запись в детальной таблице нарушит целостность по внешнему ключу. А откатить закоммиченную автономную транзакцию как бы тоже не комильфо. Внимание, вопрос: как поведёт себя сервер в такой ситуации? Без попытки воспроизвести на компе :)



Очередной детский сад.

1) если вставка в мастер идет в основной, а тело триггера - в автономной, то это две транзакции, первая не видит вторую, что тут думать?

2) видно товарищ softwarer на эти грабли наступил не просто так. Видать круто обжегся, наверняка уже
после деплоя в продакшин. Вот этот факт - черезжопного дизайна местного типо гуры-говорителя
многих предложений умными словами - решительно доставляет.

3) я бы на собеседовании с товарищем softwarer отпинал бы последнего по архитектуре решения в целом, в котором пришлось бы делать такое. Уверен, хватили бы минут 10, чтобы показать, кто-же, на самом деле, тут d'Bill.

На работу бы не устроился, но это было бы и хорошо - какой смысл работать в подобной конторе, тратить время на подобных умников?
20 ноя 10, 16:20    [9813173]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
А пашел ка ты нахер.
Отличная задачка.
20 ноя 10, 16:24    [9813194]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
Техничкин
Guest
брадобрей
А пашел ка ты нахер.
Отличная задачка.


В чем она отличная? Жевать сопли на предмет видимости изменений двух транзакций четырьмя листами всей толпой местных типо гур?
Мда, видать действительно сруль деградирует. Это вам не рестарт при merge обсуждать.

Дожили.

Пипец.
20 ноя 10, 16:30    [9813211]     Ответить | Цитировать Сообщить модератору
 Re: Каверзные вопросы на собеседовании на вакансию Oracle Developer .  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
Техничкин,

действительно, рули ты в аналы истории.

обсуждения таких задачек очень полезны. хотя че тебе объяснять?
20 ноя 10, 16:56    [9813263]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
Все форумы / Oracle Ответить