También debe asegurarse de los sellos de fecha y hora de cada tabla. Busque cualquier metadato en el sistema para cada tabla, ordene dicha lista por fecha y hora actualizada por última vez, y muestre la salida en orden desc por fecha y hora. También puede verificar el tamaño de la tabla incluso para el ligero cambio de tamaño.
Por ejemplo, en MySQL 5.x, tiene information_schema.tables que se ve así:
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 columna UPDATE_TIME registra la última vez que se aplicó por última vez cualquier INSERT, UPDATE o DELETE a la tabla. Puede ejecutar consultas como estas para saber cuándo se accedió por última vez a cada base de datos:
Última vez que se accedió a una tabla en cada base de datos:
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;
Última vez que se accedió a una tabla en cualquier base de datos:
SELECT MAX(update_time) last_accessed FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql');
Últimas 10 fechas en que se accedió a una tabla:
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;
Estos son solo algunos ejemplos de cómo obtener dichos metadatos de MySQL. Estoy seguro de que Oracle y SQL Server tienen métodos similares o mejores.
Una vez que esté seguro de con qué frecuencia o pocas veces se accede a una base de datos (o esquema), debe volcar / exportar manualmente bases de datos antiguas junto con copias del esquema en sí, aparte de los datos. Por favor, disculpe que mi respuesta no es independiente de DB. Los DBA de SQLServer y Oracle también deberían expresar sus respuestas aquí, ya que el concepto de un esquema como una colección dentro de una instancia de base de datos está borroso en MySQL pero se sigue muy estrictamente en SQLServer y Oracle.