首页
论坛
门户
空间
手机版
IXPUB
插件
收藏
设置
注册
登录
商店
搜索
培训
Wiki
Blog
归档
丛书
退出
ITPUB论坛
»
Oracle专题深入讨论
» 关于SCN的理解,请指正
‹‹ 上一主题
|
下一主题 ››
69
3/7
‹‹
1
2
3
4
5
6
7
››
投票
交易
悬赏
活动
评价
|
打印
|
推荐
|
订阅
|
收藏
标题:
[精华]
关于SCN的理解,请指正
biti_rainy
人生就是如此
精华贴数 38
个人空间
0
技术积分 111199 (4)
社区积分 11832 (132)
注册日期 2001-12-12
论坛徽章:41
#21
使用道具
发表于 2004-8-14 21:24
QUOTE:
最初由 lifeng@itpub 发布
澄清几个概念
1)系统当前SCN并不是在任何的数据库操作发生时都会改变,SCN是在事务提交或回滚时改变,
.在定位到底是使用哪一个redo log文件时,就用到了日志文件头中的low scn,next scn,也就是说要使用的redo log 的low scn ,next scn必须包含数据文件重做所须的change vector.
在确定了哪个数据文件须redo后,oracle会比较change vector中的SCN和数据文件数据块中的SCN,如果change vector的SCN小于数据块的scn,则跳过此change vector,否则redo
1: SCN 并不仅仅在 提交或者回滚的时候才改变,DML 发生的时候会改变,提交的时候也会变,还有很多的变化都会改变, 有兴趣请去
www.ixora.com.au
看看 。证明的方法也很容易。
2: 在定位到底使用哪个日志文件的时候,并不是用 数据文件中的 low scn 去框,在日志文件的low scn and next scn 之间就利用该日志文件。而是在数据文件头中有 RBA 的记录,RBA 包含了日志序号、block number 、slot number 。 这样可以直接定位到日志文件(归档日志文件)和具体的位置
如果你有兴趣,大可去实验,dump出来看看。
__________________
眼界决定边界,态度决定高度
blog:
人生就是如此
只看该作者
lifeng@itpub
初级会员
精华贴数 0
个人空间
0
技术积分 42 (31760)
社区积分 0 (135769)
注册日期 2004-8-10
论坛徽章:0
#22
使用道具
发表于 2004-8-15 17:08
找了一些网页,发现SCN确实不只在事务提交时增加,以下是网页上的摘要:
1)
SCN means "System Change Number" not "System Commit Number".
However, because the SCN is always incremented at commits and seldom otherwise, it is OK to use the two terms interchangeably.
2)
The SCN is incremented whenever a transaction commits. However, this is not the only source of increments. In a seemingly idle database, the SCN gets incremented also through AQ, SMON, job queues...
1中说了oracle seldom操作也会引起SCN的增加,2中更明确说了AQ, SMON, job queues... 会导致SCN的增加,因此应该得出结论,在ORACLE中除了COMMIT会导致SCN增加外还有其它的ORACLE后台进程会导致SCN增加.
但是,是否是普通的DML导致了SCN的增加,还是由于DML操作过程中后台进程导致了SCN增加的假象?请大家踊跃讨论!
还有ORACLE后台进程在何时,何种情况下导致了SCN增加,也请大家踊跃讨论!
只看该作者
biti_rainy
人生就是如此
精华贴数 38
个人空间
0
技术积分 111199 (4)
社区积分 11832 (132)
注册日期 2001-12-12
论坛徽章:41
#23
使用道具
发表于 2004-8-15 17:25
QUOTE:
最初由 lifeng@itpub 发布
找了一些网页,发现SCN确实不只在事务提交时增加,以下是网页上的摘要:
1)
SCN means "System Change Number" not "System Commit Number".
However, because the SCN is always incremented at commits and seldom otherwise, it is OK to use the two terms interchangeably.
2)
The SCN is incremented whenever a transaction commits. However, this is not the only source of increments. In a seemingly idle database, the SCN gets incremented also through AQ, SMON, job queues...
1中说了oracle seldom操作也会引起SCN的增加,2中更明确说了AQ, SMON, job queues... 会导致SCN的增加,因此应该得出结论,在ORACLE中除了COMMIT会导致SCN增加外还有其它的ORACLE后台进程会导致SCN增加.
但是,是否是普通的DML导致了SCN的增加,还是由于DML操作过程中后台进程导致了SCN增加的假象?请大家踊跃讨论!
还有ORACLE后台进程在何时,何种情况下导致了SCN增加,也请大家踊跃讨论!
这句话我应该更准确第表达一下
如果一个dml导致产生事务,则会产生一个scn。这个意思是说
如果一个事务包含多个dml,则只有第一个初始产生事务的dml产生scn,提交的时候又是一个scn
如果一个事务只有一个dml,拿看起来就是dml产生一个scn,提交或者回滚产生一个scn
这是经过实验测试过的,如果你又兴趣,不紧紧是要找资料看,还可以动手 证明
__________________
眼界决定边界,态度决定高度
blog:
人生就是如此
只看该作者
lifeng@itpub
初级会员
精华贴数 0
个人空间
0
技术积分 42 (31760)
社区积分 0 (135769)
注册日期 2004-8-10
论坛徽章:0
#24
使用道具
发表于 2004-8-16 19:53
试验结果确实同所说:
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282673
SQL> insert into test values (1);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282674
SQL> insert into test values (2);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282674
SQL> commit;
提交完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282678
---------------------------------------
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282684
SQL> insert into test values (1);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282685
SQL> rollback;
重算已完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282687
从实验结果看,一个事务中并不是所有的DML操作导致了SCN的增加,只有第一个非SELECT的DML语句导致SCN的增加,因此我认为不是DML本身导致SCN增加,而更有可能是第一个非SELECT的DML语句执行额外的动作(相比较事务中其他语句来说),此额外动作导致了SCN增加。
另外,要注意的是如果一个事务光是SELECT,而不做其它的INSERT,UPDATE操作,即使在COMMIT后,SCN也不会改变。
试验如下:
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
SQL> select * from test2;
N
----------
1
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
SQL> commit;
提交已完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
注:
在ORACLE 8I以下,可通过如下语句取得CURRENT SCN
select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
在ORACLE 9I,使用如下语句取得CURRENT SCN
select dbms_flashback.get_system_change_number from dual;
只看该作者
biti_rainy
人生就是如此
精华贴数 38
个人空间
0
技术积分 111199 (4)
社区积分 11832 (132)
注册日期 2001-12-12
论坛徽章:41
#25
使用道具
发表于 2004-8-16 23:05
你可以理解为 begin transaction and commit tansaction
至于没有dml的commit ,那不叫一个 transaction
你不做任何dml 而发出rollback命令 将会发现 v$sysstat 中 user rollbacks 将会增加 而 transactions 不会增加
所以你可以把结论定义为 事务的开始 和事务的结束都会导致 SCN 的增加,其他如 AQ/JOB 等也会产生SCN ……
同一个block上在一个事务中连续发生255个DML后scn也会增加
……
__________________
眼界决定边界,态度决定高度
blog:
人生就是如此
只看该作者
karlyang88
Biti's Fan
精华贴数 0
个人空间
0
技术积分 535 (3656)
社区积分 18 (8174)
注册日期 2005-5-27
论坛徽章:2
#26
使用道具
发表于 2005-7-31 13:46
为什么在9i里面按照上面大哥指点的做试验却是一次就增加几百呢!
__________________
DBA!DBA!(球迷们大声疯狂的叫喊着!)
问:DDBA是什么咚咚!
回答:What's out!连这个都不知道!DBA是CBA他 爹!!
相信自己,不久的未来你将是第一!相信自己!!
我们是itpub少壮派!
我没有钱,也没有背景,只是一刻不停的努力__马云
只看该作者
karlyang88
Biti's Fan
精华贴数 0
个人空间
0
技术积分 535 (3656)
社区积分 18 (8174)
注册日期 2005-5-27
论坛徽章:2
#27
使用道具
发表于 2005-7-31 13:48
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
971777
SQL> insert into test values(1);
已创建 1 行。
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
972342
__________________
DBA!DBA!(球迷们大声疯狂的叫喊着!)
问:DDBA是什么咚咚!
回答:What's out!连这个都不知道!DBA是CBA他 爹!!
相信自己,不久的未来你将是第一!相信自己!!
我们是itpub少壮派!
我没有钱,也没有背景,只是一刻不停的努力__马云
只看该作者
karlyang88
Biti's Fan
精华贴数 0
个人空间
0
技术积分 535 (3656)
社区积分 18 (8174)
注册日期 2005-5-27
论坛徽章:2
#28
使用道具
发表于 2005-7-31 13:55
呵呵上面的帖子都是一年前的了,我是按照biti的建议先把精华贴子看看!
心里面急呀!
__________________
DBA!DBA!(球迷们大声疯狂的叫喊着!)
问:DDBA是什么咚咚!
回答:What's out!连这个都不知道!DBA是CBA他 爹!!
相信自己,不久的未来你将是第一!相信自己!!
我们是itpub少壮派!
我没有钱,也没有背景,只是一刻不停的努力__马云
只看该作者
wang_songyan
初级会员
精华贴数 0
个人空间
3
技术积分 90 (18203)
社区积分 0 (119697)
注册日期 2004-6-17
论坛徽章:0
#29
使用道具
发表于 2005-10-12 20:54
to:biti_rainy
QUOTE:
最初由 biti_rainy 发布
这句话我应该更准确第表达一下
如果一个dml导致产生事务,则会产生一个scn。这个意思是说
如果一个事务包含多个dml,则只有第一个初始产生事务的dml产生scn,提交的时候又是一个scn
如果一个事务只有一个dml,拿看起来就是dml产生一个scn,提交或者回滚产生一个scn
这是经过实验测试过的,如果你又兴趣,不紧紧是要找资料看,还可以动手 证明
如果一个事务包含多个dml,当执行到某一个时出现检查点,那么下一条dml也应产生SCN吧。顺便问一句redo log中的 redo record中
也应包含一个SCN,而且是该dml执行时产生的SCN
只看该作者
wang_songyan
初级会员
精华贴数 0
个人空间
3
技术积分 90 (18203)
社区积分 0 (119697)
注册日期 2004-6-17
论坛徽章:0
#30
使用道具
发表于 2005-10-12 21:41
QUOTE:
最初由 lifeng@itpub 发布
试验结果确实同所说:
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282673
SQL> insert into test values (1);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282674
SQL> insert into test values (2);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282674
SQL> commit;
提交完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282678
---------------------------------------
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282684
SQL> insert into test values (1);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282685
SQL> rollback;
重算已完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282687
从实验结果看,一个事务中并不是所有的DML操作导致了SCN的增加,只有第一个非SELECT的DML语句导致SCN的增加,因此我认为不是DML本身导致SCN增加,而更有可能是第一个非SELECT的DML语句执行额外的动作(相比较事务中其他语句来说),此额外动作导致了SCN增加。
另外,要注意的是如果一个事务光是SELECT,而不做其它的INSERT,UPDATE操作,即使在COMMIT后,SCN也不会改变。
试验如下:
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
SQL> select * from test2;
N
----------
1
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
SQL> commit;
提交已完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
注:
在ORACLE 8I以下,可通过如下语句取得CURRENT SCN
select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
在ORACLE 9I,使用如下语句取得CURRENT SCN
select dbms_flashback.get_system_change_number from dual;
为什么什么都不做每隔几秒中查询的SCN会发生变化?是检查点的原因吗?
只看该作者
69
3/7
‹‹
1
2
3
4
5
6
7
››
投票
交易
悬赏
活动
相关内容
ITPUB论坛
≡ 数据库技术 ≡
> Oracle数据库管理
> Oracle开发
> Oracle Developer Suite
> Oracle入门与认证
> Oracle专题深入讨论
> Oracle新技术/11g
> Oracle电子文档
> Oracle Fusion中间件
> IBM数据库产品
> MS SQL Server
> Sybase管理与开发
> MySQL及其它开源数据库
> 内存数据库
> 数据仓库与数据挖掘
> 移动及嵌入式数据库
≡ 企业信息化 ≡
> ERP产品与实践
> CRM产品与实践
> HR产品与实践
> 物流
> 供应链
> 供应链建模与仿真
> 物流设备与系统工程
> 企业管理咨询
> 管理协同与办公自动化
> IT服务管理
> 数据中心建设
> ERP二次开发
> Oracle ERP
> Oracle EBS R12
> PeopleSoft与JDE
> EBS相关文档
> SAP R/3
> SAP Business One开发与快速实施
> SAP财务及CRM
> SAP后勤及HR
> mySAP ERP
> 系统开发及跨应用设置
> SAP相关文档
> 国外其它ERP产品
> 国内ERP产品
≡ 开发技术 ≡
> Java入门与认证版
> Java web开发及框架技术
> Java企业开发
> ASP.NET【已迁移到微软开发技术论坛】
> .Net企业开发与应用【已迁移到微软开发技术论坛】
> WEB程序开发
> WEB 2.0技术
> 动态语言
> 移动与游戏开发
≡ 系统设计与项目管理 ≡
> 系统分析与UML
> 系统分析与UML精华区
> 项目管理
> 项目过程
> 软件测试
> 算法讨论与研究
≡ IBM软件技术园地 ≡
> IBM数据库产品
> Lotus
> Tivoli
> Websphere
> Rational
> 与SOA相关的IBM产品与技术
> IBM软件技术精英协会
> 软件技术精英活动专版
≡ 操作系统与硬件 ≡
> AIX及IBM产品【已迁移到IXPUB】
> HP-UX及HP产品【已迁移到IXPUB】
> Solaris及SUN产品【已迁移到IXPUB】
> Linux及其应用 【已迁移到IXPUB】
> 其它UNIX系统【已迁移到IXPUB】
> windows系统及微软相关产品 【已迁移到IXPUB】
> 存储设备与容灾技术 【已迁移到IXPUB】
> 服务器 【已迁移到IXPUB】
≡ 行业纵向讨论区 ≡
> IT业界评论与展望
> 政府与教育事业
> 中国政府信息主管联盟
> 电信行业
> 金融行业
> 医卫行业
> 制造行业
> 电力行业
> 信息安全与审计
≡ 会员交流 ≡
> IT职业生涯
> 招聘求职商务信息
> 体育世界
> 体育博彩专版
> 旅游,驴友
> 汽车世界
> 外语角
> 数码摄影
> 你的故事我的歌
> 音乐推荐区
> 电子图书与IT文档资料
> 软件交流
> 软件交流精华区
≡ ITPUB产品与服务 ≡
> ITPUB地面活动专版
> BLOG天地
> WIKI世界
> 授权用户区
> 站务管理
≡ 微软开发技术 ≡
> 开发工具和语言
> .NET Framework 相关
> Visual Basic/VB.net
> Visual C#
> Visual C++/vc.net
> Visual Studio
> .NET软件架构与模式
> .NET开发辅助工具及框架
> Web开发
> ASP.NET与AJAX
> Web相关技术讨论(IIS等)
> Silverlight 技术
> 微软企业级产品技术
> SQL Server
> windows server
> SharePoint
> Exchange Server
> Biztalk
> 嵌入式及移动开发
> Windows Embedded 嵌入式技术
> Windows 移动设备
> Office开发
> Microsoft office system
> Office Business Application
> 微软产品用户交流区
> .Net电子书籍&&书籍介绍
> .Net人才交流
技术积分榜
社区积分榜
徽章
电子杂志
会员
团队
统计
邮箱
游乐场
帮助
TOP
CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号
联系我们
法律顾问
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计