结构化查询语言定位方法、装置、服务器及存储介质与流程

文档序号:17989912发布日期:2019-06-22 00:42阅读:260来源:国知局
本发明涉及计算机
技术领域
:,具体涉及一种结构化查询语言定位方法、装置、服务器,及存储介质。
背景技术
::很多公司的数据库往往是多个系统共用,而一个数据库往往有成千上万甚至上亿条结构化查询语言(sql,structuredquerylanguage)执行。有些时候,运营人员需要知道某条执行中的sql具体来自哪个应用程序,对于不熟悉业务逻辑或业务表的同事,往往无从下手,需要联系数据库相关涉及的系统的开发同事扫描代码来核实认领。这样一来,工作很被动,定位时间往往也很长。技术实现要素:鉴于以上内容,有必要提出一种结构化查询语言定位方法、装置、服务器,以及存储介质,用以解决结构化查询语言定位效率低下的问题。本发明的第一方面提供一种结构化查询语言定位方法,所述方法包括:根据sql_id,在数据库服务器的v$session视图中查找与所述sql_id所对应的计算机装置及端口,其中,所述sql_id是指正在执行的sql语句的标识;获取所述端口的占用信息,其中,所述端口的占用信息包括:所述端口所对应的ip地址;从所述端口所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址;及根据所筛选出的ip地址确定目标应用程序,所述正在执行的sql语句来自所述目标应用程序。优选地,所述获取所述端口的占用信息包括:控制所述计算机装置利用netstat指令查询所述端口的占用信息,由此获得所述端口的占用信息。优选地,所述获取所述端口的占用信息包括:控制所述计算机装置使用netstat-anp|grepport指令来查询所述端口的占用信息,由此获得所述端口的占用信息。优选地,所述根据所筛选出的ip地址确定目标应用程序包括:根据所述筛选出的ip地址确定一个目标进程,其中,所述筛选出的ip地址分配给了所述目标进程;及确定所述目标应用程序为所述目标进程所对应的应用程序。优选地,所述根据所述筛选出的ip地址确定一个目标进程,其中,所述筛选出的ip地址分配给了所述目标进程包括:根据所述筛选出的ip地址检索配置管理数据库确定所述筛选出的ip地址具体是分配给了哪个进程,确定分配了所述筛选出的ip地址的进程为所述目标进程,其中,所述配置管理数据库预先记录了每个应用程序的进程具体分配到的是哪个ip地址。优选地,所述端口的占用信息还包括所述端口所对应的进程号,其中,所述根据所筛选出的ip地址确定目标应用程序包括:从所述端口的占用信息中,确定用于与所述数据库服务器建立连接所用的ip地址以及进程号;获取所述进程号的详细信息;根据所述用于与所述数据库服务器建立连接所采用的ip地址,从所述进程号的详细信息中获得与所述进程号所对应的应用程序,确定所述目标应用程序为与所述进程号所对应的应用程序。优选地,所述获取所述进程号的详细信息包括:利用ps命令获取所述进程号的详细信息。本发明的第二方面提供一种数据库服务器,所述数据库服务器包括处理器和存储器,所述存储器用于存储至少一个指令,所述处理器用于执行所述至少一个指令以实现所述结构化查询语言定位方法。本发明的第三方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有至少一个指令,所述至少一个指令被处理器执行时实现所述结构化查询语言定位方法。本发明的第四方面提供一种结构化查询语言定位装置,所述装置包括:查找模块,用于根据sql_id,在数据库服务器的v$session视图中查找与所述sql_id所对应的计算机装置及端口,其中,所述sql_id是指正在执行的sql语句的标识;执行模块,用于获取所述端口的占用信息,其中,所述端口的占用信息包括:所述端口所对应的ip地址;所述执行模块,还用于从所述端口所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址;及所述执行模块,还用于根据所筛选出的ip地址确定目标应用程序,所述正在执行的sql语句来自所述目标应用程序。本发明实施例中所述的结构化查询语言定位方法、装置、服务器,以及存储介质,首先根据sql_id,在v$session视图中查找与所述sql_id所对应的计算机装置和端口号,然后利用netstat指令找到所述端口号所对应的ip,并筛选出用于与数据库服务器建立连接所用的ip地址。最后根据所述所筛选出的ip地址,通过cmdb找出所述筛选出的ip地址具体是分配给了哪个应用程序,从而定位到正在执行的所述sql语句具体来自哪个应用程序。定位过程无需依赖开发人员扫描代码,维护人员无需熟悉业务逻辑或数据库业务表信息,方法快速准确,且可以形成通用方案,定位过程减少了人力投入,提高了定位效率,维护人员可独立完成。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1是本发明实施例一提供的结构化查询语言定位方法的应用环境架构图。图2是本发明实施例二提供的结构化查询语言定位方法的流程图。图3是本发明实施例三提供的结构化查询语言定位装置的结构图。图4是本发明实施例四提供的数据库服务器的示意图。如下具体实施方式将结合所述附图进一步说明本发明。具体实施方式为了能够更清楚地理解本发明的所述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的
技术领域
:的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。实施例一参阅图1所示,为本发明实施例一提供的结构化查询语言定位方法的应用环境架构图。本发明的结构化查询语言定位方法应用在一个数据库服务器及一个或多个计算机装置构成的环境中。例如,由数据库服务器3和计算机装置4构成的环境中。本实施例中,所述计算机装置4可以为个人电脑。在一个实施例中,所述数据库服务器3与计算机装置4可以通过有线(例如usb(universalserialbus,通用串行总线)或无线的方式建立通讯连接。所述无线方式可以是传统无线通讯的任何类型,例如无线电、无线保真(wirelessfidelity,wifi)、蜂窝、卫星、广播等。无线通讯技术可以包括,但不限于,全球移动通信系统(globalsystemformobilecommunications,gsm)、通用分组无线业务(generalpacketradioservice,gprs)、码分多址(codedivisionmultipleaccess,cdma),宽带码分多址(w-cdma)、cdma2000、imt单载波(imtsinglecarrier)、增强型数据速率gsm演进(enhanceddataratesforgsmevolution,edge)、长期演进技术(long-termevolution,lte)、高级长期演进技术、时分长期演进技术(time-divisionlte,td-lte)、高性能无线电局域网(highperformanceradiolocalareanetwork,hiperlan)、高性能无线电广域网(highperformanceradiowideareanetwork,hiperwan)、本地多点派发业务(localmultipointdistributionservice,lmds)、全微波存取全球互通(worldwideinteroperabilityformicrowaveaccess,wimax)、紫蜂协议(zigbee)、蓝牙、正交频分复用技术(flashorthogonalfrequency-divisionmultiplexing,flash-ofdm)、大容量空分多路存取(highcapacityspatialdivisionmultipleaccess,hc-sdma)、通用移动电信系统(universalmobiletelecommunicationssystem,umts)、通用移动电信系统时分双工(umtstime-divisionduplexing,umts-tdd)、演进式高速分组接入(evolvedhighspeedpacketaccess,hspa+)、时分同步码分多址(timedivisionsynchronouscodedivisionmultipleaccess,td-scdma)、演进数据最优化(evolution-dataoptimized,ev-do)、数字增强无绳通信(digitalenhancedcordlesstelecommunications,dect)及其他。实施例二图2是本发明实施例二提供的结构化查询语言定位方法的流程图。在本实施例中,所述结构化查询语言定位方法可以应用于数据库服务器中,对于需要进行结构化查询语言定位的数据库服务器,可以直接在数据库服务器上集成本发明的方法所提供的用于结构化查询语言定位的功能,或者以软件开发工具包(softwaredevelopmentkit,sdk)的形式运行在数据库服务器上。如图2所示,所述结构化查询语言定位方法具体包括以下步骤,根据不同的需求,所述流程图中步骤的顺序可以改变,某些步骤可以省略。步骤s1、数据库服务器根据sql_id,在v$session视图中查找与所述sql_id所对应的计算机装置(machine)及端口(port)。其中,sql_id是指正在执行的sql语句的标识。在一个实施例中,所述数据库服务器为oracle数据库服务器。本实施例中,所述v$session视图用于记录oracle数据库的所有用户的会话(session)信息。每一个连接到oracle数据库的会话都能在所述v$session视图中对应一条记录。所述v$session视图中所记录的会话信息包括每条会话记录对应的用户、正在执行或者刚刚执行的sql语句、连接者的信息等。在一个实施例中,所述v$session视图存储于所述数据库服务器的存储器中。在一个实施例中,所述v$session视图通常包括字段如saddr(session的地址)、sid(session标识值)、serial#(会话序列号,sid和serial#可联合唯一确定一个session)、audsid(审计会话id,可以通过audsid查询当前session的sid,selectsidfromv$sessionwhereaudsid=userenv(′sessionid′)、paddr(进程地址,关联v$process的addr字段,通过这个可以查询到进程对应的session)、user#(同于dba_users中的user_id,oracle内部进程user#为0)、username(会话拥有者用户名,等于dba_users中的username,oracle内部进程的usemame为空)、command(正在执行的sql语句类型,如1为createtable、3为select等)、ownerid(如果所述列值为2147483644则值无效,否则值用于会话迁移、并行等)、taddr(addressoftransactionstateobject,表示事务处理状态对象的地址,对应于$transaction.addr列)、lockwait(标识当前查询是否处于锁等待状态,为空则表示无等待)、status(标识session状态,active表示正执行sql语句;inactive表示等待操作;killed表示被标注为杀死)、server(服务器类型,dedicated专用、shared共享)、machine(计算机装置)、port(端口)、sql_address、sql_hash_value(和sql_address一起使用标识正在执行的sql语句)、sql_id(正在执行的sql语句的标识id)等等。步骤s2、所述数据库服务器获取所述端口的占用信息。所述端口的占用信息包括所述端口所对应的ip地址,以及所述端口对应的进程号。在一个实施例中,所述获取所述端口的占用信息包括:所述数据库服务器控制所述计算机装置利用netstat指令查询所述端口的占用信息,由此获得所述端口的占用信息。在一个实施例中,所述数据库服务器可以根据用户的输入利用用户账号及密码登入到所述sql_id所对应的计算机装置。在其他实施例中,所述数据库服务器可以无需用户账号及密码即可登入到所述sql_id所对应的计算机装置。在一个实施例中,所述netstat指令是指用来查看当前系统网络状态信息,包括端口,连接情况等,常用方式为:netstat-atunlp,各参数含义如下:-t:指明显示tcp端口-u:指明显示udp端口-l:仅显示监听套接字(listen状态的套接字)-p:显示进程标识符和程序名称,每一个套接字/端口都属于一个程序-n:不进行dns解析-a显示所有连接的端口在优选实施方式中,所述获取所述端口的占用信息包括:所述数据库服务器控制所述计算机装置将所述netstat指令与grep指令配合使用(即使用netstat-anp|grepport指令)来查询所述端口的占用信息,由此获得所述端口的占用信息。需要说明的是,通常端口的状态分为:listening(套接字正在监听连接)、established(连接已建立)、time_wait(这个套接字已经关闭,正在等待远程套接字的关闭传送[fin、ack、fin、ack都完毕,这是主动方的最后一个状态,在过了2msl时间后变为closed状态)及close_wait(远程套接字已经关闭:正在等待关闭这个套接字[被动关闭的一方收到fin])。举例而言,所述数据库服务器在所述v$session视图中查找到与正在执行的某条sql语句所对应的计算机装置为“cnszxxxxx8”,端口包括“58391”和“65053”。假设所述数据库服务器利用netstat-anp|grepport指令查询结果如下:[serviceop@cnszxxxxx8~]$netstat-anp|grep58391tcp00::ffff:10.33.193.18:58391::ffff:10.33.194.209:20059established464734/javatcp00::ffff:10.33.193.26:58391::ffff:10.33.30.221:1528established292141/java[serviceop@cnszxxxxx8~]$netstat-anp|grep65053tcp10::ffff:10.33.193.48:65053::ffff:30.16.233.19:80close_wait81987/javatcp00::ffff:10.33.192.120:65053::ffff:10.33.30.221:1528established292139/java[serviceop@cnszxxxxx8~]$所述数据库服务器根据所述查询即可得知端口“58391”对应的ip地址为“10.33.193.18”和“10.33.193.26”。端口“65053”对应的ip地址为“10.33.193.48”和“10.33.192.120”。步骤s3、所述数据库服务器从所述端口所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址。为清楚说明本发明,仍然以所述举例加以说明。假设所述数据库服务器采用的ip地址为“10.33.30.221”,端口为“1528”,与所述计算机装置“cnszxxxxx8”建立通讯连接。那么根据所述查询结果,即可从所述计算机装置“cnszxxxxx8”的端口“58391”所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址为“10.33.193.26”,以及从端口“65053”所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址为“10.33.192.120”。步骤s4、所述数据库服务器根据所筛选出的ip地址确定目标应用程序,确定所述正在执行的sql语句来自该目标应用程序。在一个实施例中,所述根据所筛选出的ip地址确定目标应用程序包括:(1)所述数据库服务器根据所述筛选出的ip地址(即用于与所述数据库服务器建立连接所用的ip地址)确定一个目标进程,其中,所述筛选出的ip地址分配给了所述目标进程;及(2)所述数据库服务器确定所述目标应用程序为所述目标进程所对应的应用程序。由此所述数据库服务器即可确定正在执行的所述sql语句来自所述确定的进程所对应的应用程序(即目标应用程序)。本实施例中,所述数据库服务器可以根据所述筛选出的ip地址检索配置管理数据库(configurationmanagementdatabase,cmdb)来确定所述筛选出的ip地址具体是分配给了哪个进程,由此确定分配了所述筛选出的ip地址的进程为所述目标进程。其中,所述配置管理数据库预先记录了每个应用程序的进程具体分配到的是哪个ip地址。在其他实施例中,所述数据库服务器可以根据所述端口的占用信息即所述端口所对应的ip地址以及所述端口对应的进程号来确定所述目标应用程序。具体地,所述数据库服务器从所述端口的占用信息中,获取到用于与所述数据库服务器建立连接所用的ip地址以及进程号。所述数据库服务器然后再利用ps命令获取所述进程号的详细信息,根据所述用于与所述数据库服务器建立连接所采用的ip地址,从所述进程号的详细信息中获得与所述进程号所对应的应用程序,确定所述目标应用程序为与所述进程号所对应的应用程序。由此所述数据库服务器即可确定正在执行的所述sql语句来自与所述进程号所对应的应用程序(即目标应用程序)。举例而言,假设在所述步骤s2中,利用netstat-anp|grepport指令的查询结果如下:[serviceop@cnszxxxxx8~]$netstat-anp|grep58391tcp00::ffff:10.33.193.18:58391::ffff:10.33.194.209:20059established464734/javatcp00::ffff:10.33.193.26:58391::ffff:10.33.30.221:1528established292141/java仍然假设所述数据库服务器采用的ip地址为“10.33.30.221”,端口为“1528”。由此,可从所述netstat-anp|grepport指令的查询结果中找到所述端口(即“58391”)与所述数据库服务器建立连接所采用的ip地址是10.33.193.26,以及所对应的进程号是“292141”。所述数据库服务器然后再利用ps命令获取所述进程号(即“292141”)的详细信息。ps命令是processstatus的缩写。ps命令用来列出系统中当前运行的进程。举例而言,假设所述数据库服务器利用ps命令获取到所述进程号(即“292141”)的信息如下:[serviceop@cnszxxxxx8~]#ps-ef|grep292141xx812921412920938june14?06:48:14/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/bin/java-xnoopt-server-xms2048m-xmx2048m-xgc:gencon-xns512m-verbosegc-dweblogic.threadpool.minpoolsize=50-xxgcthreads:8-xx:flightrecorder=false-djrockit.oomdiagnostics=true-djava.net.preferipv4stack=true-dpafa.log.home=/wls/applogs/rtlog/pss-xxxx6554-dconfigpath=/wls/appsystems/pss-xxxx/config/-dinstance.name=pss-xxxx6554-djava.security.egd=file:/dev/./urandom-djava.library.path=/wls/xx81/bea1036-18/wlserver_10.3/server/native/linux/i686-dweblogic.name=pss-xxxx6554-djvm_default_bind_ip=10.33.193.26-classpath/wls/appsystems/pss-xxxx/lib/qname.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_pingan_localchannel_1036.jar:/wls/xx81/bea1036-18/patch_wls1036/profiles/default/sys_rmanifest_classpath/weblogic_patch.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_ext_log_form.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/crpingan_cachecontrol_1036.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_pingan_localchannel_1036.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_request_url_bug14396863_1036.jar::/wls/xx81/bea1036-18/wlserver_10.3/server:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/jre/lib/rt.jar:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/lib/tools.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/weblogic.jar:/wls/appsystems/pss-xxxx/config:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/jre/lib/rt.jar:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/lib/tools.jar:/wls/appsystems/pss-xxxx/lib:/wls/appsystems/pss-xxxx/lib/pafa2_patch070224.jar:/wls/appsystems/pss-xxxx/lib/pafa.jar:/wls/appsystems/pss-xxxx/lib/log4j-1.2.8.jar:/wls/appsystems/pss-xxxx/lib/pafafrontcontroller.jar:/wls/appsystems/pss-xxxx/lib/castor-xml.jar:/wls/appsystems/pss-xxxx/lib/castor.jar:/wls/appsystems/pss-xxxx/lib/jakarta-regexp-1.1.jar:/wls/appsystems/pss-xxxx/lib/javamail.jar:/wls/appsystems/pss-xxxx/lib/jaxp.jar:/wls/appsystems/pss-xxxx/lib/jaxrpc-api.jar:/wls/appsystems/pss-xxxx/lib/jaxrpc-ri.jar:/wls/appsystems/pss-xxxx/lib/saaj-api.jar:/wls/appsystems/pss-xxxx/lib/saaj-ri.jar:/wls/appsystems/pss-xxxx/lib/xercesimpl.jar:/wls/appsystems/pss-xxxx/lib/xmlparserapis.jar:/wls/appsystems/pss-xxxx/lib/xmlrpc.jar-dweblogic.management.server=http://10.33.195.191:47211-dweblogic.system.bootidentityfile=/wls/wldomains/prd10sfwldom462/boot.properties-dweblogic.productionmodeenabled=true-djava.security.policy==/wls/xx81/bea1036-18/wlserver_10.3/server/lib/weblogic.policy-dinstance.name=pss-xxxx6554weblogic.server由此,所述数据库服务器可从所述进行号的信息中获得名为“pss-xxxx6554”的应用程序与进程号“292141”对应。由此所述数据库服务器即可定位到所述正在执行的sql语句源自名为“pss-xxxx6554”的应用程序。综上所述,本发明实施例中所述的结构化查询语言定位方法,首先根据sql_id,在v$session视图中查找与所述sql_id所对应的计算机装置和端口号,然后利用netstat指令找到所述端口号所对应的ip,并筛选出用于与数据库服务器建立连接所用的ip地址。最后根据所述所筛选出的ip地址,通过cmdb找出所述筛选出的ip地址具体是分配给了哪个应用程序,从而定位到正在执行的所述sql语句具体来自哪个应用程序。定位过程无需依赖开发人员扫描代码,维护人员无需熟悉业务逻辑或数据库业务表信息,方法快速准确,且可以形成通用方案,定位过程减少了人力投入,提高了定位效率,维护人员可独立完成。所述图2详细介绍了本发明的结构化查询语言定位方法,下面结合第3~4图,对实现所述结构化查询语言定位方法的软件装置的功能模块以及实现所述结构化查询语言定位方法的硬件装置架构进行介绍。应所述了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。实施例三参阅图3所示,是本发明实施例三提供的结构化查询语言定位装置的结构图。在一些实施例中所述结构化查询语言定位装置30运行于数据库服务器中。所述数据库服务器通过网络连接了计算机装置。所述结构化查询语言定位装置30可以包括多个由程序代码段所组成的功能模块。所述结构化查询语言定位装置30中的各个程序段的程序代码可以存储于数据库服务器的存储器中,并由所述至少一个处理器所执行,以实现(详见图2描述)结构化查询语言定位。本实施例中,所述结构化查询语言定位装置30根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:查找模块301、执行模块302。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在本实施例中,关于各模块的功能将在后续的实施例中详述。查找模块301根据sql_id,在数据库服务器的v$session视图中查找与所述sql_id所对应的计算机装置(machine)及端口(port)。其中,sql_id是指正在执行的sql语句的标识。在一个实施例中,所述数据库服务器为oracle数据库服务器。本实施例中,所述v$session视图用于记录oracle数据库的所有用户的会话(session)信息。每一个连接到oracle数据库的会话都能在所述v$session视图中对应一条记录。所述v$session视图中所记录的会话信息包括每条会话记录对应的用户,正在执行或者刚刚执行的sql语句,连接者的信息等。在一个实施例中,所述v$session视图存储于所述数据库服务器的存储器中。在一个实施例中,所述v$session视图通常包括字段如saddr(session的地址)、sid(session标识值)、serial#(会话序列号,sid和serial#可联合唯一确定一个session)、audsid(审计会话id,可以通过audsid查询当前session的sid,selectsidfromv$sessionwhereaudsid=userenv(′sessionid′)、paddr(进程地址,关联v$process的addr字段,通过这个可以查询到进程对应的session)、user#(同于dba_users中的user_id,oracle内部进程user#为0)、username(会话拥有者用户名,等于dba_users中的usemame,oracle内部进程的username为空)、command(正在执行的sql语句类型,如1为createtable、3为select等)、ownerid(如果所述列值为2147483644则值无效,否则值用于会话迁移、并行等)、taddr(addressoftransactionstateobject,表示事务处理状态对象的地址,对应于$transaction.addr列)、lockwait(标识当前查询是否处于锁等待状态,为空则表示无等待)、status(标识session状态,active表示正执行sql语句;inactive表示等待操作;killed表示被标注为杀死)、server(服务器类型,dedicated专用、shared共享)、machine(计算机装置)、port(端口)、sql_address、sql_hash_value(和sql_address一起使用标识正在执行的sql语句)、sql_id(正在执行的sql语句的标识id)等等。执行模块302获取所述端口的占用信息。所述端口的占用信息包括所述端口所对应的ip地址以及所述端口对应的进程号。在一个实施例中,所述获取所述端口的占用信息包括:所述数据库服务器控制所述计算机装置利用netstat指令查询所述端口的占用信息,由此获得所述端口的占用信息。在一个实施例中,所述执行模块302可以根据用户的输入利用用户账号及密码登入到所述sql_id所对应的计算机装置。在其他实施例中,所述执行模块302可以无需用户账号及密码即可登入到所述sql_id所对应的计算机装置。在一个实施例中,所述netstat指令是指用来查看当前系统网络状态信息,包括端口,连接情况等,常用方式为:netstat-atunlp,各参数含义如下:-t:指明显示tcp端口-u:指明显示udp端口-1:仅显示监听套接字(listen状态的套接字)-p:显示进程标识符和程序名称,每一个套接字/端口都属于一个程序-n:不进行dns解析-a显示所有连接的端口在优选实施方式中,所述获取所述端口的占用信息包括:所述执行模块302控制所述计算机装置将所述netstat指令与grep指令配合使用(即使用netstat-anp|grepport指令)来查询所述端口的占用信息,由此获得所述端口的占用信息。需要说明的是,通常端口的状态分为:listening(套接字正在监听连接)、established(连接已建立)、time_wait(这个套接字已经关闭,正在等待远程套接字的关闭传送[fin、ack、fin、ack都完毕,这是主动方的最后一个状态,在过了2msl时间后变为closed状态)及close_wait(远程套接字已经关闭:正在等待关闭这个套接字[被动关闭的一方收到fin])。举例而言,所述执行模块302在所述v$session视图中查找到与正在执行的某条sql语句所对应的计算机装置为“cnszxxxxx8”,端口包括“58391”和“65053”。假设所述执行模块302利用netstat-anp|grepport指令的查询结果如下:[serviceop@cnszxxxxx8~]$netstat-anp|grep58391tcp00::ffff:10.33.193.18:58391::ffff:10.33.194.209:20059established464734/javatcp00::ffff:10.33.193.26:58391::ffff:10.33.30.221:1528established292141/java[serviceop@cnszxxxxx8~]$netstat-anp|grep65053tcp10::ffff:10.33.193.48:65053::ffff:30.16.233.19:80close_wait81987/javatcp00::ffff:10.33.192.120:65053::ffff:10.33.30.221:1528established292139/java[serviceop@cnszxxxxx8~]$所述执行模块302根据所述查询结果即可得知端口“58391”对应的ip地址为“10.33.193.18”和“10.33.193.26”。端口“65053”对应的ip地址为“10.33.193.48”和“10.33.192.120”。所述执行模块302从所述端口所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址。为清楚说明本发明,仍然以所述举例加以说明。假设所述数据库服务器采用的ip地址为“10.33.30.221”,端口为“1528”,与所述计算机装置“cnszxxxxx8”建立通讯连接。那么根据从所述查询结果,即可从所述计算机装置“cnszxxxxx8”的端口“58391”所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址为“10.33.193.26”,以及从端口“65053”所对应的ip地址中,筛选出用于与所述数据库服务器建立连接所用的ip地址为“10.33.192.120”。所述执行模块302根据所筛选出的ip地址确定目标应用程序,所述正在执行的sql语句来自该目标应用程序。在一个实施例中,所述根据所筛选出的ip地址确定目标应用程序包括:(1)所述执行模块302根据所述筛选出的ip地址(即用于与所述数据库服务器建立连接所用的ip地址)确定一个目标进程,其中,所述筛选出的ip地址分配给了所述目标进程;及(2)所述执行模块302确定所述目标应用程序为所述目标进程所对应的应用程序。由此所述执行模块302即可确定正在执行的所述sql语句来自所述确定的进程所对应的应用程序(即目标应用程序)。在一个实施例中,所述执行模块302可以根据所述筛选出的ip地址检索配置管理数据库(configurationmanagementdatabase,cmdb)来确定所述筛选出的ip地址具体是分配给了哪个进程,由此确定分配了所述筛选出的ip地址的进程为所述目标进程。其中,所述配置管理数据库预先记录了每个应用程序的进程具体分配到的是哪个ip地址。在其他实施例中,所述执行模块302可以根据所述端口的占用信息即所述端口所对应的ip地址以及所述端口对应的进程号来确定所述目标应用程序。具体地,所述执行模块302从所述端口的占用信息中,获取到用于与所述数据库服务器建立连接所用的ip地址以及进程号。所述执行模块302然后再利用ps命令获取所述进程号的详细信息,根据所述用于与所述数据库服务器建立连接所采用的ip地址,从所述进程号的详细信息中获得与所述进程号所对应的应用程序,确定所述目标应用程序为与所述进程号所对应的应用程序。由此所述执行模块302即可确定正在执行的所述sql语句来自与所述进程号所对应的应用程序(即目标应用程序)。举例而言,假设所述执行模块302利用netstat-anp|grepport指令的查询结果如下:[serviceop@cnszxxxxx8~]$netstat-anp|grep58391tcp00::ffff:10.33.193.18:58391::ffff:10.33.194.209:20059established464734/javatcp00::ffff:10.33.193.26:58391::ffff:10.33.30.221:1528established292141/java仍然假设所述数据库服务器采用的ip地址为“10.33.30.221”,端口为“1528”。由此,所述执行模块302可从所述netstat-anp|grepport指令的查询结果中找到所述端口(即“58391”)与所述数据库服务器建立连接所采用的ip地址是10.33.193.26,以及所对应的进程号是“292141”。所述执行模块302然后再利用ps命令获取所述进程号(即“292141”)的详细信息。ps命令是processstatus的缩写。ps命令用来列出系统中当前运行的进程。举例而言,假设所述执行模块302利用ps命令获取到所述进程号(即“292141”)的信息如下:[serviceop@cnszxxxxx8~]#ps-ef|grep292141xx812921412920938june14?06:48:14/wls/xx81/bea1036-18/jrockit-jdk1.6.0-37-r28.2.5-4.1.0/bin/java-xnoopt-server-xms2048m-xmx2048m-xgc:gencon-xns512m-verbosegc-dweblogic.threadpool.minpoolsize=50-xxgcthreads:8-xx:flightrecorder=false-djrockit.oomdiagnostics=true-djava.net.preferipv4stack=true-dpafa.log.home=/wls/applogs/rtlog/pss-xxxx6554-dconfigpath=/wls/appsystems/pss-xxxx/config/-dinstance.name=pss-xxxx6554-djava.security.egd=file:/dev/./urandom-djava.library.path=/wls/xx81/bea1036-18/wlserver_10.3/server/native/linux/i686-dweblogic.name=pss-xxxx6554-djvm_default_bind_ip=10.33.193.26-classpath/wls/appsystems/pss-xxxx/lib/qname.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_pingan_localchannel_1036.jar:/wls/xx81/bea1036-18/patch_wls1036/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_ext_log_form.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/crpingan_cachecontrol_1036.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_pingan_localchannel_1036.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/cr/cr_request_url_bug14396863_1036.jar::/wls/xx81/bea1036-18/wlserver_10.3/server:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/jre/lib/rt.jar:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/lib/tools.jar:/wls/xx81/bea1036-18/wlserver_10.3/server/lib/weblogic.jar:/wls/appsystems/pss-xxxx/config:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/jre/lib/rt.jar:/wls/xx81/bea1036-18/jrockit-jdk1.6.0_37-r28.2.5-4.1.0/lib/tools.jar:/wls/appsystems/pss-xxxx/lib:/wls/appsystems/pss-xxxx/lib/pafa2_patch070224.jar:/wls/appsystems/pss-xxxx/lib/pafa.jar:/wls/appsystems/pss-xxxx/lib/log4j-1.2.8.jar:/wls/appsystems/pss-xxxx/lib/pafafrontcontroller.jar:/wls/appsystems/pss-xxxx/lib/castor-xml.jar:/wls/appsystems/pss-xxxx/lib/castor.jar:/wls/appsystems/pss-xxxx/lib/jakarta-regexp-1.1.jar:/wls/appsystems/pss-xxxx/lib/javamail.jar:/wls/appsystems/pss-xxxx/lib/jaxp.jar:/wls/appsystems/pss-xxxx/lib/jaxrpc-api.jar:/wls/appsystems/pss-xxxx/lib/jaxrpc-ri.jar:/wls/appsystems/pss-xxxx/lib/saaj-api.jar:/wls/appsystems/pss-xxxx/lib/saaj-ri.jar:/wls/appsystems/pss-xxxx/lib/xercesimpl.jar:/wls/appsystems/pss-xxxx/lib/xmlparserapis.jar:/wls/appsystems/pss-xxxx/lib/xmlrpc.jar-dweblogic.management.server=http://10.33.195.191:47211-dweblogic.system.bootidentityfile=/wls/wldomains/prd10sfwldom462/boot.properties-dweblogic.productionmodeenabled=true-djava.security.policy==/wls/xx81/bea1036-18/wlserver_10.3/server/lib/weblogic.policy-dinstance.name=pss-xxxx6554weblogic.server所述执行模块302可从所述进行号的信息中获得名为“pss-xxxx6554”的应用程序与进程号“292141”对应。由此所述执行模块302即可定位到所述正在执行的sql语句源自名为“pss-xxxx6554”的应用程序。综上所述,本发明实施例中所述的结构化查询语言定位装置,首先根据sql_id,在v$session视图中查找与所述sql_id所对应的计算机装置和端口号,然后利用netstat指令找到所述端口号所对应的ip,并筛选出用于与数据库服务器建立连接所用的ip地址。最后根据所述所筛选出的ip地址,通过cmdb找出所述筛选出的ip地址具体是分配给了哪个应用程序,从而定位到正在执行的所述sql语句具体来自哪个应用程序。定位过程无需依赖开发人员扫描代码,维护人员无需熟悉业务逻辑或数据库业务表信息,方法快速准确,且可以形成通用方案,定位过程减少了人力投入,提高了定位效率,维护人员可独立完成。实施例四参阅图4所示,为本发明实施例四提供的数据库服务器的结构示意图。在本发明较佳实施例中,所述数据库服务器3包括存储器31、至少一个处理器32、至少一条通信总线33。所述数据库服务器3通过有线或者无线的方式与计算机装置4建立通讯连接。本领域技术人员应所述了解,图4示出的数据库服务器的结构并不构成本发明实施例的限定,既可以是总线型结构,也可以是星形结构,所述数据库服务器3还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置。在一些实施例中,所述数据库服务器3包括一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的终端,其硬件包括但不限于微处理器、专用集成电路、可编程门阵列、数字处理器及嵌入式设备等。需要说明的是,所述数据库服务器3仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。在一些实施例中,所述存储器31用于存储程序代码和各种数据,例如安装在所述数据库服务器3中的结构化查询语言定位装置30、所述v$session视图等,并在数据库服务器3的运行过程中实现高速、自动地完成程序或数据的存取。所述存储器31包括只读存储器(read-onlymemory,rom)、随机存储器(randomaccessmemory,ram)、可编程只读存储器(programmableread-onlymemory,prom)、可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom)、一次可编程只读存储器(one-timeprogrammableread-onlymemory,otprom)、电子擦除式可复写只读存储器(electrically-erasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。在一些实施例中,所述至少一个处理器32可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(centralprocessingunit,cpu)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。所述至少一个处理器32是所述数据库服务器3的控制核心(controlunit),利用各种接口和线路连接整个数据库服务器3的各个部件,通过运行或执行存储在所述存储器31内的程序或者模块,以及调用存储在所述存储器31内的数据,以执行数据库服务器3的各种功能和处理数据,例如执行结构化查询语言定位的功能。在一些实施例中,所述至少一条通信总线33被设置为实现所述存储器31以及所述至少一个处理器32等之间的连接通信。尽管未示出,所述数据库服务器3还可以包括给各个部件供电的电源(比如电池),优选的,电源可以通过电源管理装置与所述至少一个处理器32逻辑相连,从而通过电源管理装置实现管理充电、放电、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述数据库服务器3还可以包括多种传感器、蓝牙模块、wi-fi模块等,在此不再赘述。应所述了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。所述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。所述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台数据库服务器(可以是服务器、个人电脑等)或处理器(processor)执行本发明各个实施例所述方法的部分。在进一步的实施例中,结合图3,所述至少一个处理器32可执行所述数据库服务器3的操作装置以及安装的各类应用程序(如所述的结构化查询语言定位装置30)、程序代码等,例如,所述的各个模块。所述存储器31中存储有程序代码,且所述至少一个处理器32可调用所述存储器31中存储的程序代码以执行相关的功能。例如,图3中所述的各个模块是存储在所述存储器31中的程序代码,并由所述至少一个处理器32所执行,从而实现所述各个模块的功能以达到进行结构化查询语言定位的目的。在本发明的一个实施例中,所述存储器31存储多个指令,所述多个指令被所述至少一个处理器32所执行以实现进行结构化查询语言定位。具体地,所述至少一个处理器32对所述指令的具体实现方法可参考图2对应实施例中相关步骤的描述,在此不赘述。在本发明所提供的几个实施例中,应所述理解到,所揭露的装置,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。对于本领域技术人员而言,显然本发明不限于所述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是所述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1