powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обработка ORA-02067: transaction or savepoint rollback required
5 сообщений из 5, страница 1 из 1
Обработка ORA-02067: transaction or savepoint rollback required
    #38817243
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть процедура, которая создает транзакцию. В ходе транзакции, есть обращение через линк в другую бд.
У данной бд есть свойство, что когда вырастает нагрузка, она может отрубать сессии. Соответственно в таком случае в мою процедуру приходит ORA-02067: transaction or savepoint rollback required. В инете нашел, что рекомендуют фиксировать свою транзакцию, перед использованием дблинка.
Но все таки, эту ошибку можно как-нибудь перехватывать? Чтобы процедура завершилась нормально?
бд - oracle 9.2

вот небольшие тесты:

Процедура в Линк БД:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace procedure TEST_DISCON
(
 p_param1 number
)
begin
  dbms_output.put_line('Start');
  dbms_lock.sleep(p_param1);
  dbms_output.put_line('End');
exception
  when others then 
      dbms_output.put_line('Error');
end;



Код: plsql
1.
grant execute on TEST_DISCON to USER1;



моя БД:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace procedure TEST_DISCON;
(
 p_param1 number
)
is
  v_param2 varchar2(100);
begin
  dbms_output.put_line('Start');
  OWNER_USR.TEST_DISCON@DB_LINK1(p_param1);
  dbms_output.put_line('End');
exception
  when others then 
      dbms_output.put_line('Error');
end;
/



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare
  DbLinkError EXCEPTION;
  PRAGMA EXCEPTION_INIT(DbLinkError, -02067);
begin
  TEST_DISCON(120);
exception
  when DbLinkError then
       dbms_output.put_line('DbLinkError');
  when others then 
       dbms_output.put_line('Error');
end;



Линк БД:

Код: plsql
1.
alter system kill session 'XX,XX'



мое БД:

Код: plsql
1.
ORA-02067: transaction or savepoint rollback required
...
Рейтинг: 0 / 0
Обработка ORA-02067: transaction or savepoint rollback required
    #38818156
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimyaz,

Может есть хотя бы направления, в какую сторону копать, и что почитать?
...
Рейтинг: 0 / 0
Обработка ORA-02067: transaction or savepoint rollback required
    #38818187
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimyazМожет есть хотя бы направлениялистинг из sqlplus без others с полным стеком ошибки
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Обработка ORA-02067: transaction or savepoint rollback required
    #39719289
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наткнулся на аналогичную ошибку
что было:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN

    ВызовУдаленнойПроцедурыСЗАполнениемУдаленнойВремянки();


    INSERT INTO МояВремянка(несколько полей)
    SELECT несколько полей
      FROM УдаленнойВремянки;

end;

ошибка ORA-02067: transaction or savepoint rollback required была в нижнем инсерте, там не заполнялось поле not null



обработчиком ошибок в pl-sql эта ошибка почему-то никак не перехватывалась
Код: sql
1.
2.
3.
4.
--вставили от бессилия при поиске места ошибки
EXCEPTION
    WHEN others THEN
         raise_application_error(-20901, sqlerrm || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
...
Рейтинг: 0 / 0
Обработка ORA-02067: transaction or savepoint rollback required
    #39719510
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxМояВремянкаА стоит ли раскладывать грабли. Временные таблицы в распределенных транзакциях не поддерживаются. Результат от версии к версии может разниться.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL> create global temporary table xxxtmp0 (n number, s varchar2(20)) on commit preserve rows;
SQL> insert into xxxtmp0 select 101, 'before commit' from dual;
SQL> commit;
SQL> insert into xxxtmp0 select 102, 'before remote ' from dual;
SQL> select 'remote anything' from dual@remote;

'REMOTEANYTHING'
----------------
remote anything

SQL> insert into xxxtmp0 select 103, 'after remote' from dual;
SQL> select * from xxxtmp0;

         N S                   
---------- --------------------
       101 before commit               
       102 before remote               
       103 after remote               

SQL> commit;
SQL> select * from xxxtmp0;

         N S                   
---------- --------------------
       101 before commit               

SQL>
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обработка ORA-02067: transaction or savepoint rollback required
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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