Orcal ETL 增量抽取–ORA_ROWSCN伪列

1、背景

项目中需要进行orcal数据增量抽取,然而源表无主键,无时间戳,无唯一键,别人的业务系统又无法动。最开始想通过解析日志以及v$sql动态视图获取所有sql执行,搞了好久,太麻烦了。后来发现了ORA_ROWSCN伪列,事情就很简单了。分享出来,万一有人搜索到了,也算是一点点帮助。

2、ORA_ROWSCN使用

大致就是orcal为表中的每行数据维护了一个scn,每次更改数据,scn也会更改。通过ora_rowscn我们就可以做到insert、update方式的增量更新。delete不行,数据行被删除了,自然scn也不存在。

SQL语句:

–查迅ora_rowscn

select ora_rowscn from 表

– 根据ora_rowscn查询某个scn后的增量数据

select * from 表 where ora_rowscn>6081999049678

– 将时间戳转换为scn查询,时间戳比scn更直观,

select * from 表 where ora_rowscn>timestamp_to_scn(to_date(‘2020-08-10 09:00:00’,‘yyyy-mm-dd hh24:mi:ss’))

思路:

建一张中间表,存放需要增量抽取的源表表名和每次抽取的scn或timestamp,两个都可以。每次增量抽取根据ora_rowscn字段获取增量数据,进行抽取。抽取成功后更新对应表的scn或时间戳。

3、官网介绍

官网对ora_rowscn的说明:

ORA_ROWSCN reflects the system change-number (SCN) of the most recent change to a row. This change can be at the level of a block (coarse) or at the level of a row (fine-grained). The latter is provided by row-level dependency tracking. Refer to CREATE TABLE … NOROWDEPENDENCIES | ROWDEPENDENCIES for more information on row-level dependency tracking. In the absence of row-level dependencies, ORA_ROWSCN reflects block-level dependencies.

Whether at the block level or at the row level, the ORA_ROWSCN should not be considered to be an exact SCN. For example, if a transaction changed row R in a block and committed at SCN 10, it is not always true that the ORA_ROWSCN for the row would return 10. While a value less than 10 would never be returned, any value greater than or equal to 10 could be returned. That is, the ORA_ROWSCN of a row is not always guaranteed to be the exact commit SCN of the transaction that last modified that row. However, with fine-grained ORA_ROWSCN, if two transactions T1 and T2 modified the same row R, one after another, and committed, a query on the ORA_ROWSCN of row R after the commit of T1 will return a value lower than the value returned after the commit of T2. If a block is queried twice, then it is possible for the value of ORA_ROWSCN to change between the queries even though rows have not been updated in the time between the queries. The only guarantee is that the value of ORA_ROWSCN in both queries is greater than the commit SCN of the transaction that last modified that row.

You cannot use the ORA_ROWSCN pseudocolumn in a query to a view. However, you can use it to refer to the underlying table when creating a view. You can also use this pseudocolumn in the WHERE clause of an UPDATE or DELETE statement.

ORA_ROWSCN is not supported for Flashback Query. Instead, use the version query pseudocolumns, which are provided explicitly for Flashback Query. Refer to the SELECTflashback_query_clause for information on Flashback Query and Version Query Pseudocolumns for additional information on those pseudocolumns.

Restriction on ORA_ROWSCN: This pseudocolumn is not supported for external tables.

Google翻译后:

ORA_ROWSCN将最新更改的系统更改号(SCN)反映到一行。此更改可以在块级别(粗略)或在行级别(细粒度)。后者由行级依赖项跟踪提供。请参阅CREATE TABLE … NOROWDEPENDENIES | ROWDEPENDENCIES,以获取有关行级依赖项跟踪的更多信息。在没有行级依赖关系的情况下,ORA_ROWSCN反映了块级依赖关系。

无论是在块级别还是在行级别,ORA_ROWSCN都不应被视为精确的SCN。例如,如果某个事务更改了块中的行R并在SCN 10上提交,则该行的ORA_ROWSCN并不总是会返回10。虽然永远不会返回小于10的值,但大于或等于该值的任何值到10可以返回。也就是说,并不总是保证一行的ORA_ROWSCN是最后修改该行的事务的确切提交SCN。但是,对于细粒度的ORA_ROWSCN,如果两个事务T1和T2一次又一次修改同一行R并提交,则在T1提交后对行R的ORA_ROWSCN的查询将返回一个值,该值小于T2的提交。如果两次查询一个块,则即使两次查询之间的行尚未更新,ORA_ROWSCN的值也可能在两次查询之间改变。唯一的保证是,两个查询中的ORA_ROWSCN的值都大于上次修改该行的事务的提交SCN。

您不能在查询视图中使用ORA_ROWSCN伪列。但是,您可以在创建视图时使用它来引用基础表。您也可以在UPDATE或DELETE语句的WHERE子句中使用此伪列。

闪回查询不支持ORA_ROWSCN。而是使用版本查询伪列,该列为闪回查询明确提供。有关闪回查询和版本查询伪列的信息,请参阅SELECT … flashback_query_clause,以获取有关那些伪列的其他信息。

对ORA_ROWSCN的限制:外部表不支持此伪列。

4、相关资料

ORA_ROWSCN:

