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 小时前
agent面试必备31- AI Agent 核心进阶:工具路由(Tool Routing)
数据库·人工智能·oracle·面试·职场和发展·embedding
weixin_3975740919 小时前
框架v5多数据源让AI查遍企业数据
数据库·人工智能·oracle
澈2071 天前
【无标题】QT入门第十二天:数据库编程(下)模型视图与数据展示 | 零基础学QT
数据库·qt·oracle
在路上~~~~1 天前
EBS 启用系统标准的debug
运维·oracle
落叶-IT1 天前
Java异常处理深度实战教程:彻底掌握异常传播机制,规避线上隐性故障
java·数据库·oracle
杨运交2 天前
[042][数据模块]Mybatis Plus 数据库级租户:基于多数据源路由的动态隔离实现
数据库·oracle·mybatis
ClouGence11 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
ClouGence17 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
曹牧18 天前
Oracle EXPLAIN PLAN
数据库·oracle
贤时间18 天前
codex 助力oracle ebs 开发
数据库·oracle