ORACLE的SCN在内存中被时刻更新,然后不定期的更新到数据文件或者日志文件中。
我们可以通过如下的方法来查询内存SCN的内存地址及其相应的值。
如下所示:
- SQL> oradebug dumpvar sga kcsgscn_
- 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;
- SQL> oradebug dumpvar sga kcsgscn_
- kcslf kcsgscn_ [2000D260, 2000D280) = 00000000 000FB725 000001CE 00000000 00000000 00000000 00000000 2000D06C
- SQL> select to_char(CURRENT_SCN,'xxxxxxxx') from v$database;
- TO_CHAR(C
- ---------
- fb726
CURRENT SCN比dumpvar sga kcsgscn_ 多1,当然是由于我们2个语句执行有时间间隔导致的。
我们可以通过修改内存中的值来改变SCN值:
如下所示:
- SQL> oradebug peek 0x2000D260 8
- [2000D260, 2000D268) = 00000000 000FB778
- SQL> oradebug poke 0x2000D264 4 0x001FB778
- BEFORE: [2000D264, 2000D268) = 000FB77F
- AFTER: [2000D264, 2000D268) = 001FB778
- SQL> select to_char(CURRENT_SCN,'xxxxxxxx') from v$database;
- TO_CHAR(C
- ---------
- 1fb77c
阅读(1132) | 评论(0) | 转发(0) |