WEB开发网
开发学院数据库Oracle DBA必学:Oracle库缓存 阅读

DBA必学:Oracle库缓存

 2008-01-16 12:41:06 来源:WEB开发网   
核心提示: 以下是引用片段:SELECTwaiting_session,holding_sessionFROMdba_waiters;如果想要了解锁定中的会话正在执行什么SQL查询,可以使用以下的SQL语句进行查询:以下是引用片段:selectsesion.sid,sql_textfromv$sqla

以下是引用片段:
  SELECTwaiting_session,holding_sessionFROMdba_waiters;

如果想要了解锁定中的会话正在执行什么SQL查询,可以使用以下的SQL语句进行查询:

以下是引用片段:
  selectsesion.sid,
  sql_text
  fromv$sqlareasqlarea,v$sessionsesion
  wheresesion.sql_hash_value=sqlarea.hash_value
  andsesion.sql_address=sqlarea.address;

有时候我们最好能够知道问题源于何处。给Oracle带来问题的可能并不是整个应用程序代码组,而实际上是某个特定的语句。我们可以通过追踪原始的SQL语句来查看可纠正此类问题。

现在我们已经确定了正在进行中的会话和被等待对象,以及引发问题的会话及其SQL。那么接下来要如何解决出现的问题呢?如果等待事件持续的时间过长,那么库缓存内部很可能发生了错误或故障。唯一的补救办法就是杀死持有该锁的所有进程。在Oracle数据库中要达到这个目的,可以使用alter system kill session命令。不过,这个命令是否有效还得看连接的类型。有时候需要用operating system kill命令或者关闭一系列应用程序来终止连接。我们需要检测库缓存中完全锁定状态下,哪一个方法对系统更行之有效。至少在不得不关闭系统和数据库之前,尝试一下强迫杀死进程的方法。

当我们使用库缓存时,只要记住它不过是在代码执行前,Oracle数据库必须将这些代码载入其中的内存区。将代码载入到库缓存的过程可能会受到限制,从而引起等待事件,使系统挂起。这时候我们要通过杀死会话、进程或修改代码的方法快速确定导致系统挂起的SQL进程,不过千万不要忘记了库缓存只是内存的事实,我们可能只是需要给引发问题的部分重新分配一些内存,使Oracle更有效地运行而已。

上一页  1 2 3 4 5 6 

Tags:DBA Oracle 缓存

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接