Как узнать, когда в Oracle была создана конкретная таблица?

StackOverflow https://stackoverflow.com/questions/4442323

Вопрос

В Oracle есть ли способ узнать, когда была создана конкретная таблица?

Аналогично, есть ли способ узнать, когда конкретная строка была вставлена / обновлена в последний раз?

Это было полезно?

Решение

SELECT created
  FROM dba_objects
 WHERE object_name = <<your table name>>
   AND owner = <<owner of the table>>
   AND object_type = 'TABLE'

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

Общий ответ на получение временных меток из строки, однако, заключается в том, что вы можете получить эти данные, только если вы добавили столбцы для отслеживания этой информации (при условии, конечно, что ваше приложение также заполняет столбцы).Однако существуют различные особые случаи.Если DML произошел относительно недавно (скорее всего, за последние пару часов), вы должны быть в состоянии получить временные метки из запроса flashback.Если DML произошел за последние несколько дней (или сколько бы времени вы ни хранили свои архивированные журналы), вы могли бы использовать LogMiner для извлечения временных меток, но это будет очень дорогостоящей операцией, особенно если вы получаете временные метки для многих строк.Если вы создаете таблицу с включенными ROWDEPENDENCIES (не по умолчанию), вы можете использовать

SELECT scn_to_timestamp( ora_rowscn ) last_modified_date,
       ora_rowscn last_modified_scn,
       <<other columns>>
  FROM <<your table>>

чтобы получить дату последнего изменения и SCN (номер системного изменения) для строки.Однако по умолчанию, без ROWDEPENDENCIES, SCN находится только на уровне блока.Тот Самый SCN_TO_TIMESTAMP функция также не сможет вечно сопоставлять SCN с временными метками.

Другие советы

Вы можете запросить представления словаря данных / каталога, чтобы узнать, когда был создан объект, а также время последнего DDL с участием объекта (пример:изменить таблицу)

select * 
  from all_objects 
 where owner = '<name of schema owner>'
   and object_name = '<name of table>'

В столбце "СОЗДАНО" указано, когда был создан объект.Столбец "LAST_DDL_TIME" сообщает вам, когда был выполнен последний DDL для объекта.

Что касается того, когда была вставлена / обновлена конкретная строка, вы можете использовать столбцы аудита, такие как столбец "insert_timestamp", или использовать триггер и заполнить таблицу аудита

SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'

Вы копируете и вставляете следующий код.В нем будут отображены все таблицы с Имя и дата создания

SELECT object_name,created FROM user_objects
WHERE object_name LIKE  '%table_name%'
AND object_type = 'TABLE'; 

Примечание: Заменить '%имя_таблицы%' с именем таблицы, которое вы ищете.

Попробуйте выполнить этот запрос:

ВЫБЕРИТЕ sysdate ИЗ schema_name.имя_таблицы;

Здесь должна отображаться временная метка, которая вам может понадобиться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top