oracle 跟踪远程会话

nle07wnf  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(106)

所以,在我们的一个数据库中,我们看到一个有很长等待时间的查询。当我们查找SQL ID并查看DB时,我们没有找到那个查询。当我们查看v$session时,我们看到MACHINE是一个不同的物理机器,运行着其他数据库。所以,我们猜测这可能是通过DB链接完成的,但我们在服务器上也找不到SQL代码
有没有一种方法可以让我在v$session或v$process中看到任何数据,这些数据可以告诉我远程数据库上的哪个会话正在执行这个查询?
谢谢你,谢谢

nxagd54h

nxagd54h1#

数据库链接会话将显示为type = 'USER'program = 'oracle@....'所有其他以“oracle@”开头的程序的会话都应该是后台进程。您还将看到osuser = 'oracle'(如果这是您安装Oracle数据库的地方),而machine将是托管数据库的服务器(可能是远程服务器,但不总是)。

链接连接的目标将显示与源数据库服务器上 * 影子进程 * 的OS pid匹配的客户端进程/pid。

因此,一旦您确定了本地dblink会话,就需要注意它的processmachine字段。(machine),它必须是那个;如果该主机上有多个数据库,您可以在该主机上本地使用ps来查找上面由process标识的pid连接到哪个示例:

> ps -fp 96505

UID        PID  PPID  C STIME TTY          TIME CMD
oracle   96505     1  0 18:39 ?        00:00:00 oracleSID (LOCAL=NO)

字符串
其中SID是数据库的实际示例名。登录到该数据库。
一旦进入作为链接源的数据库,假设您登录到该节点的示例 * 本地 *(如果是RAC),查找具有该spid的进程(请注意spid中的s):

SELECT s.*
  FROM v$process p,
       v$session s
 WHERE p.spid = 96505 -- from `process` earlier
   AND p.addr = s.paddr


这将是您的原始会话。然后您可以引用sql_id并从v$sqlarea获取SQL并继续进行调查。

相关问题