Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / succesfull insert when transaction is read only - нормально? / 7 сообщений из 7, страница 1 из 1
22.06.2017, 11:29
    #39476069
set transaction
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
succesfull insert when transaction is read only - нормально?
Всем привет!

Код: plsql
1.
2.
3.
Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 
SQL> create table dropme (id number);
Table created



Код: plsql
1.
2.
3.
4.
5.
SQL> set transaction read only;
Transaction set
SQL> insert into dropme values (1);
insert into dropme values (1)
ORA-01456: may not perform insert/delete/update operation inside a READ ONLY transaction


Это - нормально!

Код: plsql
1.
2.
3.
4.
5.
SQL> insert into dropme values (1);
1 row inserted
SQL> set transaction read only;
set transaction read only
ORA-01453: SET TRANSACTION must be first statement of transaction


Это - номрально!

Код: plsql
1.
2.
3.
4.
5.
6.
SQL> savepoint before_insert;
Savepoint created
SQL> set transaction read only;
Transaction set
SQL> insert into dropme values (1);
1 row inserted


Это - нормально?
Как узнать в каком режиме у меня транзакция?
...
Рейтинг: 0 / 0
22.06.2017, 15:26
    #39476245
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
succesfull insert when transaction is read only - нормально?
set transaction,

Возможно баг sqlplus. Он специфически обрабатывает некоторые типы команд, в частности SET.
А может между приведенными тремя блоками команд не было коммита...
...
Рейтинг: 0 / 0
22.06.2017, 16:46
    #39476298
set transaction
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
succesfull insert when transaction is read only - нормально?
-2-Возможно баг sqlplus. Он специфически обрабатывает некоторые типы команд, в частности SET.
Поймал я эту штуку в pl/sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 
SQL> begin
  2      commit;
  3      savepoint new_savepoint;
  4      set transaction read only;
  5      insert into dropme values (1);
  6  end;
  7  /
PL/SQL procedure successfully completed



Транзакция на деле оказывается ни разу не read only, повторный запуск селекта видит закоммиченные в другой сессии между селектами данные. Как read commited;

Установка serializable тоже не ругается, если происходит после установки сейвпоинта. Но транзакция похожа на сериализованную, по крайней мере в части repeatable read.
...
Рейтинг: 0 / 0
22.06.2017, 17:11
    #39476321
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
succesfull insert when transaction is read only - нормально?
Ну значит баг сервера. Определить текущий уровень изоляции можно по v$transaction.flag.
Полечить, можно попробовать начать транзакцию до savepoint, например, с помощью local_transaction_id(true).
...
Рейтинг: 0 / 0
22.06.2017, 17:38
    #39476348
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
succesfull insert when transaction is read only - нормально?
-2-Ну значит баг сервера.
Это ж фича! :)
Тут когда-то обсуждали в какой момент Oracle начинает транзакцию.
Судя по всему начинает он с insert, по правилам первой указующей команды (savepoint), а все последующие до открытия шлет лесом.
...
Рейтинг: 0 / 0
22.06.2017, 17:48
    #39476360
DВА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
succesfull insert when transaction is read only - нормально?
Сергей Арсеньев-2-Ну значит баг сервера.
Это ж фича! :)
Тут когда-то обсуждали в какой момент Oracle начинает транзакцию.
Судя по всему начинает он с insert, по правилам первой указующей команды (savepoint), а все последующие до открытия шлет лесом.

скорее всего просто не отлавливается ORA-01453
...
Рейтинг: 0 / 0
22.06.2017, 18:14
    #39476386
set transaction
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
succesfull insert when transaction is read only - нормально?
-2-Ну значит баг сервера. Определить текущий уровень изоляции можно по v$transaction.flag.
спасибо, мне, видимо, прав недодадено, чтоб на v$transaction смотреть.
-2-Полечить, можно попробовать начать транзакцию до savepoint, например, с помощью local_transaction_id(true).
Если так начинать транзакцию, справедливо вознкает ORA-01453 при set transaction.

Мне надо обеспечить репитабл рид по чтению. set transaction read only, как внезапно выяснилось, может оказаться не достаточно. Теперь думаю - уйти в serializable или же закастылиться:
Код: plsql
1.
2.
3.
4.
    if dbms_transaction.local_transaction_id(false) is not null then
        raise_application_error(-20000, 'ORA-01453 workaround: SET TRANSACTION must be first statement of transaction');
    end if;
    set transaction read only;




Похоже на Bug 14146273.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / succesfull insert when transaction is read only - нормально? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]