Oracle的V$SESSION_LONGOPS超过系统时间的处理方法

检查一个系统,意外发现数据库的v$session_longops中时间远远超过了系统时间。

查询结果如下:

[oracle@datasd ~]$ sqlplus / as sysdba

SQL*Plus: Release10.2.0.3.0 - Production on星期一12月20 14:57:04 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:

Oracle Database10gEnterprise Edition Release10.2.0.3.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE

-------------------

2010-12-20 14:57:22

SQL> select max(start_time), max(last_update_time)

2  from v$session_longops;

MAX(START_TIME)     MAX(LAST_UPDATE_TIM

------------------- -------------------

2022-03-25 13:51:24 2022-03-25 13:51:25

从v$session_longops查询的时间比sysdate看到的时间快了20多年。看到这个现象的第一个反应是bug。

于是查询了metalink,看看有没有v$session_longops视图时间变快的记录,把整个metalink翻了个遍也没有找到有价值的信息。

SQL> select instance_name, startup_time

2  from v$instance;

INSTANCE_NAME    STARTUP_TIME

---------------- -------------------

shandong         2008-01-15 15:19:28

SQL> host uptime

15:01:21 up 1069 days, 22:12,  2 users,  load average: 0.00, 0.00, 0.00

进一步检查系统,发现数据库和系统的启动时间都接近3年了。

由于没有可以借鉴的信息,只能猜测可能导致问题的原因:

一、数据库的bug,导致v$session_longops记录的时间变快;

二、操作系统运行时间超过了500天,导致操作系统或Oracle数据库中某些变量溢出,从而导致了这个问题。

三、操作系统上时间曾经被手工改动过,发现修改错误后,调整回来,但是v$session_longops视图中的时间没有自动回调。

前两种的可能性并不大,因为如果是这两种情况,那么应该是比较普遍的,不太可能metalink中没有任何的记录。

第三种可能性可以自己来模拟一下:

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select sid from v$mystat where rownum = 1;

SID

----------

18

SQL> set autot trace stat

SQL> select * from ndmain.cat_product;

已选择124350行。

Statistics

----------------------------------------------------------

0  recursive calls

0  db block gets

20274  consistent gets

12867  physical reads

0  redo size

75995724  bytes sent via SQL*Net to client

91682  bytes received via SQL*Net from client

8291  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

124350  rows processed

SQL> set autot off

SQL> select max(start_time), max(last_update_time)

2  from v$session_longops

3  where sid = 18;

MAX(START_TIME)     MAX(LAST_UPDATE_TIM

------------------- -------------------

2010-12-20 15:40:54 2010-12-20 15:41:06

SQL> select sysdate from dual;

SYSDATE

-------------------

2010-12-20 15:41:47

时间: 2024-11-18 03:14:04

Oracle的V$SESSION_LONGOPS超过系统时间的处理方法的相关文章

Android获取系统时间的多种方法

Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现. 现总结如下: 方法一: void getTime1(){ long time=System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd

linux修改系统时间的详细方法介绍

  两步 (1)date 042612492005 (2)hwclock -w 第一步的意思是设置时间,设置完了可以用date命令查看对不对...注意是月日时分年 第二步的意思是写入主板的rtc芯片.. ======================================= su -c 'date -s 月/日/年' su -c 'date -s 时:分:秒' ======================================= 了解Linux的时钟 由于Linux时钟和Win

Linux修改系统时间的简洁方法

  Linux下怎么一步到位设置系统时间.拿linux虚拟机做实验的朋友会知道.当你把linux还原到某个点的时候,vmware帮不了你把系统时间也给重设了.所以这时候就要手工来搞.关于怎么设Linux时间.网上介绍也很多,但是都是抄来抄去的东西.那怎么才能高效快捷的设置系统时间呢? 开始的时候,或者网上都有的说法,比如说把时间设为2014-07-12 18:30:50. 我们会先设日期 date -s 20140712 再设时间 date -s 18:30:50 一台机器还好说,多了你就会烦了

XP下不能更改系统时间的解决方法

  单击xp系统托盘中的时间图标时,系统弹出"您没有适当的特权级,所以无法更改'系统时间'"的提示,不能修改系统时间. 这可能是因为当前所使用的账户的更改系统时间的权限受限制了,此时可通过下面的步骤进行解决. 第1步:以系统管理员的账户登录系统,依次执行"开始"-"运行"命令,在"运行"对话框中输入"gpedit.nisc"后单击"确定"按钮,打开"组策略"窗口. 第

linux系统时间的修改方法

首先需要切换到root操作用户模式 先设置日期 date -s 20100315 设置时间 date -s 11:06 如果要同时更改BIOS时间 再执行 clock -w

笔记本电脑系统时间不准解决方法

BIOS里设置时间 我们可以先在BISO里设置正确的时间,看看长时间不开机还有没有这种情况 主板电池没电 这是比较常见的一种情况,在我们的笔记本主板上,有一个纽扣电池,像我们BIOS的密码呀,硬盘光驱的启动程序呀,也都是通过主板电池供电的. 如果在BIOS里设置了正确的时间,但是过一阵还是不准确,那很有可能就是这块小电池没电了.但是笔记本不同于台式机,如果没有经验的读者,我还是建议大 家找专业的维修店更换一块电池,花不了几个钱的.注意:?主板电池没电,石英损坏请找专业拆机,自己会的话自己操作!

Linux下修改时间时区的方法介绍

  以前一直用date设置,这次参考网上资料,终于整了个全的. Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中进行设置.当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作. Linux中的所有命令 (包括函数)都是采用的系统时钟设置.在Linux中,用于时钟查看和设置的命令主要有dat

C#如何获取时间(日期+具体时间)各种方法

问题描述 我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-0412:11:10)等.//获取日期+时间DateTime.Now.ToString();//2008-9-420:02:10DateTime.Now.ToLocalTime().ToString();//2008-9-420:12:12//获取日期DateTime.Now.ToLongDateS

keystore-修改了系统时间,导致oem挂掉,然后oms也无法启动。为了记录这个解决办法,贴帖如下,谢谢!

问题描述 修改了系统时间,导致oem挂掉,然后oms也无法启动.为了记录这个解决办法,贴帖如下,谢谢! 修改了系统时间,导致oem挂掉,然后oms也无法启动.为了记录这个解决办法,贴帖如下: Note: In case of a multi-OMS setup, perform the steps below on each OMS Host 1.Make sure you take backup of DemoIdentity.jks and DemoTrust.jks files in th