首先讲解一下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)
得到该行的对象号
2
dbms_rowid.rowid_relative_fno
(rowid) rfile#
得到该行的文件号
3
dbms_rowid.rowid_block_number
(rowid) block#
得到该行所在块号
4
dbms_rowid.rowid_row_number
(rowid) row#,
等到该行的行号
5
dbms_rowid.rowid_to_absolute_fno
(rowid,'SYS','TEST') file#
可以通过以上的函数对某个表做特殊处理
。
有些人很容易把
rowid和rownum混淆,这两个是完全不一样的概念,rowid是记录一行数据的唯一标示,并
是不便的,而rownum只是你从数据库中取出数据的顺序,每次查询都可以不样。它是临时参生的。
分享到:
相关推荐
oracle scn修改工具,可以直接修改oracle scn,在极端情况下恢复使用,比如解决ORA-600 2662等类似错误,使用说明:https://www.xifenfei.com/2022/06/win-oracle-scn-patch.html
Oracle数据库SCN号详解 系统检查点scn) 数据文件检查点(v$datafile) 数据文件终止scn) 数据文件中存放的检查点 启动scn
oracle scnOracle_SCN三篇文章Oracle_SCN三篇文章
关于“Oracle DB SCN 生成率过高” 的技术处理指南
SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。
BLOG_Oracle_lhr_Oracle SCN的一点研究.pdfBLOG_Oracle_lhr_Oracle SCN的一点研究.pdf
本文档主要对oracle中的scn相关概念作了详细的介绍何解释。 值得深入学习。
在某些环境下,程序bug会引起ORACLE数据库SCN的异常增长,超出ORACLE设定的合理范围,该事件很可能导致宕机,并且由于企业内部存在众多的分布式事务,引起SCN的剧烈增长很容易出现扩散现象,导致更多的数据库宕机。...
福建电脑期刊2013年第2期的一篇论文 oracle scn增长过快问题研究和解决方案探索 易金旭
oracle scn分析及概念解释,及各种scn的查询sql语句
Oracle系统改变号SCN详解.docx
在一些情况下(特别是一些数据库非常规恢复场景中),需要修改oracle scn绕过一些错误,让数据库open成功,在以前的版本中我们可以通过event,隐含参数,oradebug等方法进行修改,在一些较新的版本中这些方法都被oracle屏蔽,...
关于oracle SCN工作机制的详细解读
oracle scn 详解 ,很不错的资源,欢迎大家下载啊
Oracle 数据库在2019年 6月23日自动生效了新的SCN 生成的量由以前的16K 涨导 32K,但还是没有根本上解决问题,历史遗留问题还有可能发生,所以我们需要继续监控数据库 SCN 问题
SCN(System Change Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。 在理解SCN...
Oracle SCN详解
SCN(System Change Number ),也就是通常所说的系统改变号,是数据库中非常重要的 一个数据结构。 SCN 用以标识数据库在某个确切时刻提交的版本。在事务提交时,它被赋予一个惟一的 标识事务的SCN。SCN 同时被作为...