Как получить список всех последних измененных таблиц в базе данных Oracle?

select ora_rowscn from table_name;

ORA_ROWSCN возвращает консервативный номер системного изменения верхней границы (SCN) самого последнего изменения строки. Этот псевдостолбец полезен для приблизительного определения времени последнего обновления строки.

Как мне получить временную метку отсюда? Кроме того, есть ли какой-либо запрос, с помощью которого я могу получить все последние измененные таблицы в определенной схеме?


person Akash Chaudhuri    schedule 18.10.2017    source источник


Ответы (2)


SCN_TO_TIMESTAMP принимает в качестве аргумента число, которое оценивается как номер изменения системы (SCN), и возвращает приблизительную метку времени, связанную с этим SCN.

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) 
FROM employees
WHERE employee_id = 188;

Если у вас есть 10g или выше, вы можете использовать функцию ретроспективного просмотра Oracle, чтобы получить эту информацию. Вам нужно будет включить ретроспективный кадр;

select  table_name ,max(commit_timestamp) 
from FLASHBACK_TRANSACTION_QUERY 
where table_owner = 'YOUR_SCHEMA' 
      and operation in ('INSERT','UPDATE','DELETE','MERGE') 
group by table_name
person XING    schedule 18.10.2017
comment
Обратите внимание, что вам нужны привилегии для запуска FLASHBACK_TRANSACTION_QUERY. - person Moudiz; 18.10.2017

Не должно быть необходимости связываться с SCN для того, что вы просите. Почему бы просто не:

begin dbms_stats.flush_database_monitoring_info; end;

select * from dba_tab_modifications
where timestamp >= sysdate - 7
order by timestamp desc;

Если вы (по глупости?) не используете только уровень статистики BASIC (по умолчанию TYPICAL, что выше), это должно нормально работать в любой базе данных 11g или более поздней версии.

person Matthew McPeak    schedule 18.10.2017