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

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

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

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

Может еще какие-то способы есть? С коммитами например мат вью способ приятней + видно стек вызовов.
...
Рейтинг: 0 / 0
10.09.2021, 17:07
    #40096778
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск места вызова rollback
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
10.09.2021, 17:22
    #40096783
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск места вызова rollback
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
10.09.2021, 17:27
    #40096784
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск места вызова rollback
хотя чтобы сильно не захламлять лучше сделать просто
Код: plsql
1.
alter session set events 'sql_trace {callstack: fname xctend} errorstack(1)';
...
Рейтинг: 0 / 0
10.09.2021, 17:32
    #40096785
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск места вызова rollback
пример:
Код: 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
11.09.2021, 13:10
    #40096850
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск места вызова rollback
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
11.09.2021, 13:15
    #40096851
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск места вызова rollback
SeaGate
Под XCTEND попадает не только лишь rollback.
это очевидно, поэтому я и показывал вывод evfunc() и shortstack, а в твите так и написал: rollback or commit
...
Рейтинг: 0 / 0
13.09.2021, 10:38
    #40097078
Melkomyagkii_newbi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск места вызова rollback
Круто, всем спасибо!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск места вызова rollback / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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