Chinaunix首页 | 论坛 | 博客
  • 博客访问: 435296
  • 博文数量: 55
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-04 15:15
个人简介

热衷技术,热爱交流

文章分类

全部博文(55)

文章存档

2014年(7)

2013年(48)

分类: Oracle

2013-05-04 23:20:47

oracle10个提供了这两个函数,用于SCN与时间之间的转换:
现在来看看用法:
1.获取当前数据文件检查点的SCN:

点击(此处)折叠或打开

  1. select file#,to_char(creation_time,'yyyy-mm-dd hh24:mi:ss') creat_time,CHECKPOINT_CHANGE#,to_char(CHECKPOINT_TIME,'yyyy-mm-dd hh24:mi:ss') "检查点时间" from v$datafile;;
 FILE#|CREAT_TIME         |CHECKPOINT_CHANGE#|检查点时间
----------|-------------------|------------------|-------------------
         1|2013-02-06 17:15:16|           4385180|2013-05-04 17:52:20
         2|2013-02-06 17:15:38|           4385180|2013-05-04 17:52:20
         3|2013-02-06 17:15:54|           4385180|2013-05-04 17:52:20
         4|2013-02-06 17:16:17|           4385180|2013-05-04 17:52:20
         5|2013-02-13 08:36:03|           4385180|2013-05-04 17:52:20
         6|2013-02-13 12:13:07|           4385180|2013-05-04 17:52:20
         7|2013-02-13 12:53:08|           4385180|2013-05-04 17:52:20
         8|2013-02-15 15:58:03|           4385180|2013-05-04 17:52:20
         9|2013-02-15 16:17:37|           4385180|2013-05-04 17:52:20
        10|2013-04-20 21:32:43|           4385180|2013-05-04 17:52:20

实际上面的CHECKPOINT_TIME就已经是检查点的时间了,但是它只是记录了检查点scn的时间,scn_to_timestamp与 timestamp_to_scn函数则可以对不是检查点的scn和时间进行转换

2. 把scn转换为时间:

点击(此处)折叠或打开

  1. SYS AS SYSDBA >select (scn_to_timestamp(4385182)) scn from dual;

  2. SCN
  3. ---------------------------------------------------------------------------
  4. 04-5月 -13 05.52.23.000000000 下午
3. 现在把时间转换为scn:

点击(此处)折叠或打开

  1. SYS AS SYSDBA >select timestamp_to_scn('04-5月 -13 05.52.23.000000000 下午') scn from dual;

  2.        SCN
  3. ----------
  4.    4385182

  5. Elapsed: 00:00:00.01
需要注意的是,转换的时间和scn都必须要在oracle系统的scn记录范围内,否则报错:

SYS AS SYSDBA >select (scn_to_timestamp(438518)) scn from dual; 
select (scn_to_timestamp(438518)) scn from dual
        *
ERROR at line 1:
ORA-08181: 指定的编号不是有效的系统更改号
ORA-06512: 在 "SYS.SCN_TO_TIMESTAMP", line 1

4. 看看系统可以转换的scn:

看看最大的scn

点击(此处)折叠或打开

  1. SYS AS SYSDBA >select current_scn from v$database;
CURRENT_SCN
-----------
    4389007
查询一次,这个值都在涨,那么实际的可以转换的scn应该是可以比这个大一些的(dbms_flashback.get_system_change_number也可以查询)。

看看最小的SCN,网上说可以从视图sys.smon_scn_time获取,但是我发现获取的也会报上面的错。求解!!


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