Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2

ТЕМА:

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2898

  • Gwen
  • Gwen аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 5
  • Спасибо получено: 0
при высоком уровне
изоляции трансакций (на примере сериалазабле на Оракле)
селект таки копирует рекорды в сторонку (значение "А").
Затем сессия изменяет данные на "Б" и комитит. Здесь Оракле
сравнивает "А" (старое значение!) с текущим значением.
Если совпадает - записывает "Б" и все довольны. Если
какая нибудь левая БЛ записала туда "С" и откомитила,
то описываемой трансакции дается отбой.
(оптимистик локинг)

При таком TX level комит после селекта удаляет все
отложенные рекорды и ,скорее всего (?), не разрешит
изменять их вообще.

При TX level = READ_COMMITED комит после селекта смысла
не имеет. Так что проверь уровень изоляции и еще раз
просмотри логику на предмет трансакций. Если где есть подвох,
так ето в них.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2899

  • Doc
  • Doc аватар
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 41
  • Спасибо получено: 0
Скорее всего это от интербэйза.
Там ведь как бы shapshot создается при логоне, и пока commit не сделаешь (явно), данные в нем не обновятся. Только делать его надо ДО селекта.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2900

Залезла в IBExpert - делаешь селект в редакторе, закрываешь окно и он спрашивает - активная транзакция, rollback, commit , cancel. Так что скорее всего рудиментарная привычка от интербейза осталась.

Закомментировала ненужные коммиты, всё пока нормально работает, нигде ничего не блокируется.
Уровень изоляции нигде явно не меняется, так что он по умолчанию (READ COMMITTED)
Ну а вообще как эти самые коммиты (которые ничего не коммитят) влияют на жизнь базы?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 8 мес. назад #2901

  • Doc
  • Doc аватар
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 41
  • Спасибо получено: 0
Такой вот еще вариант объяснения: в Interbase выборка записей из таблицы накладывает на нее какие-то блокировки. Может быть они не мешают другим запросам выбирать или даже изменять те же строки, но наличие этих блокировок не позволит провести DDL-операцию над таблицей. В Oracle нечто похожее получается при попытке произвести DDL-операцию над таблицей при наличии незавершенных изменений данных:
create table test(tesr_id number(9));

insert into test values (1);
Не говорим commit'а, теперь в другой сессии:
dan@oraspb> alter table test modify test_id number(10);

alter table test modify test_id number(10)

*

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified

Т.е. разработчик при использовании Interbase возможно просто вынужден говорить commit после select'а, чтобы иметь возможность изменения структуры во время работы. ИМХО можно обратиться в эху по Interbase с кототким вопросом "Зачем говорить commit после select'а".

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Коммит после селекта 12 года 7 мес. назад #3051

а что тут странного, на жизнь базу он не влияет, а сделали для быстроты работы, у уменьшения сложности алгоритма самой работы

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.238 секунд