oracle行跟踪(基于行跟踪的ROWDEPENDENCIES ORA_ROWSCN信息)
在Oracle 10g中的引入了ORA_ROWSCN伪列新特性。基于此种伪列所提供的信息,我们可以方便地找出某个数据块或某一个行最近被修改
的时间戳。在默认情况下,10g下表会以非行依赖性(NOROWDEPENDENCIES)的属性创建,这意味着我们可观察的ORA_ROWSCN信息是以块级跟踪的,无法分辨同一块内的多行间不同的修改时间。为了达到行级粒度的跟踪我们需要在建表时指定基于行依赖性的ROWDEPENDENCIES字句。如:
- SQL> select * from global_name;
- GLOBAL_NAME
- --------------------------------------------------------------------------------
- www.oracledatabase12g.com
- SQL> select * from v$version;
- BANNER
- ----------------------------------------------------------------
- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
- PL/SQL Release 10.2.0.4.0 - Production
- CORE 10.2.0.4.0 Production
- TNS for Linux: Version 10.2.0.4.0 - Production
- NLSRTL Version 10.2.0.4.0 - Production
- SQL> drop table maclean;
- Table dropped.
- SQL> create table maclean(t1 int,t2 timestamp) ;
- Table created.
- SQL> insert into maclean values(1,systimestamp);
- 1 row created.
- SQL> commit;
- Commit complete.
- SQL> insert into maclean values(2,systimestamp);
- 1 row created.
- SQL> commit;
- Commit complete.
- SQL> alter session set nls_timestamp_format='hh24:mi:ss';
- Session altered.
- SQL> col t2 for a35
- SQL> col orscn for a35
- SQL> select scn_to_timestamp(ora_rowscn) orscn,t2 from maclean;
- ORSCN T2
- ----------------------------------- -----------------------------------
- 20:30:11 20:29:56
- 20:30:11 20:30:10
- /* 可以看到默认情况下创建的数据表使用块级依赖性追踪(Block-level Dependency Tracking)
- 故而其返回的ORA_ROWSCN伪列仅能代表某数据块最近被更新的SCN
- */
- create table maclean_rd(t1 int,t2 timestamp) rowdependencies;
- Table created.
- SQL> select table_name,dependencies from user_tables where dependencies!='DISABLED';
- TABLE_NAME DEPENDEN
- ------------------------------ --------
- MACLEAN_RD ENABLED
- /* 包括字典基表在内所有的表都会默认以NOROWDEPENDENCIES创建*/
- SQL> insert into maclean_rd values(1,systimestamp);
- 1 row created.
- SQL> commit;
- Commit complete.
- SQL> insert into maclean_rd values(2,systimestamp);
- 1 row created.
- SQL> commit;
- Commit complete.
- SQL> select scn_to_timestamp(ora_rowscn) orscn,t2 from maclean_rd;
- ORSCN T2
- ----------------------------------- -----------------------------------
- 20:31:26 20:31:25
- 20:31:35 20:31:37
- /* 可以看到在行依赖性跟踪情况下,ORA_ROWSCN反映的时间戳与插入的时间戳间仍会有误差;
- 显然这种误差部分源于scn_to_timestamp函数使用的smon_scn_time SCN记录表也仅是粗略记录SCN对应的时间戳。
- */
- SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from maclean_rd;
- DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
- ------------------------------------ ------------------------------------
- 1 94122
- 1 94122
- /* 以上通过rowid找到了插入的2行所在的数据块*/
- SQL> alter system dump datafile '/s01/10gdb/oradata/CLINICA/datafile/o1_mf_system_6fp8d3f0_.dbf' block 94122;
- System altered.
- SQL> oradebug setmypid;
- Statement processed.
- SQL> oradebug tracefile_name;
- /s01/10gdb/admin/clinica/udump/clinica_ora_12934.trc
- block_row_dump:
- tab 0, row 0, @0x1f88
- tl: 24 fb: --H-FL-- lb: 0x0 cc: 2
- dscn 0x0000.0351b8bd
- col 0: [ 2] c1 02
- col 1: [11] 78 6f 01 02 15 20 1a 21 d8 52 68
- tab 0, row 1, @0x1f70
- tl: 24 fb: --H-FL-- lb: 0x0 cc: 2
- dscn 0x0000.0351b8c4
- col 0: [ 2] c1 03
- col 1: [11] 78 6f 01 02 15 20 26 02 ab c2 f8
- /* 可以从block dump中看到每行都多出了dscn信息,这就是基于行追踪的行级ORA_ROWSCN信息的来源。
- 注意这里的dscn需要占用6个字节的空间,换而言之启用ROWDEPENDENCIES会为每一行多出6个字节的磁盘开销。
- */
- /* 此外行级追踪仅能在创建表(create table)的同时指定,而无法使用ALTER TABLE来修改 */
- SQL> alter table maclean move tablespace users ROWDEPENDENCIES;
- alter table maclean move tablespace users ROWDEPENDENCIES
- *
- ERROR at line 1:
- ORA-14133: ALTER TABLE MOVE cannot be combined with other operations
oracle行跟踪(基于行跟踪的ROWDEPENDENCIES ORA_ROWSCN信息)的更多相关文章
- oracle 查询表中数据行(row)上最后的DML时间
在这介绍Oracle 10G开始提供的一个伪列ORA_ROWSCN,它又分为两种模式一种是基于block这是默认的模式(块级跟踪):还有一种是基于row上,这种模式只能在建里表时指定ROWDEPEND ...
- Oracle 行迁移和行链接
一.行迁移 1.1.行迁移概念 当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移.一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址.因此整 ...
- SQL Server-聚焦SNAPSHOT基于行版本隔离级别详解(三十)
前言 上一篇SQL Server详细讲解了隔离级别,但是对基于行版本中的SNAPSHOT隔离级别仍未完全理解,本节再详细讲解下,若有疑义或不同见解请在评论中提出,一起探讨. SNAPSHOT行版本隔离 ...
- oracle 分组取第一行数据 ,查询sql语句
oracle 分组取第一行数据 SELECT * FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, t.* FR ...
- opencv::基于颜色跟踪检测
基于颜色跟踪 inRange过滤 形态学操作提取 轮廓查找 外接矩形获取 位置标定
- 【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线
一.段的类型: 1.什么是段:段是存储单元. 1.段的类型有: 表 分区表 簇表 索引 索引组织表(IOT表) 分区索引 暂时段 undo段 lob段(blob ,clob) 内嵌表(record类型 ...
- 【监控笔记】【1.2】监控事件系列——SQL Trace(默认跟踪与自定义跟踪)
目录: [1.1]概念与使用 [1.2]跟踪的基本操作 --[1.2.1]查看默认跟踪是否在运行 --[1.2.2]开启默认跟踪 --[1.2.3]关闭默认跟踪 --[1.2.4]查看跟踪文件/查看跟 ...
- jquery Datatables 行数据删除、行上升、行下降功能演示
Datatables 是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 官方网站:http://www.datatables.net Datatables ...
- linux 如何显示一个文件的某几行(中间几行)
linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...
随机推荐
- Linux 中各个文件夹的作用
/ 根目录 包含了几乎所的文件目录.相当于中央系统.进入的最简单方法是:cd /. /boot 引导程序,内核等存放的目录 这个目录,包括了在引导过程中所必需的文件.在最开始的启动阶段,通过引导程 ...
- myeclipse删除项目后重新导入
今天安装了myeclipse2017版,刚开始导入项目后然后删除了,发现再次导入进来的时候不可以了. 解决方法:点击file -- >switch workspace -- >other ...
- js的重载
1.重载 //重载(个数不同,类型不同)function prop(){var firstP = document.getElementById("p");if(arguments ...
- 使用IDEA2017创建java web +maven项目
1.首先,提前准备的东西:我使用的是IDEA2017,tomcat7,jdk1.:请将这些软件安装完成,环境变量配置完成,如何配置以及安装我就不复述了,百度上一堆一堆的,比我知道的详细多了. 2.下面 ...
- BZOJ 3064 CPU监控
题目链接:CPU监控 学习一番线段树的历史标记- 这道题就是区间加法,区间赋值,要询问区间最大值 和 区间历史最大值的最大值. 然后这种题就是在现有标记的基础上多弄一套标记,维护这个点出现过的最大的标 ...
- data.table 中的动态作用域
data.table 中最常用的语法就是 data[i, j, by],其中 i.j 和 by 都是在动态作用域中被计算的.换句话说,我们不仅可以直接使用列,也可以提前定义诸如 .N ..I 和 .S ...
- webpack+angular2开发环境搭建
升级版之webpack4 + angular5脚手架demo详见: http://www.cnblogs.com/xudengwei/p/8852257.html 刚搭建完一个webpack+angu ...
- 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...
- 递归--练习7--noi1750全排列
递归--练习7--noi1750全排列 一.心得 二.题目 1750:全排列 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所 ...
- django使用bootstrap快速美化 admin后台
使用django-admin-bootstrappe快速美化后台 两步: 1.pip install django-admin-bootstrapped 安装应用 2.在setting.py里面添加 ...