Orcal ETL 增量抽取--ORA_ROWSCN伪列
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 toCREATE
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 theORA_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, theORA_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-grainedORA_ROWSCN
, if two transactions T1 and T2 modified the same row R, one after another, and committed, a query on theORA_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 ofORA_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 ofORA_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 theWHERE
clause of anUPDATE
orDELETE
statement.
ORA_ROWSCN
is not supported for Flashback Query. Instead, use the version query pseudocolumns, which are provided explicitly for Flashback Query. Refer to theSELECT
… flashback_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伪列相关推荐
- mysql的rowscn_Oracle ORA_ROWSCN 伪列 说明
一. 官网对该伪列的说明 From:11gR2 Foreach row, ORA_ROWSCN returns the conservative upper bound system change n ...
- ETL的增量抽取机制
要实现增量抽取,关键是如何准确快速的捕获变化的数据.优秀的增量抽取机制要求ETL能够将业务系统中的变化数据按一定的频率准确地捕获到,同时不能对业务系统造成太大的压力,影响现有业务.相对全量抽取而言,增 ...
- oracle数据变化记录,学习笔记:Oracle伪列函数ora_rowscn 记录表中行数据的修改时间...
天萃荷净 Oracle数据库开发时使用伪列函数ora_rowscn查询出数据库表中行数据的修改时间 一.默认情况下 –创建t_orascn测试表 SQL> create table t_oras ...
- oracle 增量_【干货分享】DMETL中的增量抽取初识
DMETL实现了增量数据的同步.在源表上进行的增删改操作,可以通过增量数据抽取,同步到目的表中.在第一次将源表数据全量抽取到目的表中后,可以通过重复地执行增量数据抽取,将源表上的增删改操作产生的变化数 ...
- 下列那些是oracle的伪列,oracle伪列
在对表进行查询时,我们可以对oracle提供的一系列伪列(pseudocolumns)进行查询,这些伪列不存储在表中,oracle不允许对伪列进行dml操作. 在oracle 10g和11g下,伪列包 ...
- java数据抽取到数据仓库_关于数据增量抽取的模拟实现——脚本实现
具体排过版的请参看http://Percywang.itpub.net 本文主要是针对关于数据增量抽取的模拟实现--原理进行实现的 实现的环境: 业务数据库:Oracle9i 数据仓库数据库:SQLS ...
- oracle添加伪列,Oracle伪列 - jifengtang的个人空间 - OSCHINA - 中文开源技术交流社区...
在oracle10g和下,伪列包括如下内容: lHierarchical Query Pseudocolumns 分级查询是oracle提供的递归查询语法,在这里不做展开.只有在分级查询下,才可以使用 ...
- Oracle Database SQL Language Reference 笔记(3)—— 伪列(续)
前面已经学习过 Oracle 伪列的种类: 与树状结构查询语句相关的伪列(包括 CONNECT_BY_ISCYCLE.CONNECT_BY_ISLEAF 和 LEVEL): 与序列对象相关的伪列(CU ...
- oracle全表增量抽取,每日数据增量抽取问题讨论
每日数据增量抽取问题讨论[@more@]咨询各位高人. 目前状况是 我单位每天都要产生 一个单品资料的基础表, 是所有单品,大约5万条数据 ,但是每天这个表都有多少改变,比如:有些单品更新,有一些删除 ...
最新文章
- 爬虫实战:爬虫加数据分析,重庆电气小哥一文带你分析重庆所有旅游景点
- 为了更好——关于博客搬迁的说明
- java sybase存储过程_sybase存储过程-----不定时更新
- 带参数的插入语句的问题
- python3: failed with error code 1 in /tmp/pip-build-qp5puacl/Pillow/
- ai的预览模式切换_ai预览模式怎么退出
- 什么是通配符 计算机网络,通配符
- python利用pandas实现excel数据分组汇总
- 金融数据分析(十三)投资组合问题
- 剑指offer17--旋转的方式打印矩阵
- 弗兰克·盖里为华纳兄弟设计新总部,犹如漂浮在高速公路的‘冰山’
- VMware: 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
- 广东医科大学计算机网络,广东海洋大学计算机网络历年考题(直接阅读版6套可编辑)课件.doc...
- java-----Map
- MA1 轻轻松松学统计分析(下)
- Android中图片压缩方案详解
- 基于Autocad 2016,与 CASS10 无缝整合的地下管线成图系统
- 车牌识别系统电脑当服务器,车牌识别系统数据库的安装方法
- Java8 lambda表达式
- JAVA基于S2SH的问卷调查平台系统【数据库设计、论文、源码、开题报告】