Size: a a a

2020 September 29

М

Михаил Власов... in Oracle RU
GS
Ребят, всем привет
Такой вопрос: как понять на триггере откуда падает значение в огромной производственной базе?
Create or replace trigger trg_bla after delete or insert or update on tab_bla
referencing new as new old as old for each row
Declare
a_col_bla_new  number := :new.col_bla;
.........
Запрос к системным таблицам на поиск вставки
Select * from dba_source where text like ‘%insert%tab_bla%col_bla%’ ;
не помогает. Пользаки точно вручную не вводят. Референсы к таблице ничего не дают, т. к. У данной колонки нет связей.

Есть куча пакетов, джобов, пайплайнов которые участвуют здесь, но как выйти кто конкретно? Как в таких случаях нападают на следы?
Может еще с учетом регистра поискать по дба сорц. Ывает помогает. Ну или хрустальный шар.
источник

DC

Dmitry Comanda in Oracle RU
GS
Что он даст?
Стек вызовов перед insert-ом/триггером, с именами пакетов и номерами строк
источник

G

GS in Oracle RU
Samat Shaikhin
если в пакетах, то добавь детальное логирование где есть инсерт к той таблице
Детальное - это все столбцы и дмл действия терминалов?
источник

MO

Max Olsson in Oracle RU
GS
Ребят, всем привет
Такой вопрос: как понять на триггере откуда падает значение в огромной производственной базе?
Create or replace trigger trg_bla after delete or insert or update on tab_bla
referencing new as new old as old for each row
Declare
a_col_bla_new  number := :new.col_bla;
.........
Запрос к системным таблицам на поиск вставки
Select * from dba_source where text like ‘%insert%tab_bla%col_bla%’ ;
не помогает. Пользаки точно вручную не вводят. Референсы к таблице ничего не дают, т. к. У данной колонки нет связей.

Есть куча пакетов, джобов, пайплайнов которые участвуют здесь, но как выйти кто конкретно? Как в таких случаях нападают на следы?
Может где-то делается execute immediate, а название таблицы хранится строкой в какой-нибудь другой таблице...
источник

MO

Max Olsson in Oracle RU
Я бы посмотрел в v$sql по свежим следам
источник

G

GS in Oracle RU
Max Olsson
Может где-то делается execute immediate, а название таблицы хранится строкой в какой-нибудь другой таблице...
А как узнать?
источник

G

GS in Oracle RU
Max Olsson
Я бы посмотрел в v$sql по свежим следам
Подскажите команду
источник

MO

Max Olsson in Oracle RU
Особо никак, это разрабы дичь могут понаписать)
источник

G

GS in Oracle RU
Max Olsson
Особо никак, это разрабы дичь могут понаписать)
Здесь тупик в общем, ок
источник

MO

Max Olsson in Oracle RU
GS
Подскажите команду
select vs.*
from v$sql vs
where dbms_lob.instr(lower(vs.sql_fulltext), 'table_name') > 0
order by vs.last_active_time desc;


вызываешь ошибку и смотришь, что за запросы к таблице выполнялись
источник

A

Al in Oracle RU
GS
Подскажите команду
СИДЕТЬ!
источник

G

GS in Oracle RU
Max Olsson
select vs.*
from v$sql vs
where dbms_lob.instr(lower(vs.sql_fulltext), 'table_name') > 0
order by vs.last_active_time desc;


вызываешь ошибку и смотришь, что за запросы к таблице выполнялись
Спасибо
источник

A

Al in Oracle RU
Max Olsson
select vs.*
from v$sql vs
where dbms_lob.instr(lower(vs.sql_fulltext), 'table_name') > 0
order by vs.last_active_time desc;


вызываешь ошибку и смотришь, что за запросы к таблице выполнялись
Я смотрю тяжела жизнь Админа когда контора экономит на нормальных инструментах
источник

MO

Max Olsson in Oracle RU
Это ошибка в коде, значит и лезть надо в код.
источник

М

Михаил Власов... in Oracle RU
Может это не бага, а фитча.
источник

キG

キリル Gashkov in Oracle RU
GS
Туда значение не присваивается. Хочу понять откуда не присваивает
owa_util.who_called_me есть такая великолепная вещь
источник

キG

キリル Gashkov in Oracle RU
странно что ее никто не предложил. показывает колстек вызова
источник

キG

キリル Gashkov in Oracle RU
но это нужно чтобы в код триггера кто-то это вставил. чтобы в логи писало стек вызова
источник

キG

キリル Gashkov in Oracle RU
иначе никак
источник

MO

Max Olsson in Oracle RU
А в триггере будет корректный стек? Не знал
источник