oracle SCN跟TIMESTAMP之间转换

 更新时间:2012年11月22日 16:52:40   作者:  
本文将详细介绍oracle SCN跟TIMESTAMP之间转换,需要的朋友可以参考下

Sql代码
--获取当前的SCN

复制代码 代码如下:

select dbms_flashback.get_system_change_number scn1,
timestamp_to_scn(sysdate) scn2 from dual;

--将SCN转换成功时间
复制代码 代码如下:

select to_char(scn_to_timestamp(34607271), 'yyyy-mm-dd hh24:mi:ss') chr,
timestamp_to_scn(scn_to_timestamp(34607271)) dt
from dual;


作为对于闪回操作(flashback)的一个增强,Oracle10g提供了函数对于SCN和时间戳进行相互转换。

首先通过dbms_flashback.get_system_change_number 可以获得系统当前的SCN值:

SQL> col scn for 9999999999999
SQL> select dbms_flashback.get_system_change_number scn from dual;
SCN
--------------
8908390522972

通过scn_to_timestamp函数可以将SCN转换为时间戳:


SQL> select scn_to_timestamp(8908390522972) scn from dual;
SCN
---------------------------------------------------------------------------
05-JAN-07 10.56.30.000000000 AM

再通过timestamp_to_scn可以将时间戳转换为SCN:

SQL> select timestamp_to_scn(scn_to_timestamp(8908390522972)) scn from dual;
SCN
--------------
8908390522972

通过这两个函数,最终Oracle将SCN和时间的关系建立起来,在Oracle10g之前,是没有办法通过函数转换得到SCN和时间的对应关系的,一般可以通过logmnr分析日志获得。

但是这种转换要依赖于数据库内部的数据记录,对于久远的SCN则不能转换,请看以下举例:


SQL> select min(FIRST_CHANGE#) scn,max(FIRST_CHANGE#) scn from v$archived_log;
SCN SCN
------------------ ------------------
8907349093953 8908393582271

SQL>
复制代码 代码如下:

select scn_to_timestamp(8907349093953) scn from dual;
select scn_to_timestamp(8907349093953) scn from dual
*
ERROR at line 1:
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1
ORA-06512: at line 1


SQL> select scn_to_timestamp(8908393582271) scn from dual;

SCN
---------------------------------------------------------------------------
05-JAN-07 11.45.50.000000000 AM

相关文章

  • oracle中得到一条SQL语句的执行时间的两种方式

    oracle中得到一条SQL语句的执行时间的两种方式

    这篇文章主要介绍了oracle中如何得到一条SQL语句的执行时间,有两种可行方式,大家可以参考下
    2014-05-05
  • Oracle一行拆分为多行方法实例

    Oracle一行拆分为多行方法实例

    工作和学习中常常会遇到一行要分割成多行数据的情况,在此整理一下做下对比,下面这篇文章主要给大家介绍了关于Oracle一行拆分为多行的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • oracle获取当前用户表、字段等详细信息SQL

    oracle获取当前用户表、字段等详细信息SQL

    这篇文章主要介绍了oracle获取当前用户表、字段等详细信息SQL,需要的朋友可以参考下
    2014-07-07
  • Oracle 11g 客户端的安装和配置的图文教程

    Oracle 11g 客户端的安装和配置的图文教程

    这篇文章主要介绍了 Oracle 11g 客户端的安装和配置的图文教程,需要的朋友可以参考下
    2017-05-05
  • Oracle更换监听端口的流程步骤

    Oracle更换监听端口的流程步骤

    本文详细介绍了如何修改Oracle数据库的监听端口,步骤包括查看监听状态、停止监听、修改listener.ora配置文件、更新local_listener参数、启动监听、检查端口开放,并涉及防火墙设置,文中通过图文讲解的非常详细,需要的朋友可以参考下
    2024-10-10
  • 分享ORACLE SEQUENCE跳号总结

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢,下面通过本文给大家详解介绍,一起看看吧
    2017-09-09
  • [Oracle] 浅谈Lock与Latch

    [Oracle] 浅谈Lock与Latch

    以下是对Oracle中Lock与Latch的相同点以及不同点进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • Oracle 查看表空间的大小及使用情况sql语句

    Oracle 查看表空间的大小及使用情况sql语句

    表空间使用情况包括:查看表空间的名称及大小/查看表空间物理文件的名称及大小/查看回滚段名称及大小等等感兴趣的你可以参考下本文
    2013-03-03
  • Oracle查看SQL执行计划的几种方法

    Oracle查看SQL执行计划的几种方法

    在日常的运维工作中,SQL优化是DBA的进阶技能,SQL优化的前提是要看SQL的执行计划是否正确,下面分享几种查看执行计划的方法,每一种方法都各有各的好处,可以根据特定场景选择某种方法,需要的朋友可以参考下
    2024-11-11
  • Oracle 11g简体中文版安装图文教程

    Oracle 11g简体中文版安装图文教程

    这篇文章主要以图文结合的方式为大家介绍了Oracle 11g简体中文版的安装过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论