`
秋天的童话穷
  • 浏览: 79509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle中的scn和rowid

 
阅读更多

首先讲解一下oracle 中最重要的两个概念 scn rowid

scn

Scn号: 是当Oracle 数据库更新后,由 DBMS 自动维护去累积递增的一个数字。在 Oracle 中,有四种 比较重要的 SCN,分别为:系统检查点 SCN 、数据文件检查点 SCN 、启动 SCN 、终止 SCN

oracle系统做任何事情都要有一个号码对应,相当于数据库的内部时间,小号在前大号在后。对于用户来说他是透明的, scn 的管理完全由 oracle 自己管理。

1、系统检查点 scn

当一个检查点动作完成后,Oracle 就把系统检查点的 SCN 存储到 controlfile(控制文件 ) 中。 检查点可以暂时理解为数据库按照一定规律定时(不太准确)把内存的数据块存盘。

参看最近的 checkpoint scn

select checkpoint_change# from v$database;

2、数据文件检查点 scn

当一个检查点动作完成后,Oracle 就把每个数据文件的 scn 单独存放在 controlfile(控制文件 ) 中。 主要用于实例恢复,它会参照控制文件的 scn号进行相应的处理(主要的恢复和回退)查看数据文件的 checkpoint scn

select name,checkpoint_change# from v$datafile;

3、启动 scn

  Oracle 把这个检查点的 scn 存储在每个数据文件的 文件的头 中,这个值称为启动scn ,因为它用于在数据库实例启动时,检查是否需要执行 数据库恢复 主要和控制文件中的每个数据文件的 scn对比,看是否需要恢复。

4、终止 scn

每个数据文件的终止scn 都存储在 controlfile(控制文件 ) 中。

 

查看当前的scn

Select current_scn from v$database;

 

以上的几个scn 号主要用于 oracle 的恢复与备份,有些是 oracle 自动帮我们完成,有些是需要我们根据以上的几个 scn 号手工去操作。所以以上的几个 scn 非常重要,一定要理解和会查找。一般会配合 log 一起使用这里我只列出对 log 查询 scn 号,具体如何操作将在以后讲解。

查询日志文件开始记录的scn

Select group#,first_change# from v$log;

 

 

 

 

Rowid

Rowid 数据库中数据块记录每一条记录的唯一行号,是 18 位的 64 进制组成,是计算出来的,主要是根据行存在的位置计算出来的。 Rowid 本质限制了数据库的文件大小和表空间文件的个数。 rowid伪列不存储在数据库中 , 它不是数据库数据 , 这是从 database table 的逻辑结构来说的 , 事实上 , 在物理结构上 , 每行由一个或多个  row pieces 组成 , 每个 row piece 的头部包含了这个 piece address, rowid. 从这个意义上来说, rowid 还是占了磁盘空间的 .

select ROWID from  scott.emp  where rownum<2;

ROWID
------------------ ----------
AAABnlAAFAAAAAPAAA
 
ROWID的格式如下:

数据对象编号        文件编号        块编号           行编号
OOOOOO             FFF                BBBBBB  RRR

我们可以看出,从上面的rowid 可以得知:
AAABnl 是数据对象编号 (j就是表、索引等 )
AAF是相关文件编号
AAAAAP是块编号
AAA 是行编号

通过函数来处理rowid

函数有:

1 Dbms_rowid.rowid_object(rowid)   得到该行的对象号

 

 

 

 

 

 

 

 

 

dbms_rowid.rowid_relative_fno (rowid) rfile#  得到该行的文件号

 

 

 

 

 

 

 

 

 

dbms_rowid.rowid_block_number (rowid) block#  得到该行所在块号

 

 

 

 

 

 

 

 

dbms_rowid.rowid_row_number (rowid) row#,  等到该行的行号

 

 

 

 

 

 

 

 

 

dbms_rowid.rowid_to_absolute_fno (rowid,'SYS','TEST') file#

 

 

 

 

 

 

 

 

 

 

 

 

可以通过以上的函数对某个表做特殊处理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

有些人很容易把 rowid和rownum混淆,这两个是完全不一样的概念,rowid是记录一行数据的唯一标示,并

 

 

 

 

 

 

 

 

 

 

 

 

 

 

是不便的,而rownum只是你从数据库中取出数据的顺序,每次查询都可以不样。它是临时参生的。

 

 

 

分享到:
评论

相关推荐

    oracle常用问题解答

    **问题**: Oracle中的ROWID是什么样的结构? **解答**: ROWID是一种特殊的伪列,用于标识表中的每一行。ROWID包含了行所在的表空间、数据块号和行号等信息。 - **示例**: 获取ROWID的结构: ```sql SELECT ROWID ...

    oracle日志分析

    在Oracle中的新增数据类型ROWID,它记录的是数据在库中的物理地址,在日志文件中也存储着这个ROWID,但是由于ROWID是由四个部分组成,所以在日志中是拆开存储的,在提取时只要把每个部分提取出来进行组合就行了,...

    oracle sql调优培训大纲

    - 数据块结构:数据块头部包含关键信息,如块类型、相对数据库地址、SCN(系统改变号)和校验值。头部大小可变,不同类型的块有不同的头部信息。 - 表目录和行目录:表目录记录了块中每张表的信息,用于快速定位行...

    Oracle服务进程如何处理用户进程的请求.doc

    - 服务器进程将受影响的行数据的ROWID、原始值、新值以及SCN(System Change Number)等信息写入Redo Log Buffer。 - 在写入Redo Log Buffer前,服务器进程需要请求Redo Log Buffer的锁存器,以确保并发操作的一致性。...

    oracle ogg

    - 配置捕获模式(如 ROWID、SCN 等)。 - 设置 Trail 文件的存储路径和大小限制。 5. **配置 Replicat**: - 创建 Replicat 作业,指定目标数据库连接信息。 - 配置数据转换规则(如字段映射、类型转换等)。 ...

    oracle checkpoint工作原理

    3. **完成阶段**:确认所有脏块都已写入磁盘后,更新数据文件和控制文件中的Checkpoint信息(SCN),标记此次Checkpoint完成。 #### 六、总结 Checkpoint机制是Oracle数据库中维护数据一致性和提高系统恢复效率的...

    oracle索引说明[参照].pdf

    Oracle数据库是世界上最流行的数据库管理系统之一,特别是在企业级应用中,其高效的数据管理和查询能力得到了广泛的认可。在Oracle中,索引是一种重要的数据结构,用于加速对表数据的访问。本篇将深入探讨Oracle...

    oracle undo

    在事务处理过程中,为了确保数据的一致性和事务的原子性,Oracle数据库需要一种机制来记录事务执行前的数据状态。这一机制便是`Undo`。简而言之,`Undo`记录的是事务开始之前的原始数据状态,以便在事务需要回退时...

    Oracle的回滚段存储内容分析

    在修改操作完成后,Oracle的后台进程会将修改前的数据(即旧值)以及一些元数据(如系统更改号SCN、块地址等)写入回滚段中。这并非简单的复制整个数据块,而是按照一定的逻辑顺序将原始数据块的部分内容写入回滚段...

    Oracle SQL性能优化

    《Oracle SQL性能优化》一书深入探讨了Oracle数据库性能优化的关键技术与实践,旨在帮助数据库管理员和开发人员提升Oracle数据库的运行效率。本书由范燕明撰写,首次出版于2005年4月18日,聚焦于SQL语句优化,强调了...

    oracle的备份与恢复方案[借鉴].pdf

    数据块是I/O的基本单位,行标识(ROWID)用于定位数据,系统更改号(SCN)保证数据的一致性。 与备份和恢复相关的数据库文件主要有数据文件,其中包含了数据库的所有数据,如表、索引等。控制文件是关键,它记录了...

    oracle tuning by example

    - SCN(系统改变号)和回滚段:确保事务一致性,记录数据修改。 - 读写不互相阻塞策略:读者不会阻塞写者,写者也不会阻塞读者(除非修改同一行)。 4. SQL处理阶段: - 创建游标:为每个SQL语句分配内存结构。 ...

    开发高性能的ORACLE数据库SQL.doc

    Oracle提供了一系列的视图和对象来管理和查询表与索引的信息: - **DBA_TABLES**, **USER_TABLES**: 存储关于表的基本信息。 - **DBA_TAB_COLS**, **USER_TAB_COLS**: 包含各表的列信息。 - **DBA_IND_COLUMNS**, *...

    oracle的备份与恢复方案借鉴.pdf

    - 系统更改号(SCN):用于并发控制和一致性,记录事务执行时的版本,进行重做和恢复。 - 更改矢量(change vector):记录数据块状态变化的详细信息,用于恢复。 4. Oracle数据库的相关文件: - 数据文件:存储...

    oracle索引说明

    在Oracle数据库管理中,索引是一种重要的数据结构,它能显著提升数据检索的速度。本文将从B-tree索引入手,详细解析其结构与特性,并结合具体的图解与实例来帮助读者更好地理解和掌握Oracle索引的相关知识。 #### B...

    oracle10g培训讲义07

    ### Oracle 10g 培训讲义07 知识点详解 #### 一、SQL 的 DML 语句 ...以上内容涵盖了 Oracle 10g 数据库中 SQL、PL/SQL 和相关工具使用的各个方面,对于管理和操作 Oracle 10g 数据库具有重要的指导意义。

    《Oracle Database编程指南》13-05:转换函数(Conversion Functions)

    在标题和描述中提到的转换函数有多种,如ASCII、STRBIN_TO_NUM、CAST、CHAR_TO_ROWID等,它们按照输入和输出数据类型命名,便于理解和使用。 1. ASCIISTR:此函数将二进制数据转换为ASCII字符串。 2. BIN_TO_NUM:...

    SQL性能优化

    2. **一致性读取:** Oracle通过系统更改号(SCN)和回滚段(Rollback Segment)来实现一致性读取,确保在并发环境下数据的一致性和准确性。 #### 五、SQL书写与调整步骤 1. **研究业务需求:** 确定必需访问的表。 2....

    sql语句的工作原理.doc

    - 数据被读入DB buffer后,服务器进程将该语句所影响的行数据的rowid、原值、新值及SCN等信息写入redo log buffer中。 - 在写入redo log buffer前,服务器进程会请求redo log buffer的锁存器。 2. **日志写入...

Global site tag (gtag.js) - Google Analytics