获取数据库

时间:2017-05-24 12:57:25

标签: mysql sql database logging mariadb

我需要找出数据库中表的最后更新时间(或上次更改时间)(即最后一次更新,删除或插入特定表中的数据)以确定是否需要备份或不。根据MySQL / MariaDB手册,我使用以下SQL语句来获取数据库中表的最后修改时间:

SELECT update_time FROM information_schema.tables WHERE table_schema='my_db' and table_name='my_table'; -- For table named 'my_table' in database 'my_db'

问题在于:即使在指定的表中进行了更改,结果update_time字段的值也始终返回NULL。更值得注意的是,当我手动浏览tables数据库中的information_schema表时,my_db中没有my_tabletable_schema的条目}和table_name字段分别表示不记录活动。有人可以帮我解决这个问题并解释背后的原因吗?

编辑: 这个问题并不重复,因为问题还会询问information_schema.tables NULL的字段,而不仅仅是询问如何获取上次更新时间。

2 个答案:

答案 0 :(得分:1)

如果表包含UpdatedDate或ModifiedDate日期列,则默认值为值GETDATE()。他应该利用它。  仔细观察时,在插入任何行时,不需要表格来保留历史记录。但是,唯一的先决条件是要知道何时更新任何表。而已! 如果用户想要找出最后一个表更新的时间,他可以查询动态管理视图(dmv) - sys.dm_db_index_usage_stats并轻松找出最后更新的表。让我们通过创建表并更新它来理解这个例子。我们可以使用dmv来确定它最后更新的时间。

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'AdventureWorks')
AND OBJECT_ID=OBJECT_ID('test')

答案 1 :(得分:0)

仅通过从表格表中的INFORMATION_SCHEMA数据库查询查询浏览器或CLI来获取当前数据库大小。

SELECT table_schema "Data Base Name", 
    sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB" 
    FROM information_schema.TABLES 
    GROUP BY table_schema ;

按更新时间排序获取数据库上次更新,而不是创建时间。

SELECT MAX(UPDATE_TIME), MAX(CREATE_TIME), TABLE_SCHEMA 
FROM `TABLES` 
GROUP BY TABLE_SCHEMA 
ORDER BY 1, 2;