查看数据库表某一段时间的镜像
1、Oracle(闪回查询)
Oracle的闪回查询直接支持查询表的历史版本:
-- 查询表在 2025-11-01 00:00:00的状态
SELECT * FROM 表名 AS OF TIMESTAMP TO_TIMESTAMP('2025-11-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 若需精确到SCN(系统更改号)
SELECT * FROM 表名 AS OF SCN 123456;2、MySQL(利用 binlog 日志恢复历史版本)
MySQL 本身不直接支持表的历史镜像查询,但可以通过二进制日志(binlog)回放来恢复指定时间点的表数据:
-- 1. 先通过binlog找到表在目标时间点的操作记录 -- 使用mysqlbinlog工具(命令行,非SQL)提取指定时间范围的日志 mysqlbinlog --start-datetime="2025-11-01 00:00:00" --stop-datetime="2025-11-02 00:00:00" /var/log/mysql/binlog.000001 > history.sql -- 2. 分析history.sql,提取目标表的操作,反向恢复到临时表查看
3、PostgreSQL(利用系统表pg_stat_get_snapshot或时间线)
PostgreSQL 可通过pg_stat_get_snapshot或时间线恢复(需开启归档):
-- 方法1:使用时间点恢复(PITR)到临时库后查询(需提前配置归档) -- 方法2:如果表有版本控制(如使用temporal tables插件) SELECT * FROM 表名 AS OF SYSTEM TIME '2025-11-01 00:00:00';
