Как я могу узнать, откуда заполняется таблица базы данных? - PullRequest
4 голосов
/ 18 мая 2010

Я отвечаю за базу данных Oracle, для которой у нас нет никакой документации. На данный момент мне нужно знать как заполняется таблица.

Как узнать, из какой процедуры, триггера или другого источника эта таблица получает данные?

Ответы [ 6 ]

8 голосов
/ 18 мая 2010

Или, что еще лучше, запросите таблицу DBA_DEPENDENCIES (или ее эквивалент USER_). Вы должны увидеть, какие объекты зависят от них и кому они принадлежат.

select owner, name, type, referenced_owner
from dba_dependencies
where referenced_name = 'YOUR_TABLE'

И да, вам нужно посмотреть сквозь предметы, чтобы увидеть, происходит ли ВСТАВКА.

Также это, из моего комментария выше.

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

6 голосов
/ 18 мая 2010

Это довольно просто; -)

SELECT * FROM USER_SOURCE WHERE UPPER(TEXT) LIKE '%NAME_OF_YOUR_TABLE%';

В выводе вы будете иметь все процедуры, функции и т. Д., Которые в теле будут вызывать вашу таблицу с именем NAME_OF_YOUR_TABLE.

NAME_OF_YOUR_TABLE должен быть записан как UPPERCASE, потому что мы используем UPPER (TEXT) для получения результатов в виде Name_Of_Your_Table, NAME_of_YOUR_table, NaMe_Of_YoUr_TaBlE и т. Д.

2 голосов
/ 19 мая 2010

Другая мысль состоит в том, чтобы попытаться выполнить запрос v $ sql, чтобы найти оператор, который выполняет обновление. Вы можете получить что-нибудь из модуля / действия (или в 10g progam_id и program_line #).

1 голос
/ 24 апреля 2012

Звучит так, как будто вы хотите провести аудит.

Как насчет

AUDIT ALL ON ::TABLE::;

Либо примените политику DBMS_FGA к таблице и соберите клиента, программу, пользователя и, возможно, стек вызовов также будет доступен.

1 голос
/ 19 мая 2010

Изменения DML записываются в * _TAB_MODIFICATIONS.

Без создания триггеров вы можете использовать LOG MINER, чтобы найти все изменения данных и из какого сеанса.

С помощью триггера вы можете записывать переменные SYS_CONTEXT в таблицу.

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions165.htm#SQLRF06117

0 голосов
/ 31 августа 2016

Поздно на вечеринку!

Я также упомянул Гэри о v $ sql. Это может привести к быстрому ответу, если запрос не был сброшен.

Если вы знаете его в своем текущем примере, мне нравится сочетание того, что было использовано выше; если нет динамического SQL, xxx_Dependencies будет работать и работать хорошо.

Присоединитесь к xxx_Source, чтобы получить этот надоедливый динамический SQL.

Мы также переносим данные в наш экземпляр dev с помощью команды копирования SQL * Plus (осторожно! Устарело!), Но данные могут также вводиться с помощью imp или impdp. Проверьте каталоги xxx_Directories на наличие каталогов, предназначенных для ввода / вывода данных.

...