DM LSN 与 Oracle SCN 对比

1 DM LSN 和 Oracle SCN 概念

DM LSN(Log Sequence Number)是由系统自动维护的 Bigint 类型数值,具有自动递增、 全局唯一特性,每一个 LSN 值代表着 DM 系统内部产生的一个物理事务。LSN 取值范围 0~正无穷大,新建的库 LSN 为 0,以后日志每被写入 一次,LSN 值增加 1。

物理事务(Physical Transaction,简称 ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库管理 系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。

DM 数据库中与 LSN 相关的信息 ,可以通过查询 V\RLOG 和 V\\RAPPLY_PARALLEL_INFO 表来获取。

Oracle SCN(System Change Number,系统改变号)是一个由系统内部进行维护的序列号。当系统需要更新时自动增加,它是系统中维持数据的一致性和顺序恢复的重要标志,是数据库中非常重要的数据结构。注意SCN是有上限的,最大值参考官方文档或者在数据库中进行查询。

在数据库中SCN是作为一种类时钟机制来标记数据库动作。比如每当有一个事务发生,数据库会用一个SCN对它进行标记。SCN全局唯一,随时间的增长而增长,除非重建数据库这个值才会被重置。在数据库中,SCN就像血液一样无处不在,比如数据文件头,控制文件,数据块头,日志文件等都标记着SCN。也正因此数据库的一致性维护和SCN密切相关。不管是数据库备份还是恢复都是离不开SCN的。

2 DM LSN分类及与Oracle SCN对比

DM 主要包括以下几种类型的 LSN:

  • CUR_LSN 是系统已经分配的最大 LSN 值。物理事务提交时,系统会为其分配一个唯一的 LSN 值,大小等于 CUR_LSN + 1,然后再修改 CUR_LSN=CUR_LSN+1。
    (Oracle:Current SCN,Oracle 中表示当前数据库已分配的最大 SCN 值,随事务提交递增。CUR_LSN 更强调物理事务,Current SCN 同时支持逻辑事务和 MVCC。)
  • FILE_LSN 是已经写入联机 Redo 日志文件的日志包的最大 LSN 值。每次将 Redo 日志包 RLOG_PKG 写入联机 Redo 日志文件后,都要修改 FILE_LSN 值。
    (Oracle:Redo Log SCN,表示已写入 Redo 日志的 SCN 值,FILE_LSN 明确与日志包。RLOG_PKG绑定,Redo Log SCN 与日志组管理相关。)
  • FLUSH_LSN 是已经发起日志刷盘请求,但还没有真正写入联机 Redo 日志文件的最大 LSN 值。
    (无对标,FLUSH_LSN 是 DM 特有的概念,Oracle 没有明确区分"已发起刷盘但未写入"的 SCN,日志刷盘由 LGWR 异步处理。)
  • CKPT_LSN 是检查点 LSN,所有 LSN ≤ CKPT_LSN 的物理事务修改的数据页, 都已经从 Buffer 缓冲区写入磁盘,CKPT_LSN 由检查点线程负责调整。
    (Oracle:Checkpoint SCN database,表示检查点完成时,所有 SCN ≤ Checkpoint SCN 的数据修改已写入数据文件[V$DATAFILE]。)
  • APPLY_LSN 是备库已写入联机 Redo 日志文件的日志包的原始最大 LSN 值,此 LSN 取自主库对应的原始日志包中的最大 LSN 值。如果主库是 DMDSC 集群,备库分别为主库每一个节点维护一个 APPLY_LSN。
    (Oracle:Applied SCN,DG中表示备库已应用的主库 Redo 日志的 SCN 值。APPLY_LSN 在 DMDSC 集群中为主库每个节点单独维护,Applied SCN 在 Oracle Data Guard 中是全局的。)
  • RPKG_LSN 是备库重演 LSN,表示备库已经重演完成的最大 LSN。如果主库是 DMDSC 集群,备库分别为主库每一个节点维护一个 RPKG_LSN
    (Oracle:Replayed SCN,DG中表示备库已重演(应用到数据库)的 SCN 值。RPKG_LSN 在 DMDSC 集群中为主库每个节点单独维护,Replayed SCN 是统一的。)

与上述 LSN 对应,DM 数据守护(Datawatch)也定义了一批 LSN:

  1. CLSN 与 CUR_LSN 保持一致,数据库已经分配的最大 LSN 值。
  2. FLSN 与 FILE_LSN 保持一致,已写入联机日志文件的 LSN 值。
  3. ALSN 与 APPLY_LSN 保持一致,备库已写入联机日志文件的原始 LSN 值。
  4. RLSN 与 RPKG_LSN 保持一致,备库已经重演完成的最大 LSN 值。
  5. SLSN 是 Standby LSN 的缩写,表示备库明确可重演的最大 LSN 值。
  6. KLSN 是 Keep LSN 的缩写,表示备库已经收到、但未明确是否可以重演的 RLOG_PKG 的最大 LSN 值。
  7. 在读写分离集群中 KLSN == SLSN。

3 DM LSN 查询方式

LSN 相关信息通过查询 VRLOG 和 VRAPPLY_PARALLEL_INFO 表获取。

sql 复制代码
SELECT CUR_LSN, FILE_LSN, CKPT_LSN FROM V$RLOG;

对于 DMDSC 集群中的 APPLY_LSN 和 RPKG_LSN,可通过 V$RAPPLY_PARALLEL_INFO 查看每个主库节点的对应值。

相关推荐
老纪的技术唠嗑局1 小时前
经验分享 —— 在 Ubuntu 虚拟机中部署 OceanBase 数据库
数据库·ubuntu
咖啡Beans1 小时前
MySQL中使用@符号定义用户变量
数据库·mysql
GreatSQL5 小时前
MySQL迁移至GreatSQL后,timestamp字段插入报错解析
数据库
expect7g6 小时前
COW、MOR、MOW
大数据·数据库·后端
DemonAvenger7 小时前
MySQL海量数据快速导入导出技巧:从实战到优化
数据库·mysql·性能优化
薛定谔的算法1 天前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend1 天前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术1 天前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维1 天前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉1 天前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql