在这介绍两个oracle 10G开始提供的一个伪列ORA_ROWSCN,它又分为两种模式一种是基于block,这是默认的模式,还有一种是基于row上,这种模式只能在建里表时指定ROWDEPENDENCIES,不可以通过后期的alter table ,同时会给数据库带来性能负载
每个Block在头部是记录了该block最近事务的SCN的,所以默认情况下,只需要从block头部直接获取这个值就可以了,不需要其他任何的开销,Oracle就能做到这一点。但是这明显第一种模式是scn是不准确的,因为不可能每个事务都能修改整个 块的数据。

在10g之前,很多系统要实现增量数据抽取,要么通过解析日志,要么加触发器,要么就在表上加一个时间截字段。ORA_ROWSCN其实就是第三种方式,只是这个字段由Oracle来维护,这样可以避免一些应用绕过时间截去更新其他字段带来的问题。

下面做一个实验来证明,首先在默认状态下修改同一个块上的其中一条数据,然后再启用行级跟踪,修改同一块上的一条数据,观察ora_rowscn变化

SQL> conn anbob/anbob
Connected.
SQL> create table testscn(
2 id number(5),
3 name varchar2(10),
4 sex number(1),
5 addr varchar2(100)
6 ); Table created. SQL> insert into testscn values(1,’anbob’,’1′,’beijing’); 1 row created. SQL> insert into testscn values(2,’sesebook’,’1′,’beijing’); 1 row created. SQL> insert into testscn values(3,’weejar’,’1′,’beijing’); 1 row created. SQL> commit; Commit complete. SQL> set linesize 150
SQL> select ora_rowscn,id,name,sex,addr from testscn; ORA_ROWSCN ID NAME SEX
———- ———- ——————– ———-
ADDR
——————————————————————————————————————————————————
46007034 1 anbob 1
beijing 46007034 2 sesebook 1
beijing 46007034 3 weejar 1
beijing SQL> col addr for a50
SQL> run
1* select ora_rowscn,id,name,sex,addr from testscn ORA_ROWSCN ID NAME SEX ADDR
———- ———- ——————– ———- ————————————————–
46007034 1 anbob 1 beijing
46007034 2 sesebook 1 beijing
46007034 3 weejar 1 beijing SQL> select ora_rowscn,id,name,sex,addr,dbms_rowid.ROWID_BLOCK_NUMBER(rowid) blockid from testscn; ORA_ROWSCN ID NAME SEX ADDR BLOCKID
———- ———- ——————– ———- ————————————————– ———-
46007034 1 anbob 1 beijing 1429
46007034 2 sesebook 1 beijing 1429
46007034 3 weejar 1 beijing 1429
——–可以看出记录是在同一个block上 SQL> select scn_to_timestamp(ora_rowscn) stime,id,name,sex,addr from testscn; STIME ID NAME SEX ADDR
—————————————- ———- ——————– ———- ————————————————–
16-5月 -11 01.37.54.000000000 下午 1 anbob 1 beijing
16-5月 -11 01.37.54.000000000 下午 2 sesebook 1 beijing
16-5月 -11 01.37.54.000000000 下午 3 weejar 1 beijing SQL> update testscn set sex=0 where id=2; 1 row updated. SQL> commit; Commit complete. SQL> select scn_to_timestamp(ora_rowscn) stime,id,name,sex,addr from testscn; STIME ID NAME SEX ADDR
—————————————- ———- ——————– ———- ————————————————–
16-5月 -11 01.47.21.000000000 下午 1 anbob 1 beijing
16-5月 -11 01.47.21.000000000 下午 2 sesebook 0 beijing
16-5月 -11 01.47.21.000000000 下午 3 weejar 1 beijing
–因为是同一个块上,所以这个块上的所有数据的scn都更新了 第二种模式
SQL> create table testscn2 ROWDEPENDENCIES as select * from testscn; Table created. SQL> select scn_to_timestamp(ora_rowscn) stime,id,name,sex,addr from testscn2; STIME ID NAME SEX ADDR
—————————————- ———- ——————– ———- ————————————————–
16-5月 -11 02.15.42.000000000 下午 1 anbob 1 beijing
16-5月 -11 02.15.42.000000000 下午 2 sesebook 0 beijing
16-5月 -11 02.15.42.000000000 下午 3 weejar 1 beijing SQL> select ora_rowscn,id,name,sex,addr,dbms_rowid.ROWID_BLOCK_NUMBER(rowid) blockid from testscn; ORA_ROWSCN ID NAME SEX ADDR BLOCKID
———- ———- ——————– ———- ————————————————– ———-
46007328 1 anbob 1 beijing 1429
46007328 2 sesebook 0 beijing 1429
46007328 3 weejar 1 beijing 1429 SQL> update testscn2 set sex=0 where id=3; 1 row updated. SQL> commit; Commit complete. SQL> select scn_to_timestamp(ora_rowscn) stime,id,name,sex,addr from testscn2; STIME ID NAME SEX ADDR
—————————————- ———- ——————– ———- ————————————————–
16-5月 -11 02.15.42.000000000 下午 1 anbob 1 beijing
16-5月 -11 02.15.42.000000000 下午 2 sesebook 0 beijing
16-5月 -11 02.16.39.000000000 下午 3 weejar 0 beijing SQL>
 

oracle ORA_ROWSCN 行记录的更新时间的更多相关文章

  1. Oracle多行记录合并的几种方法

    今天正好遇到需要做这个功能,顺手搜了一下网络,把几种方法都列出来,方便以后参考. 1 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nulla ...

  2. Oracle 多行记录合并/连接/聚合字符串的几种方法

    怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结.-什么是合并多行字符串(连接字符串)呢,例如: SQL&g ...

  3. Oracle多行记录合并/连接/聚合字符串的几种方法

    怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结.   什么是合并多行字符串(连接字符串)呢,例如:SQL& ...

  4. Oracle多行记录合并自定义函数

    在oracle数据库中,进行字段合并,可以使用wm_concat(column)函数,但是在这种方法不被Oracle所推荐,因为WMSYS用户用于Workspace Manager,其函数对象可能因版 ...

  5. oracle 常用操作记录--持续更新...

    一.oracle grant 授权语句(转自:https://www.cnblogs.com/yt954437595/p/6488819.html) --select * from dba_users ...

  6. Oracle多行记录合并处理

    1:效果如下图所示: 表T1: CREATE TABLE T1 ( WEEKWORKID VARCHAR2(20) , DD VARCHAR2(20) ) 表T2 CREATE TABLE T2 ( ...

  7. oracle数据库学习记录(持续更新中...)

    --------------------------------------------day1------------------------------------------------- 1. ...

  8. Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)

    原帖:http://www.cnblogs.com/nayitian/p/3231734.html wmsys.wm_concat Definition: The Oracle PL/SQL WM_C ...

  9. Oracle数据库更新时间的SQL语句

    ---Oracle数据库更新时间字段数据时的sql语句---格式化时间插入update t_user u set u.name='pipi',u.modifytime=to_date('2015-10 ...

随机推荐

  1. flashback database操作步骤

    默认情况数据库的flashback database是关闭的. 启用Flashback Database 步骤:1.配置Flash Recovery Area 检查是否启动了flash recover ...

  2. CentOS6.5 --安装orale 11g(下)

    (7)     建立Oracle系统用户和安装目录 创建一个主组oinstall和一个副组dba.命令如下: groupadd oinstall groupadd dba 创建oracle安装文件 m ...

  3. html基本基础

    一 HTML5是用来做什么的? PSD2HTML 信息 信息差(信息不对称) 二 html文件新建流程: 新建文本文件 网页文件后缀 .html 修改编码:ANSI格式,UTF-8无BOM格式==== ...

  4. C#鼠标键盘钩子

    using System;using System.Collections.Generic; using System.Reflection; using System.Runtime.Interop ...

  5. Memcached内存管理模型分析

    Memcached 是一个高性能的分布式内存对象缓存系统,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而减轻RDBMS的负担,提高服务的速度.提升可扩展性.本文将基于memcached1.4 ...

  6. 如何让EcStore和微博同步来推广网站

    EcStore是创建B2C商城的首选PHP系统,它功能强大.操作方便,安装后马上就能建立起一个自己的B2C商城,但建好后如何推广运营商城却不是件容易的事. 新浪微博用户数量大.传播速度快,互联网上拥有 ...

  7. C语言编译过程简介

    刚开始接触编程的时候,只知道照书敲敲代码,一直都不知道为什么在windows平台下代码经过鼠标那样点击几下,程序的结果就会在那个黑色的屏幕上.现在找了个机会将C语言的编译原理做一下小小的总结,这样也能 ...

  8. 关于C语言中的强符号、弱符号、强引用和弱引用的一些陋见,欢迎指正

    首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...

  9. Kafka与Logstash的数据采集

    Kafka与Logstash的数据采集 基于Logstash跑通Kafka还是需要注意很多东西,最重要的就是理解Kafka的原理. Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始 ...

  10. NOI十连测 第五测 T1

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...