oracle SCN跟TIMESTAMP之间转换_oracle

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

时间: 2024-09-21 12:44:26

oracle SCN跟TIMESTAMP之间转换_oracle的相关文章

Date、String、Timestamp之间的转换

1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 4 Date date = null; 5 String str = null; 6 7 // String转Date 8 str = "2009-01-06"; 9 try { 10 date

在Java中String和Date、Timestamp之间的转换_java

一.String与Date(java.util.Date)互转      1.1 String -> Date String dateStr = "// ::"; Date date = new Date(); //注意format的格式要与日期String的格式相匹配 DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); try { date = sdf.parse(dateStr); S

【体系结构】有关Oracle SCN知识点的整理--补充内容

[体系结构]有关Oracle SCN知识点的整理--补充内容   小麦苗自己整理的内容参考:[体系结构]有关Oracle SCN知识点的整理  http://blog.itpub.net/26736162/viewspace-2126407/ DBA入门之认识Oracle SCN(System Change Number) 1. SCN的定义 SCN(System Change Number),也就是通常所说的系统改变号,是数据库中非常重要的一个数据结构. SCN用以标识数据库在某个确切时刻提交

Oracle SCN与数据恢复的关系

Oracle内部主要存在以下四种SCN 1.系统检查点(system checkpoint)SCN 每当一个 检查点完成时,Oracle就把该检查点对应的SCN记录到控制文件中,可以用以下语句查看当前 数据库的检查点SCN: select CHECKPOINT_CHANGE# from v$database; CHECKPOINT_CHANGE# ------------------ 6627441168 2.数据文件头 SCN(数据文件的启动SCN) 该SCN记录在每个数据文件头中,正常情况下

nutch 代理 本地ip与代理ip之间转换

问题描述 nutch 代理 本地ip与代理ip之间转换 我用的是Nutch1.9版本的,在爬去网站过程中好像因为同一ip访问频繁然后ip被封了,正在尝试用代理,但是如果代理ip被封了的话,nutch会使用本机的ip继续进行爬去吗?然后等本机ip被封的时候又转代理ip进行爬去?这样循环转换..... 解决方案 http://fuliang.iteye.com/blog/148999

Oracle与Access表之间的导入和导出实现

问题的提出:如何在FORM的程序中实现Oracle与Access表之间的导入和导出. 问题的解答: 准备工作: 1.安装OCA.运行Developer的安装盘,选择自定义安装,选择Oracle Open Client Adapter for ODBC安装. 2.在数据源(ODBC)中添加DSN.控制面板->管理工具->数据源(ODBC),选择"用户DSN",添加要进行操作的Access的文件.在"高级"选项里,填上"登录名称"和&qu

oracle-急求各路大神关于Oracle和JSP页面字符集转换的问题

问题描述 急求各路大神关于Oracle和JSP页面字符集转换的问题 我用的是Oracle11g,编码方式为ZHS16GBK,开发工具是myeclipse,JSP页面用的是utf-8,我现在想向数据库插入一条数据,其中有中文字符,我想问一下怎么转换这个字符,使其在数据库中能正常显示,而不是乱码 解决方案 好吧,服务器的配置问题,已经解决了 解决方案二: http://xiangqinghu1988.blog.163.com/blog/static/58822991201222231517193/

oracle SCN怎么取出来存在一个变量里面?

问题描述 oracle SCN怎么取出来存在一个变量里面? 如题,我想在一个表里记录SCN号,如何把它放在一个变量里? declare SCNNUM NUMBER; begin select dbms_flashback.get_system_change_number into SCNNUM from dual ; [Error] ORA-00904 (12: 8): PL/SQL: ORA-00904: : invalid identifier WHY?

oracle中 如何将拉丁文转换成中文

问题描述 oracle中 如何将拉丁文转换成中文 '???? 我也不知道这个拉丁文是什么意思,有没有哪位大神转换过啊,在线等 解决方案 这是拉丁文还是(乱码了)?确定这是拉丁文? 解决方案二: 这是拉丁文还是(乱码了)?确定这是拉丁文? 解决方案三: 这看上去是一种文字而不是乱码.什么意思嘛,你需要找翻译 解决方案四: oracle11汉字乱码的问题解决方法 鼠标右键"计算机"->"系统属性"->"高级系统设置"->"