https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/ORA_ROWSCN-Pseudocolumn.html#GUID-8071AAB0-F656-4C93-B926-0BCE1439F121

TIMESTAMP_TO_SCN:

https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/TIMESTAMP_TO_SCN.html#GUID-58796E1A-9943-4966-96E6-78B636BD2859

Orcal ETL 增量抽取--ORA_ROWSCN伪列相关推荐

  1. mysql的rowscn_Oracle ORA_ROWSCN 伪列 说明

    一. 官网对该伪列的说明 From:11gR2 Foreach row, ORA_ROWSCN returns the conservative upper bound system change n ...

  2. ETL的增量抽取机制

    要实现增量抽取,关键是如何准确快速的捕获变化的数据.优秀的增量抽取机制要求ETL能够将业务系统中的变化数据按一定的频率准确地捕获到,同时不能对业务系统造成太大的压力,影响现有业务.相对全量抽取而言,增 ...

  3. oracle数据变化记录,学习笔记:Oracle伪列函数ora_rowscn 记录表中行数据的修改时间...

    天萃荷净 Oracle数据库开发时使用伪列函数ora_rowscn查询出数据库表中行数据的修改时间 一.默认情况下 –创建t_orascn测试表 SQL> create table t_oras ...

  4. oracle 增量_【干货分享】DMETL中的增量抽取初识

    DMETL实现了增量数据的同步.在源表上进行的增删改操作,可以通过增量数据抽取,同步到目的表中.在第一次将源表数据全量抽取到目的表中后,可以通过重复地执行增量数据抽取,将源表上的增删改操作产生的变化数 ...

  5. 下列那些是oracle的伪列,oracle伪列

    在对表进行查询时,我们可以对oracle提供的一系列伪列(pseudocolumns)进行查询,这些伪列不存储在表中,oracle不允许对伪列进行dml操作. 在oracle 10g和11g下,伪列包 ...

  6. java数据抽取到数据仓库_关于数据增量抽取的模拟实现——脚本实现

    具体排过版的请参看http://Percywang.itpub.net 本文主要是针对关于数据增量抽取的模拟实现--原理进行实现的 实现的环境: 业务数据库:Oracle9i 数据仓库数据库:SQLS ...

  7. oracle添加伪列,Oracle伪列 - jifengtang的个人空间 - OSCHINA - 中文开源技术交流社区...

    在oracle10g和下,伪列包括如下内容: lHierarchical Query Pseudocolumns 分级查询是oracle提供的递归查询语法,在这里不做展开.只有在分级查询下,才可以使用 ...

  8. Oracle Database SQL Language Reference 笔记(3)—— 伪列(续)

    前面已经学习过 Oracle 伪列的种类: 与树状结构查询语句相关的伪列(包括 CONNECT_BY_ISCYCLE.CONNECT_BY_ISLEAF 和 LEVEL): 与序列对象相关的伪列(CU ...

  9. oracle全表增量抽取,每日数据增量抽取问题讨论

    每日数据增量抽取问题讨论[@more@]咨询各位高人. 目前状况是 我单位每天都要产生 一个单品资料的基础表, 是所有单品,大约5万条数据 ,但是每天这个表都有多少改变,比如:有些单品更新,有一些删除 ...

最新文章

  1. 爬虫实战:爬虫加数据分析,重庆电气小哥一文带你分析重庆所有旅游景点
  2. 为了更好——关于博客搬迁的说明
  3. java sybase存储过程_sybase存储过程-----不定时更新
  4. 带参数的插入语句的问题
  5. python3: failed with error code 1 in /tmp/pip-build-qp5puacl/Pillow/
  6. ai的预览模式切换_ai预览模式怎么退出
  7. 什么是通配符 计算机网络,通配符
  8. python利用pandas实现excel数据分组汇总
  9. 金融数据分析(十三)投资组合问题
  10. 剑指offer17--旋转的方式打印矩阵
  11. 弗兰克·盖里为华纳兄弟设计新总部,犹如漂浮在高速公路的‘冰山’
  12. VMware: 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
  13. 广东医科大学计算机网络,广东海洋大学计算机网络历年考题(直接阅读版6套可编辑)课件.doc...
  14. java-----Map
  15. MA1 轻轻松松学统计分析(下)
  16. Android中图片压缩方案详解
  17. 基于Autocad 2016,与 CASS10 无缝整合的地下管线成图系统
  18. 车牌识别系统电脑当服务器,车牌识别系统数据库的安装方法
  19. Java8 lambda表达式
  20. JAVA基于S2SH的问卷调查平台系统【数据库设计、论文、源码、开题报告】

热门文章

  1. 【前端】一些简单的测试题
  2. 北交所开通知识测评 测试题答案(海通)
  3. n个整数,找出连续的m个数加和是最大
  4. maya2018曲线创建管道
  5. 页面分享到微博、qq、qqzone
  6. SQuirreL SQL Client (小松鼠) 数据库连接工具
  7. JavaScript 行间事件、提取行间事件
  8. 1343476-41-4,Acid-PEG5-NHS ester亲水性PEG间隔物增加了在水介质中的溶解度
  9. HTML淘宝购物车页面的实现
  10. 千年古都西安 一座城市的辉煌与梦想