@HamaVari

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

Например чтобы узнать время последнего изменения файла достаточного этого кода:
FileInfo fileInfo = new FileInfo(filePath);
DateTime lastModified = fileInfo.LastWriteTime;

Мне нужна идентичная логика только с таблицей в базе данных, может есть какой то метод, желательно без создания триггеров и прочего, чтобы так же максимально просто, потому что приложение само по себе данных хранит не много и довольно простое и нагружать его не хочется.
  • Вопрос задан
  • 536 просмотров
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
без создания
Никак.
простого способа получить время последнего изменения таблицы
В вашем примере про файл, используется специальное поле в структуре файла. И вам нужно было создать его при проектировании.

В MS SQL можете попробовать:
SELECT TOP 1 last_user_update
  FROM sys.dm_db_index_usage_stats
  WHERE database_id = db_id()
        AND object_id = object_id('Testtable')
  ORDER BY 1


mayton2019
свой API
Отслеживание изменений данных.

Поле last_update:
Точность типа данных DATETIME 3 ms.
В MS SQL нет построчных триггеров, поэтому все изменения одного запроса будут помечены одним временем.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Вопрос интересный. Я-бы спросил - какой смысл должно нести это время? Все простые варианты добавить к таблице счетчик времени - вызывают много вопросов. Начиная от того как быть с delete. И как быть MVCC. Можно просто рассмотреть парочку кейсов где 2 пользователя одновременно вставляют и удаляют строки и еще по разному коммитят и откатывают изменнеия и получается нехилое число парадоксов.

Аналогия с файловой системой - неуменстна. Файлы - работают в режиме dirty mode. Тоесть сразу фиксируют результат опреации. А таблица в БД в этом смысле похожа на git-репозитарий со множеством бранчей. Тоесть мультиверсионная вселенная. И подытожить ее состояние в любой момент времени так дешево не получиться.

Для нужд аудита изменений - самое простое создать поле last_update_timestamp в таблиах например. И туда добавлять время бизнес-операции.

Еще для аудита практически во всех dbms есть опции. Для Oracle например есть audit table.
Аудит обычно пишет имя пользователя и время действия и время таблицы над которой действие было.
Для MSSQL тоже есть свой API.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы