Vous voulez également vous assurer des tampons datetime de chaque table. Recherchez toutes les métadonnées du système pour chaque table, triez une telle liste par date et heure de dernière mise à jour et affichez la sortie dans l'ordre décroissant par date et heure. Vous pouvez également vérifier la taille du tableau, même pour le léger changement de taille.
Par exemple, dans MySQL 5.x, vous avez information_schema.tables qui ressemble à ceci:
mysql> desc information_schema.tables;
+-----------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| TABLE_TYPE | varchar(64) | NO | | | |
| ENGINE | varchar(64) | YES | | NULL | |
| VERSION | bigint(21) unsigned | YES | | NULL | |
| ROW_FORMAT | varchar(10) | YES | | NULL | |
| TABLE_ROWS | bigint(21) unsigned | YES | | NULL | |
| AVG_ROW_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| INDEX_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_FREE | bigint(21) unsigned | YES | | NULL | |
| AUTO_INCREMENT | bigint(21) unsigned | YES | | NULL | |
| CREATE_TIME | datetime | YES | | NULL | |
| UPDATE_TIME | datetime | YES | | NULL | |
| CHECK_TIME | datetime | YES | | NULL | |
| TABLE_COLLATION | varchar(32) | YES | | NULL | |
| CHECKSUM | bigint(21) unsigned | YES | | NULL | |
| CREATE_OPTIONS | varchar(255) | YES | | NULL | |
| TABLE_COMMENT | varchar(2048) | NO | | | |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.01 sec)
La colonne UPDATE_TIME enregistre la dernière fois où INSERT, UPDATE ou DELETE a été appliqué pour la dernière fois à la table. Vous pouvez exécuter des requêtes comme celles-ci pour savoir quand chaque base de données a été accédée pour la dernière fois:
Dernière fois qu'une table a été consultée dans chaque base de données:
SELECT table_schema,MAX(update_time) last_accessed
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql')
AND update_time IS NOT NULL
GROUP BY table_schema;
Dernière fois où une table a été consultée dans une base de données:
SELECT MAX(update_time) last_accessed FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql');
10 dernières dates auxquelles un tableau a été consulté:
SELECT * FROM
(SELECT * FROM
(SELECT last_accessed,COUNT(1) access_count
FROM (SELECT DATE(update_time) last_accessed
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql')
AND update_time IS NOT NULL) A
GROUP BY last_accessed) AA
ORDER BY last_accessed DESC) AAA
LIMIT 10;
Ce ne sont que quelques exemples de la façon d'obtenir de telles métadonnées à partir de MySQL. Je suis sûr qu'Oracle et SQL Server ont des méthodes similaires ou meilleures.
Une fois que vous êtes sûr de la fréquence ou de l'accès rare à une base de données (ou schéma), vous devez vider / exporter manuellement les bases de données anciennes avec des copies du schéma lui-même en dehors des données. Veuillez excuser que ma réponse ne soit pas indépendante de la base de données. Les DBA SQLServer et Oracle devraient également exprimer leurs réponses, car le concept d'un schéma étant une collection au sein d'une instance de base de données est flou dans MySQL mais très strictement suivi dans SQLServer et Oracle.