또한 모든 테이블의 날짜 / 시간 스탬프를 확인하려고합니다. 시스템에서 모든 테이블에 대한 메타 데이터를 검색하고 마지막으로 업데이트 한 날짜 시간순으로 목록을 정렬 한 다음 날짜 시간순으로 출력을 desc 순서로 표시하십시오. 크기가 약간 변경 되어도 테이블 크기를 확인할 수 있습니다.
예를 들어 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에 구애받지 않는다는 것을 변명하십시오. 데이터베이스 인스턴스 내의 컬렉션 인 스키마 개념은 MySQL에서는 흐리게 표시되지만 SQLServer 및 Oracle에서는 매우 엄격하게 따르기 때문에 SQLServer 및 Oracle DBA도 여기에서 답변을 제시해야합니다.