执行Oracle sql的实际步骤


  本文标签:Oracle sql

  在某些项目中有时后会出现以下的情况,由于代码写错,在执行Oracle sql之后,我们没有关闭数据库的相关连接  。如果该代码重复执行Oracle sql时,会导致应用服务器和数据库的连接不断增加,最终导致连接超过数据库连接上限,系统崩溃  。

  问题:

  项目中的代码很多,很难准确定位到底是哪一段代码出了问题

  解决办法:

  用应用程序的用户登录Oracle,执行下面的sql:

  

  1. select sql_text from v$sqlarea a where a.
    HASH_VALUE in (  
  2. select b.prev_hash_value from v$session b where b. 
    MACHINE = WLS254 
  3. )   

  

  sql中的"WLS254"指的是应用服务器的名称,该sql得到的结果就是WLS254这台机器连接到Oracle的正在执行的Oraclesql  。通过分析这些sql,就可以快速的发现是哪部分程序没有释放连接  。

  v$session视图的字段说明:

  SADDR RAW(4) 会话地址,SID NUMBER 会话标识符

  SERIAL# NUMBER 会话序列号  。用来唯一地标识绘画对象  。如果该会话结束且其他会话以相同的会话ID 开始,则保证会话级的命令被应用到正确会话对象

  AUDSID NUMBER 审计会话ID  。PADDR RAW(4) 拥有这个会话的进程地址,USER# NUMBER Oracle 用户标识符,USERNAME VARCHAR(30) Oracle 用户名,COMMAND NUMBER 正进行的命令  。关于值的列表,请参阅表B-

  11OWNERID NUMBER 如果值为2147483644,则此列的内容无效  。否则此列包含拥有可移植会话的用户标符  。对于利用并行从服务器的操作,将这个值解释为一个48 字节的值  。其低位两字节表示会话号,而高位字节表示查询协调程序的实例ID

  TADDR VARCHAR2(8) 事务处理状态对象的地址

  LOCKWAIT VARCHAR2(8) 等待锁的地址;如果没有,为NULL

  STATUS VARCHAR2(8) 会话的状态:ACTIVE (当前执行的

  sql)、INACTIVE、KILLED(标记为

  终止)、CACHED(为Oracle*XA 使

  用而临时高速缓存)、SNIPED(会

  话不活动,在客户机上等待)

  SERVER VARCHAR2(9) 服务器类型:

  DEDICATED、SHARED、

  PSEUDO、NONE

  SCHEMA# NUMBER 模式用户标识符

  SCHEMANANME VARCHAR2(30) 模式用户名,OSUSER VARCHAR(15) 操作系统客户机用户名,PROCESS VARCHAR2(9) 操作系统客户机进程ID,MACHINE VARCHAR2(64) 操作系统机器名,TERMINAL VARCHAR2(10) 操作系统终端名,PROGRAM VARCHAR(48) 操作系统程序名,TYPE VARCHAR2(10) 会话类型  。sql_ADDRESS RAW(4) 与sql_HASH_VALUE 一道使用标识

  当前正在执行的Oraclesql 语句

  sql_HASH_VALUE NUMBER 与sql_ADDRESS 一道使用标识当前

  正在执行的sql 语句

  MODULE VARCHAR2(48) 包含当前正在执行的模块名,正如

  由调用

  DBMS_APPLICATION_INFO.SET_MODU

  LE 过程所设置

  MODULE_HASH NUMBER 上面MODULE 的散列值

  ACTION VARCHAR2(32) 包含当前执行活动的名称,正如由

  调用

  DBMS_APPLICATION_INFO.SET_ACTI

  ON 过程所设置

  ACTION_HASH NUMBER 上列活动名称的散列值

  CLIENT_INFO VARCHAR2(64) 由

  DBMS_APPLICATION_INFO.SET_CLIE

  NT_INFO 过程设置的信息

  FIXED_TABLE_

  SEQUENCE

  NUMBER 此列包含一个数,每当会话完成一

  个数据库调用并且存在来自动态性能表的介入选择,它个数就增加  。这个列可被性能监控程序用来监控数据库中的统计数据  。每当性能监控程序查看数据库时,只需要查看当前活动的会话或在这个列中具有比上次性能监控程序所看到的最大值更大的值的会话即可  。所有其他会话自上次性能监控程序查看数据库以来都是空闲的  。

  以上的相关内容就是对Oracle sql执行方式的相关内容的部分介绍,望你能有所收获  。