内容摘要:如果想要成为更出色的数据库管理员并为终端客户群提供更好的服务,那么了解Oracle数据库内部的结构非常重要。Oracle数据库的库缓存就是数据库管理员需要深入了解的一个内部结构,通过深入学习,能够帮助您消除由应用软件用户引发的一些非常烦人的拒绝服务请求事件。
以下是引用片段:
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更有效地运行而已。
来源:IT专家网 作者:cyw 责编:豆豆技术应用