日归档:2013 年 8 月 22 日

浅谈SCN_2–_kcmgas_函数

从oracle10g开始,我们可以通过查询v$database.current_scn来获取当前数据库的scn,这个是通过调用”kcmgas”函数来完成的,这是一个oracle intance的永久内存结构体,我们可以查询 v$syssta来观察该函数的调用情况: 先看对v$database.current_scn的查询来获取scn的方式: 详细描述请见:浅谈SCN_2-_kcmgas_函数 姊妹篇见:浅谈SCN_1–从oracle7至今,如何获取scn

发表在 Internal | 标签为 , | 留下评论

浅谈SCN_1–从oracle7至今,如何获取scn

SCN (System Change Number) 是Oracle数据库中保持数据一致性的主要机制。数据库内部的scn有好几种,会在后面的blog中慢慢细数。今天主要我们如何获取数据库的scn? SCN是一个很大的数字,Oracle使用6 Bytes记录SCN,也就是48bit(一个byte是8bit,每个bit存储0或者1),其最大值是其格式貌似由两部分组成: wrap.base 其中前面16bit的十进制数表示wrap,后面32bit的十进制数表示base,当base达到4 billion(4G),wrap就会增加1。 这是因为Oracle使用c语言写的,在c语言里面 long 类型是一个32bit整数,即最大是 4G(4294967296,2 power 32),因此,scn若在自增的时候采用long类型的整数,正好是4字节,因此,当scn base(ktuxescnb )增加到4G的时候,就需要扩充,于是就有了scn wrap (ktuxescnw),这个表示每满一个 4G(ktuxescnb) 则该值被重置为0,然后再次开始递增1。 详细描述请见:浅谈SCN_1-_从oracle7至今,如何获取scn

发表在 Internal | 标签为 | 留下评论