powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск места вызова rollback
10 сообщений из 10, страница 1 из 1
Поиск места вызова rollback
    #40096751
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,

Есть развесистый pl/sql код, при вызове одной процедуры у нее под капотом где-то случается rollback(явный или не явный), есть ли способ понять в каком месте он случился?

С коммитами можно например мат вью создать (он коммит) и там рейзить стек или в сыром трейсе 10046 коммит вроде виден как
XCTEND rlbk=0, rd_only=0
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096761
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096771
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

спасибо! мог и догадаться про rlbk)

Может еще какие-то способы есть? С коммитами например мат вью способ приятней + видно стек вызовов.
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096778
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkomyagkii_newbi
env,

спасибо! мог и догадаться про rlbk)

Может еще какие-то способы есть? С коммитами например мат вью способ приятней + видно стек вызовов.


Попробуйте вот этот:

DBMS_TRACE DBMS_TRACE Overview

DBMS_TRACE provides subprograms to start and stop PL/SQL tracing in a session. Oracle
collects the trace data as the program executes and writes it to database tables.

A typical session involves:

1. (Optional) Limit tracing to specific subprograms and choose a tracing level.
Tracing all subprograms and exceptions in a large program can produce huge
amounts of data that are difficult to manage.

2. Starting PL/SQL tracing in session (DBMS_TRACE.SET_PLSQL_TRACE).

3. Running an application to be traced.

4. Stopping PL/SQL tracing in session (DBMS_TRACE.CLEAR_PLSQL_TRACE).

After you have collected data with Trace, you can query the database tables that
contain the performance data and analyze it in the same way that you analyze the
performance data from Profiler.
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096783
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Melkomyagkii_newbi,

Код: plsql
1.
alter session set events 'sql_trace {callstack: fname xctend} trace("sqlid(%): %\n", sqlid(), evfunc()) trace("stack is: %\n", shortstack()) errorstack(1)';
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096784
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
хотя чтобы сильно не захламлять лучше сделать просто
Код: plsql
1.
alter session set events 'sql_trace {callstack: fname xctend} errorstack(1)';
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096785
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
пример:
Код: 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.
SQL> @tracefile_set_ident.sql rollbacktrace

Session altered.


TRACEFILE_NAME
----------------------------------------------------------------------------------------------
/opt/oracle/diag/rdbms/ora19/ORA19/trace/ORA19_ora_18853_rollbacktrace.trc

SQL> alter session set events 'sql_trace {callstack: fname xctend} errorstack(1)';

Session altered.

SQL> begin
  2    update xt_test set x=1;
  3    rollback;
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> disc
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
$ grep "PL/SQL Stack" -A10  *rollbacktrace.trc
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x7d153ae0         3  anonymous block

----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst1()+95         call     kgdsdst()            7FFE91C61160 000000002
--
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x7d153ae0         3  anonymous block

----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096850
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov,

Под XCTEND попадает не только лишь rollback.
Для конкретного окружения можно подобрать характерные условия фильтрации для commit, чтобы сделать более точный фильтр.
Код: plsql
1.
2.
3.
4.
5.
6.
-- 1. исключить xctCommitTxn
alter session set events 'sql_trace {callstack: fname xctend} {callstack: nofname xctCommitTxn} trace("sqlid(%): %\n", sqlid(), evfunc()) trace("stack is: %\n", shortstack())';
-- 2. фильтровать по roldrv/opirol
alter session set events 'sql_trace {callstack: fname roldrv|callstack: fname opirol} trace("sqlid(%): %\n", sqlid(), evfunc()) trace("stack is: %\n", shortstack())';
-- 3. фильтровать по xctRollbackTxn_option
alter session set events 'sql_trace {callstack: fname xctRollbackTxn_option} trace("sqlid(%): %\n", sqlid(), evfunc()) trace("stack is: %\n", shortstack())';
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40096851
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SeaGate
Под XCTEND попадает не только лишь rollback.
это очевидно, поэтому я и показывал вывод evfunc() и shortstack, а в твите так и написал: rollback or commit
...
Рейтинг: 0 / 0
Поиск места вызова rollback
    #40097078
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круто, всем спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск места вызова rollback
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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