Oracle SCN与时间戳的映射关系

目录

一、基本概述

二、相关操作

三、参考文档


一、基本概述

Oracle 数据库中的 SYS.SMON_SCN_TIME 表是一个关键的内部表,主要用于记录过去时间段中SCN与具体的时间戳之间的映射关系。这种映射关系可以帮助用户将 SCN 值转换为可读性更强的时间戳,从而了解特定操作的发生时间或作为数据分析和报告的一部分。该表还为闪回类型的查询提供了一种将时间映射为 SCN 的途径,这对于执行时间点恢复、查看数据的历史状态等操作非常有用。

SYS.SMON_SCN_TIME表包含多个字段,如thread(线程号)、time_mp(时间主键)、time_dp(时间日期)、scn_wrp(SCN包装器)、scn_bas(SCN基础)、num_mappings(映射数量)、tim_scn_map(时间SCN映射)、scn(SCN值)以及orig_thread(原始线程号)等。

在 Oracle 10g 中,SMON 进程每 6 秒钟更新一次 SMON_SCN_TIME 基表;而在版本9.2中,则是每 5 分钟更新一次。更新频率与 SCN 的增长速率相关,在繁忙的实例中,SCN 增长极快时,SMON 可能会以最短间隔频率更新。

从 Oracle 10g 开始,SMON 后台进程会每 5 分钟被唤醒一次,检查 SMON_SCN_TIME 表中的记录数。如果记录数超过 144000 条,则会删除最老的一条记录以释放空间。如果一次删除不足以获得足够的空间,SMON 会反复多次执行删除操作。

数据库提供的两个函数,scn_to_timestamp 和 timestamp_to_scn 可实现 SCN 与时间戳的转换,正是基于 SYS.SMON_SCN_TIME 表实现的。

若在数据库运行过程中更新了系统时间,则需要额外注意下面几点:

(1)当 smon_scn_time 最后一次更新的时间大于当前系统时间时,SMON 不会再将 SCN 与 TIMESTAMP 的映射结果写入到 sys.smon_scn_time 表中,也对应下面的第三点。

(2)系统时间往后改(如从2024 年改到 2025 年),不会影响 smon_scn_time 表的更新(可以切换归档,立即更新该表),但某些应用可能会受影响(例如指定时间戳进行恢复,时间跨度较大,指定的时间戳没有对应的日志数据)。

(3)系统时间往前改(如从 2024 年改到2023年),那么 SMON 不会将 SCN 与 timestamp 写入 smon_scn_time 表。如果 SCN 与TIMESTAMP的映射不能写入到smon_scn_time表中,我们就不能进行SCN 与TIMESTAMP转换,就不能利用timestamp进行相关的操作,如恢复。

二、相关操作

sql 复制代码
# 查询 SCN 与 TimeStamp 的映射关系
select * from ( select scn, to_char(time_dp, 'yyyy-mm-dd hh24:mi:ss') time from sys.smon_scn_time order by 2 desc) where rownum < 10;

# 查询当前系统时间
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time from dual;

# 查询当前数据库 SCN 号
select dbms_flashback.get_system_change_number from dual;

# SCN 与 时间戳的相互转换
select timestamp_to_scn('27-NOV-24 02.48.52 PM') scn from dual;

select scn_to_timestamp(3682049) scn from dual;

三、参考文档

下面是从 Oracle 官方或官方论坛截图。

相关推荐
杀气丶4 小时前
L2JBR - 修复数据库编码为UTF8
数据库·sql·oracle
cgsthtm9 小时前
RuoYi.Net后端返回雪花ID前端精度丢失问题
oracle·vue·精度丢失·雪花id·ruoyi.net
友善的鸡蛋14 小时前
项目中执行SQL报错oracle.jdbc.OracleDatabaseException: ORA-00942: 表或视图不存在
数据库·sql·oracle
数据库生产实战15 小时前
ORACLE 19C ADG环境 如何快速删除1.8TB的分区表?有哪些注意事项?
数据库·oracle
YongCheng_Liang16 小时前
Oracle数据库基本命令的8个模块
运维·数据库·oracle
小猪咪piggy17 小时前
【项目】年会抽奖系统
数据库·oracle
枫叶_v17 小时前
【DB】Oracle转MySQL
数据库·mysql·oracle
TiAmo zhang1 天前
SQL Server 2019实验 │ 表数据插入、修改和删除
数据库·oracle
krielwus1 天前
Oracle OMF 配置文档
数据库·oracle
jackletter2 天前
待补充 五大关系数据库(sqlserver、mysql、oracle、pgsql、sqlite)的列类型:目录
mysql·oracle·sqlserver·sqlite·pgsql·列类型