また、すべてのテーブルの日時スタンプを確認する必要があります。システム内のすべてのテーブルのメタデータを検索し、そのようなリストを最後に更新された日時順に並べ、出力を日時順に降順で表示します。サイズのわずかな変化についても、テーブルのサイズを確認できます。
たとえば、MySQL 5.xでは、次のようなinformation_schema.tablesがあります。
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)
列UPDATE_TIMEは、INSERT、UPDATE、またはDELETEが最後にテーブルに適用された最後の時間を記録します。次のようなクエリを実行して、各データベースが最後にアクセスされた日時を確認できます。
各データベースでテーブルに最後にアクセスした時間:
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;
いずれかのデータベースでテーブルが最後にアクセスされたとき:
SELECT MAX(update_time) last_accessed FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','mysql');
テーブルにアクセスした最後の10日付:
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;
これらは、MySQLからそのようなメタデータを取得する方法のほんの一例です。OracleとSQL Serverには似たような、またはより良い方法があると思います。
データベース(またはスキーマ)へのアクセス頻度を確認したら、古いデータベースとスキーマ自体のコピーをデータとは別に手動でダンプ/エクスポートする必要があります。私の答えはDBにとらわれないわけではありません。SQLServerとOracleのDBAもここで回答を表明する必要があります。データベースインスタンス内のコレクションであるスキーマの概念は、MySQLでは曖昧ですが、SQLServerとOracleでは厳密に準拠しています。