Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2837813
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2012-08-08 21:47:32

ORACLE的SCN在内存中被时刻更新,然后不定期的更新到数据文件或者日志文件中。
我们可以通过如下的方法来查询内存SCN的内存地址及其相应的值。
如下所示:
 

点击(此处)折叠或打开

  1. SQL> oradebug dumpvar sga kcsgscn_
  2. kcslf kcsgscn_ [2000D260, 2000D280) = 00000000 000FB6F6 000001A3 00000000 00000000 00000000 00000000 2000D06C

SCN在内存中的起始地址为:2000D260 一共8个字节,也就是0X00000000000FB6F6
如果快速执行下面2个语句,就会发现有相同之处:
oradebug dumpvar sga  kcsgscn_
select to_char(CURRENT_SCN,'xxxxxxxx') from v$database;
 

点击(此处)折叠或打开

  1. SQL> oradebug dumpvar sga kcsgscn_
  2. kcslf kcsgscn_ [2000D260, 2000D280) = 00000000 000FB725 000001CE 00000000 00000000 00000000 00000000 2000D06C
  3. SQL> select to_char(CURRENT_SCN,'xxxxxxxx') from v$database;

  4. TO_CHAR(C
  5. ---------

  6.     fb726


CURRENT SCN比dumpvar sga  kcsgscn_ 多1,当然是由于我们2个语句执行有时间间隔导致的。
 

我们可以通过修改内存中的值来改变SCN值:
如下所示:
 

点击(此处)折叠或打开

  1. SQL> oradebug peek 0x2000D260 8
  2. [2000D260, 2000D268) = 00000000 000FB778
  3. SQL> oradebug poke 0x2000D264 4 0x001FB778
  4. BEFORE: [2000D264, 2000D268) = 000FB77F
  5. AFTER: [2000D264, 2000D268) = 001FB778
  6. SQL> select to_char(CURRENT_SCN,'xxxxxxxx') from v$database;

  7. TO_CHAR(C
  8. ---------

  9.    1fb77c

 
阅读(1060) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~