所以,在我们的一个数据库中,我们看到一个有很长等待时间的查询。当我们查找SQL ID并查看DB时,我们没有找到那个查询。当我们查看v$session时,我们看到MACHINE是一个不同的物理机器,运行着其他数据库。所以,我们猜测这可能是通过DB链接完成的,但我们在服务器上也找不到SQL代码有没有一种方法可以让我在v$session或v$process中看到任何数据,这些数据可以告诉我远程数据库上的哪个会话正在执行这个查询?谢谢你,谢谢
nxagd54h1#
数据库链接会话将显示为type = 'USER'和program = 'oracle@....'所有其他以“oracle@”开头的程序的会话都应该是后台进程。您还将看到osuser = 'oracle'(如果这是您安装Oracle数据库的地方),而machine将是托管数据库的服务器(可能是远程服务器,但不总是)。
type
'USER'
program
'oracle@....'
osuser
'oracle'
machine
链接连接的目标将显示与源数据库服务器上 * 影子进程 * 的OS pid匹配的客户端进程/pid。
因此,一旦您确定了本地dblink会话,就需要注意它的process和machine字段。(machine),它必须是那个;如果该主机上有多个数据库,您可以在该主机上本地使用ps来查找上面由process标识的pid连接到哪个示例:
process
ps
> 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):
SID
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并继续进行调查。
sql_id
v$sqlarea
1条答案
按热度按时间nxagd54h1#
数据库链接会话将显示为
type
='USER'
和program
='oracle@....'
所有其他以“oracle@”开头的程序的会话都应该是后台进程。您还将看到osuser
='oracle'
(如果这是您安装Oracle数据库的地方),而machine
将是托管数据库的服务器(可能是远程服务器,但不总是)。链接连接的目标将显示与源数据库服务器上 * 影子进程 * 的OS pid匹配的客户端进程/pid。
因此,一旦您确定了本地dblink会话,就需要注意它的
process
和machine
字段。(machine
),它必须是那个;如果该主机上有多个数据库,您可以在该主机上本地使用ps
来查找上面由process
标识的pid连接到哪个示例:字符串
其中
SID
是数据库的实际示例名。登录到该数据库。一旦进入作为链接源的数据库,假设您登录到该节点的示例 * 本地 *(如果是RAC),查找具有该
spid
的进程(请注意spid
中的s
):型
这将是您的原始会话。然后您可以引用
sql_id
并从v$sqlarea
获取SQL并继续进行调查。